温馨提示×

centos gitlab如何迁移数据

小樊
33
2025-10-17 12:41:12
栏目: 智能运维

CentOS环境下GitLab数据迁移详细步骤

一、迁移前准备工作

  1. 确认环境兼容性:确保新旧服务器均为CentOS系统(版本需匹配,如CentOS 7→CentOS 7或CentOS 8→CentOS 8),且新服务器硬件配置满足GitLab运行要求(如内存≥4GB、磁盘空间≥100GB)。
  2. 安装必要依赖:在新服务器上安装GitLab依赖包,避免后续安装失败:
    yum install -y policycoreutils openssh-server openssh-clients postfix systemctl enable sshd && systemctl start sshd # 启用SSH服务(用于传输文件) systemctl enable postfix && systemctl start postfix # 启用邮件服务(用于GitLab通知) 
  3. 备份旧服务器数据:迁移前必须完整备份旧服务器的所有GitLab数据,防止数据丢失。

二、旧服务器数据备份

GitLab数据主要分为三类,需分别备份:

  1. 完整备份(推荐):使用GitLab自带的gitlab-rake工具创建包含数据库、仓库、配置等的完整备份,备份文件默认存储在/var/opt/gitlab/backups目录:
    # 停止GitLab相关服务(确保数据一致性) gitlab-ctl stop unicorn gitlab-ctl stop sidekiq # 创建备份(备份文件名为时间戳格式,如171017_120000_gitlab_backup.tar) gitlab-rake gitlab:backup:create # 启动服务(备份完成后恢复) gitlab-ctl start 
  2. 手动备份关键目录:若需更灵活的迁移,可手动备份以下目录(包含代码仓库、配置、附件等):
    • 代码仓库:/var/opt/gitlab/git-data/repositories
    • 数据库:/var/opt/gitlab/postgresql(PostgreSQL数据目录)
    • 用户与权限:/var/opt/gitlab/users
    • 配置文件:/etc/gitlab/gitlab.rb/etc/gitlab/gitlab-secrets.json(密钥文件,务必备份)
      使用rsync命令(保留权限):
    rsync -aHAX /var/opt/gitlab/git-data/repositories/ /tmp/git_repos_backup/ rsync -aHAX /etc/gitlab/gitlab.rb /tmp/git_config_backup/ 

三、新服务器环境准备

  1. 安装GitLab:在新服务器上安装与旧服务器完全相同版本的GitLab(版本不一致可能导致数据结构不兼容):
    # 添加GitLab官方YUM仓库 curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash # 安装GitLab CE(社区版) yum install -y gitlab-ce 
  2. 配置基础参数:编辑/etc/gitlab/gitlab.rb,设置外部访问URL(需与旧服务器一致,避免用户访问中断):
    external_url 'http://新服务器IP' # 若用HTTPS,需配置SSL证书路径 

四、数据迁移到新服务器

方案1:使用完整备份恢复(推荐,最简便)

  1. 传输备份文件:将旧服务器的备份文件(/var/opt/gitlab/backups下的.tar文件)复制到新服务器的相同目录:
    scp root@旧服务器IP:/var/opt/gitlab/backups/171017_120000_gitlab_backup.tar root@新服务器IP:/var/opt/gitlab/backups/ 
  2. 恢复备份
    • 停止GitLab服务:
      gitlab-ctl stop unicorn gitlab-ctl stop sidekiq 
    • 恢复备份(需指定备份文件名,无需写完整路径):
      gitlab-rake gitlab:backup:restore BACKUP=171017_120000 # 171017_120000为备份文件名(不含.tar后缀) 
    • 启动GitLab服务:
      gitlab-ctl start 

方案2:手动迁移关键目录(适用于自定义配置或部分迁移)

  1. 传输备份目录:将旧服务器的手动备份目录复制到新服务器:
    rsync -aHAX -e ssh /tmp/git_repos_backup/ root@新服务器IP:/var/opt/gitlab/git-data/repositories/ rsync -aHAX -e ssh /tmp/git_config_backup/gitlab.rb root@新服务器IP:/etc/gitlab/ 
  2. 恢复数据库(若手动备份了数据库目录)
    • 停止PostgreSQL服务:
      gitlab-ctl stop postgresql 
    • 替换数据目录(确保权限正确):
      rm -rf /var/opt/gitlab/postgresql/* rsync -aHAX -e ssh /tmp/git_db_backup/ root@新服务器IP:/var/opt/gitlab/postgresql/ 
    • 启动PostgreSQL服务:
      gitlab-ctl start postgresql 

五、迁移后配置与验证

  1. 调整配置文件:若新服务器的IP、域名或端口发生变化,需修改/etc/gitlab/gitlab.rb中的以下参数:
    external_url 'http://新服务器IP:新端口' # 如80→8080,需同步修改SSH端口(若用SSH克隆) gitlab_rails['gitlab_shell_ssh_port'] = 新端口 # 若SSH端口变更 
  2. 重新配置GitLab:使配置生效:
    gitlab-ctl reconfigure # 重新生成配置文件 gitlab-ctl restart # 重启所有服务 
  3. 验证迁移结果
    • Web端:访问http://新服务器IP,使用旧服务器的用户名/密码登录,检查项目、用户、权限是否正常。
    • Git操作:在本地仓库执行git clone http://新服务器IP/项目路径.git,测试提交(git push)和拉取(git pull)功能。
    • 日志检查:查看GitLab日志,确认无报错:
      gitlab-ctl tail # 实时查看所有服务日志 

注意事项

  • 版本一致性:新旧服务器GitLab版本必须相同(如16.11.2→16.11.2),若版本不同,需先升级旧服务器至目标版本再迁移。
  • 数据一致性:备份和恢复过程中,需停止GitLab相关服务(如unicornsidekiq),避免数据写入导致不一致。
  • 权限问题:使用rsync时添加-aHAX参数,保留文件权限和属主(如git用户对仓库的读写权限)。
  • SELinux:若新服务器开启SELinux,需调整备份目录的SELinux上下文(如chcon -R -t var_opt_t /var/opt/gitlab),避免权限拒绝。

0