ubuntu24.04在docker下迁移gitlab16

version: '1.0'

services:

gitlab:

image: gitlab/gitlab-ce:16.11.10-ce.0

container_name: gitlab

restart: always

hostname: '172.16.9.15'

environment:

GITLAB_OMNIBUS_CONFIG: |

external_url 'http://172.16.9.15'

gitlab_rails'gitlab_shell_ssh_port' = 8822

ports:

  • "80:80"

  • "443:443"

  • "8822:22"

volumes:

  • "/srv/gitlab/config:/etc/gitlab"

  • "/srv/gitlab/logs:/var/log/gitlab"

  • "/srv/gitlab/data:/var/opt/gitlab"

shm_size: '256m'

在 GitLab 迁移时,这两个重要的文件都需要覆盖

  • /etc/gitlab/gitlab-secrets.json:必须覆盖,绝不能省略。
  • /etc/gitlab/gitlab.rb:强烈建议覆盖(然后再按新环境微调,如果抛弃以前的配置,也可以)。

下面详细解释原因和正确做法。


1. gitlab-secrets.json ------ 必须覆盖

这个文件保存着 GitLab 所有加密数据的主密钥,包括:

  • 数据库中加密的字段(如 CI/CD 变量、自定义凭证)
  • 用户的 OTP 二次验证密钥
  • 集成 webhook 的 secret token
  • 加密的 Runner 认证信息等

如果不覆盖会发生什么?

新实例会生成一套全新的密钥,导致所有从旧实例备份中恢复的加密数据永久无法解密。具体表现有:

  • 所有已配置的 CI/CD 变量全部失效
  • 用户无法通过二次验证登录
  • Webhook、Integrations 需要重新配置
  • 部分 Runner 需要重新注册

正确做法:

直接将旧服务器的 /etc/gitlab/gitlab-secrets.json 复制到新服务器的相同路径,并确保权限正确(通常 root:root,400 或 600)。这是 GitLab 官方备份恢复流程中的强制步骤。


2. gitlab.rb ------ 强烈建议覆盖

这是 GitLab 的主配置文件,包含外部 URL、端口、数据库连接、SMTP 邮件、备份策略等所有自定义设置。

不建议直接在新环境用全新默认配置,因为:

  • 你之前调优过的参数(如 Unicorn/Puma worker 数、内存限制)都会丢失
  • 邮件、LDAP、对象存储等集成可能需要重新调试
  • 可能导致服务行为与旧实例不一致,增加排错成本

正确做法:

  1. 将旧服务器的 gitlab.rb 复制到新服务器。
  2. 先根据新环境修改必要项 ,如:
    • external_url(如果域名或 IP 变了)
    • 与主机名、IP 绑定相关的配置
    • 如果数据库、Redis 等外部服务地址有变,也要同步修改
  3. 修改完成后,执行 sudo gitlab-ctl reconfigure 让配置生效。
  4. 最后再执行备份恢复(gitlab-backup restore)。

标准迁移流程摘要

  1. 将旧服务器的 /etc/gitlab/gitlab-secrets.json 和 /etc/gitlab/gitlab.rb 复制到新服务器的相同路径。
  2. 按需修改 gitlab.rb(重点检查 URL、外部依赖地址)。
  3. 运行 sudo gitlab-ctl reconfigure。
  4. 将备份文件(通常是 /var/opt/gitlab/backups/ 下的 tar 包)复制到新服务器相同目录。
  5. 执行恢复命令:sudo gitlab-backup restore BACKUP=时间戳。
  6. 重启并检查服务:sudo gitlab-ctl restart,然后验证登录和关键功能。

在执行恢复前,必须停止连接数据库的服务:

sudo gitlab-ctl stop puma

sudo gitlab-ctl stop sidekiq

我测试的时候不能sudo gitlab-ctl stop,否则报错误找不到数据库之类的。

gitlab-backup restore BACKUP=1750765308_2025_06_24_16.7.6

记得后面只是日期,而不是整个备份文件的全名。

相关推荐
Zevalin爱灰灰8 分钟前
Linux入门第二部分(ARM裸机篇) 第一章 开发环境搭建与了解
linux·arm开发·嵌入式
LHICOD1 小时前
Linux-2
java·linux·后端·jar·vmware·svm·vm
余额瞒着我当琳1 小时前
Linux初识:Linux的历史,计算机的发展脉络,发行版本,选购云服务器,安装Xshell,第一次连接,基础命令指南
linux·运维·服务器
时间售卖铺2 小时前
Docker实战:一键部署轻量级容器
运维·docker·云原生
垆边人似月.2 小时前
RDMA 文件传输踩坑(四):从固定延时改造为 READY/ACK 协议
linux·服务器·网络
水饺编程2 小时前
第2章:Linux 基础,制作【.tar.xz】压缩包文件
linux·c语言·汇编
山乐191312 小时前
麒麟系统,安装Nginx并配置https证书
运维·nginx·https
月落汀兰2 小时前
拒绝配置写死镜像!K8s 存储卷与配置管理,PV/PVC、ConfigMap、Secret 实战避坑指南
运维·kubernetes
阿里云基础软件2 小时前
Agent 任务提速 10.71%,内存占用降低 21.60%|Alibaba Cloud Linux 4 重大发布
java·linux·人工智能·操作系统·agent
服务器硬件项目经理2 小时前
《超节点修仙录》· 第一卷·炼气期【第04话】 超节点 vs 普通服务器——不就是多插了几张卡吗?
运维·服务器·人工智能·嵌入式硬件·深度学习·机器学习