Skip to content
跳到项目内容
全部项目
公司基础设施/持续维护

GitLab 搭建与代码治理

自托管协作平台与双仓迁移

GitLabNginxDocker ComposeGit LFS
GitLab 实例与代码迁移链路01 / 01
01

核心业务

团队需要统一的代码协作入口,同时处在 GitHub 与自托管 GitLab 并行的迁移阶段。建设工作从实例部署延伸到域名与证书、成员接入和代码同步:既要让新人能够加入团队,也要保证已有分支、标签和大文件在迁移时保持完整。

实际约束之一是服务器无法稳定访问 GitHub,因此镜像任务由可访问两端的中间主机执行。迁移期间有些仓库已以 GitLab 为主,有些仍以 GitHub 为主,同步方向需要逐仓库、逐分支明确。

实例与访问入口
Docker Compose 运行 GitLab,宿主 Nginx 终止 TLS,内部 HTTP 只绑定回环地址;SSH 克隆使用独立端口。
成员与仓库治理
注册策略与组成员同步分别处理,自动授予 Developer,同时保留已有 Maintainer / Owner 权限。
双平台迁移
使用裸镜像和明确 refspec 同步 Git 内容,按仓库主站与分支祖先关系决定是否推进。
02

技术栈

部署
GitLab CE · Docker Compose · Nginx · acme.sh
协作自动化
Rails · systemd timer · 组成员权限
迁移
Git bare mirror · Git LFS · refspec · 提交祖先比较
维护
Shell · launchd · 同步日志 · 持久化目录
03

系统架构与部署

Web 与 SSH 分开接入,配置、数据和日志持久化;镜像任务在可访问两端的主机上执行,先验证 LFS,再推送允许的 Git refs。

访问层

Nginx / TLS / acme.sh

HTTPS 转发到回环地址上的 GitLab HTTP 服务,证书续期后 reload;域名变更同步实例配置、证书和客户端入口。

实例层

Docker Compose / GitLab CE

配置、数据、日志与备份目录分开持久化,容器更新不依赖容器内临时数据。

成员自动化

Rails 脚本 / systemd timer

定期核对符合规则的活动用户与目标组,只提升到最低协作权限,不降级已有高权限成员。

迁移执行端

Git bare mirror / Git LFS / launchd

在能够访问源站与目标站的主机上周期执行,日志保留同步结果和拒绝原因。

04

核心业务链路

从容器实例到团队可用的代码入口

持久化目录 → Compose → Nginx / TLS → Web 与 SSH 克隆 → 成员接入

先确定数据目录和端口边界,再配置外部访问地址。HTTP 服务不直接暴露公网,Web 经 Nginx 提供 HTTPS;SSH 独立验证克隆路径。域名切换时一起修改 external_url、证书、Runner 入口和镜像配置,避免页面能打开而克隆或流水线仍指向旧地址。

迁移期间的增量镜像

获取源 refs → 确认主站 → 比较提交祖先 → LFS 完整性 → fast-forward 推送

只推送 heads、tags、notes,不复制 GitHub 的 pull refs。Git LFS 对象先获取并传到目标,再更新 Git refs;源对象缺失则停止该仓库。目标领先或双方分叉时保留现状并记录,目标独有分支默认不删除,已存在但指向不同对象的标签不移动。

05

关键机制与取舍

同步依据提交关系,而非时间戳

迁移期间 GitLab 已产生新的开发提交,按最近更新时间覆盖会损失目标分支。

对同名 refs 比较祖先关系:仅推进源领先且可快进的分支;目标领先和分叉分别记录。GitLab 主站仓库退出镜像范围,过渡仓库可按精确 ref 排除。副本同步使用 ci.skip,避免重复触发环境发布。

主站职责、同步方向与历史保留共同约束迁移,自动任务不会把团队新提交覆盖掉。

注册资格与已验证身份分别处理

邮箱后缀过滤能限制输入范围,但未配置邮件确认时不能证明邮箱归属。

成员同步只对符合规则的活动用户建立组权限,并保留已有高权限;把 SMTP 和邮箱确认作为独立能力记录,不将免审批注册描述成已经完成企业身份验证。

团队接入规则有明确边界,权限自动化不掩盖尚未配置的身份验证环节。

06

实践成果与验证

Web + SSH

两条访问链路

历史部署记录包含 HTTPS、反向代理、独立 SSH 克隆入口与域名迁移。

LFS → refs

迁移顺序

先传大文件再更新引用;缺失源对象会阻止该仓库推进。

祖先关系

差异核对

历史差异扫描分别记录目标领先、分叉与目标独有 refs,未使用强推消除差异。

  • 建立自托管代码协作入口、持久化布局和成员接入规则。
  • 双平台迁移具有可核对的同步方向、差异日志和大文件完整性检查。

继续浏览

GitLab 搭建与代码治理 · GitLab 实例与代码迁移链路
100%
GitLab 搭建与代码治理放大预览

GitLab 实例与代码迁移链路

别急,先让缓存热一下。