从容器实例到团队可用的代码入口
持久化目录 → Compose → Nginx / TLS → Web 与 SSH 克隆 → 成员接入
先确定数据目录和端口边界,再配置外部访问地址。HTTP 服务不直接暴露公网,Web 经 Nginx 提供 HTTPS;SSH 独立验证克隆路径。域名切换时一起修改 external_url、证书、Runner 入口和镜像配置,避免页面能打开而克隆或流水线仍指向旧地址。
自托管协作平台与双仓迁移
团队需要统一的代码协作入口,同时处在 GitHub 与自托管 GitLab 并行的迁移阶段。建设工作从实例部署延伸到域名与证书、成员接入和代码同步:既要让新人能够加入团队,也要保证已有分支、标签和大文件在迁移时保持完整。
实际约束之一是服务器无法稳定访问 GitHub,因此镜像任务由可访问两端的中间主机执行。迁移期间有些仓库已以 GitLab 为主,有些仍以 GitHub 为主,同步方向需要逐仓库、逐分支明确。
HTTPS 转发到回环地址上的 GitLab HTTP 服务,证书续期后 reload;域名变更同步实例配置、证书和客户端入口。
配置、数据、日志与备份目录分开持久化,容器更新不依赖容器内临时数据。
定期核对符合规则的活动用户与目标组,只提升到最低协作权限,不降级已有高权限成员。
在能够访问源站与目标站的主机上周期执行,日志保留同步结果和拒绝原因。
持久化目录 → 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;源对象缺失则停止该仓库。目标领先或双方分叉时保留现状并记录,目标独有分支默认不删除,已存在但指向不同对象的标签不移动。
迁移期间 GitLab 已产生新的开发提交,按最近更新时间覆盖会损失目标分支。
对同名 refs 比较祖先关系:仅推进源领先且可快进的分支;目标领先和分叉分别记录。GitLab 主站仓库退出镜像范围,过渡仓库可按精确 ref 排除。副本同步使用 ci.skip,避免重复触发环境发布。
主站职责、同步方向与历史保留共同约束迁移,自动任务不会把团队新提交覆盖掉。
邮箱后缀过滤能限制输入范围,但未配置邮件确认时不能证明邮箱归属。
成员同步只对符合规则的活动用户建立组权限,并保留已有高权限;把 SMTP 和邮箱确认作为独立能力记录,不将免审批注册描述成已经完成企业身份验证。
团队接入规则有明确边界,权限自动化不掩盖尚未配置的身份验证环节。
历史部署记录包含 HTTPS、反向代理、独立 SSH 克隆入口与域名迁移。
先传大文件再更新引用;缺失源对象会阻止该仓库推进。
历史差异扫描分别记录目标领先、分叉与目标独有 refs,未使用强推消除差异。