无连通网络下的GitLab镜像搭建方案咨询
解决方案
针对三个无网络连通性、仅支持文件传输的环境,可通过以下几种离线方式实现GitLab仓库的只读镜像搭建:
方案一:基于Git裸仓库的离线同步(适合单仓库或批量仓库)
- 在network_1的GitLab侧操作:
- 克隆需要镜像的仓库为裸仓库格式:
git clone --bare git@network1-gitlab.example.com:group/project.git - 将裸仓库打包为压缩文件,方便跨网络传输:
tar -czf project_bare.tar.gz project.git/
- 克隆需要镜像的仓库为裸仓库格式:
- 跨网络传输:通过允许的离线文件传输方式(如物理介质、离线同步工具)将压缩包传到network_2/3的目标服务器。
- 在network_2/3的GitLab侧操作:
- 解压裸仓库包:
tar -xzf project_bare.tar.gz - 将裸仓库移动到GitLab的仓库存储目录(默认路径为
/var/opt/gitlab/git-data/repositories/),并修正权限:mv project.git/ /var/opt/gitlab/git-data/repositories/group/ chown -R git:git /var/opt/gitlab/git-data/repositories/group/project.git/ - 刷新GitLab仓库列表,让系统识别新导入的仓库:
gitlab-rake gitlab:import:repos - 设置仓库为只读:进入仓库设置页面,关闭「允许推送」权限;或通过API批量配置:
curl --request PUT --header "PRIVATE-TOKEN: <你的GitLab令牌>" "https://network2-gitlab.example.com/api/v4/projects/<项目ID>" --data "allow_push=false"
- 解压裸仓库包:
方案二:GitLab完整备份+只读配置(适合全实例镜像)
- 在network_1的GitLab侧操作:
- 执行全实例备份:
备份文件默认存储在gitlab-backup create/var/opt/gitlab/backups/,格式为<时间戳>_gitlab_backup.tar - 备份GitLab配置文件:
tar -czf gitlab_config.tar.gz /etc/gitlab/gitlab.rb /etc/gitlab/gitlab-secrets.json
- 执行全实例备份:
- 跨网络传输:将备份文件和配置压缩包传到network_2/3的服务器。
- 在network_2/3的GitLab侧操作:
- 安装与network_1完全同版本的GitLab,停止相关服务:
gitlab-ctl stop puma gitlab-ctl stop sidekiq - 恢复备份(替换
<时间戳>为实际备份文件名的时间戳):gitlab-backup restore BACKUP=<时间戳> - 恢复配置文件并重启服务:
tar -xzf gitlab_config.tar.gz -C / gitlab-ctl reconfigure gitlab-ctl start - 设置全局只读:修改
/etc/gitlab/gitlab.rb,添加gitlab_rails['gitlab_default_can_push'] = false,执行gitlab-ctl reconfigure生效。
- 安装与network_1完全同版本的GitLab,停止相关服务:
方案三:手动导出/导入仓库快照(适合少量仓库)
- 在network_1的GitLab侧操作:进入目标仓库的「设置」→「导出项目」,选择导出格式为
tar.gz,包含代码、分支、标签等内容,下载导出包。 - 跨网络传输:将导出包传到network_2/3的服务器。
- 在network_2/3的GitLab侧操作:进入「新建项目」→「导入项目」,选择「GitLab导出」,上传压缩包完成导入,之后进入仓库设置关闭推送权限。
关键注意事项
- 版本一致性:确保network_2/3的GitLab版本与network_1完全一致,避免备份/导入时出现兼容性问题。
- 增量同步优化:对于大仓库,可使用
git bundle创建增量包减少传输体积:# 在network_1创建基于上次同步节点的增量包 git bundle create project_increment.bundle <上次同步的Commit哈希>..main # 在目标服务器合并增量包 cd project.git/ git bundle unbundle ../project_increment.bundle - 权限管控:严格限制network_2/3实例的推送权限,避免误操作修改镜像内容。
内容的提问来源于stack exchange,提问作者C-nan
相关产品推荐
相关产品推荐

