自建 GitLab 的简明安装、备份、搬迁教程

GitLab 是一个基于 Git 的集成软件开发平台,支持代码托管、 Wiki、项目管理、CI/CD 等,使用很方便,对我来说几乎是一个全能的管理平台,老杨在几年前用 Docker-compose 搭建了一个 GitLab Community Edition ,但是搬迁服务器的时候容易出问题,在我自己动手搬新服务器失败之后,决定按照官方推荐的 Omnibus 方式来安装,方便未来的维护。所谓的 Omunibus 方式,其实就是 Linux 安装包,GitLab 官方编译好的安装包,支持多个不同的 Linux 发行版,我平常惯用的系统是 Debian,官方支持良好。

GitLab 的安装

我这次 GitLab 的折腾主要是搬迁,但是一开始都要重新装一个全新的干净的 GitLab ,版本是 GitLab CE 14.9.2 安装步骤如下:

  1. 首先使用下列命令更新系统,确保系统软件都处在最新的稳定版本
    1. apt update
    2. sudo apt upgrade -y
  2. 安装 GitLab 必要的依赖软件
    • sudo apt install openssh-server ca-certificates perl
  3. 添加 GitLab 软件源,请注意下列脚本和官方网站不同,官方网站总是试图引导安装gitlab-ee,而我想要安装的是gitlab-ce,该脚本的内容可以点击这里查看
    • sudo curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
  4. 安装 GitLab 软件
    1. 如果安装最新版本,可以直接使用下列命令
      sudo EXTERNAL_URL="https://yourdomain.com" apt install gitlab-ce
    2. 如果安装指定版本,比如我要安装的是 14.9.2 则使用下列命令
      sudo EXTERNAL_URL="https://yourdomain.com" apt install gitlab-ce=14.9.2-ce.0
  5. 出现安装成功的画面,访问你的网址就可以使用了

GitLab 的迁移

GitLab 搬迁或者说迁移有以下几个要点:

  1. GitLab 的搬迁思路是:在旧服务器备份-> 在新服务器安装全新的 GitLab -> 恢复备份
  2. 在新服务器上安装的 GitLab 版本一定要和旧服务器上的 GitLab 版本一致,这也是我在前文中安装的 GitLab 不是最新版本,而是指定的 14.9.2 版本的原因
  3. 可以使用 scp 命令将备份包从旧服务器拷贝到新服务器,恢复备份即可,GitLab 会自动将域名更新为新服务器安装使用的新域名

GitLab 的备份

GitLab 使用下列命令来备份,如果你没有修改的话,备份包默认保存在 /var/opt/gitlab/backups 路径下

sudo gitlab-backup create 

如果提示备份失败,可以使用下列命令追踪备份细节,看到失败原因

sudo gitlab-backup create –trace

同时还要保存下列两个文件

  • /etc/gitlab/gitlab-secrets.json
  • /etc/gitlab/gitlab.rb

所以一个完整备份的 GitLab ,总共包括三个文件,切记。下面是2024年11月补充的备份成功的截图

GitLab 的恢复

GitLab 的恢复也很方便,还可以自动处理变更域名的问题。比如旧服务器上的 GitLab 使用的是 domainA.com ,新服务器上安装的 GitLab 使用的域名是 domainB.com 完成恢复后,则直接使用 domainB.com 访问即可,所有数据都是过去 domainA.com 的,恢复步骤如下:

  1. 将备份文件(也是接下来用来恢复的文件)拷贝到新服务器的 /var/opt/gitlab/backups 目录下
  2. 修改文件所有者,chown 给 git:sudo chown git:git /var/opt/gitlab/backups/filename-ce_gitlab_backup.tar
  3. 停止新服务器上安装好的空 GitLab 的运行:
    1. sudo gitlab-ctl stop puma
    2. sudo gitlab-ctl stop sidekiq
    3. sudo gitlab-ctl status
  4. 恢复指定的备份文件,请注意BACKUP后面的变量等于备份文件的文件名中包括前面的时间戳到 -ce 为止,如果是16新版本以后,则是复制到 gitlab_backup 前面,不包含 gitlab_bakcup
    • sudo gitlab-backup restore BACKUP=filename-ce
    • 举例,备份文件是 1731742477_2024_11_16_17.5.2_gitlab_backup.tar, 命令是 sudo gitlab-backup restore BACKUP=1731742477_2024_11_16_17.5.2
  5. 完成恢复后,执行下方命令,重新配置 GitLab ,即可正常使用了
    1. sudo gitlab-ctl reconfigure
    2. sudo gitlab-ctl restart
    3. sudo gitlab-rake gitlab:check SANITIZE=true

参考文档:

  1. GitLab 中文文档:https://docs.gitlab.cn/jh/raketasks/backup_restore.html
  2. GitLab 英文文档:https://docs.gitlab.com/ee/update/#linux-packages-omnibus-gitlab
1个小报错记录:

1.undefined method `[]’ for nil:NilClass

没找到解决方法,包括参考官方论坛上的帖子也无效。最后通过在 gitlab.rd 配置文件中禁用了用不到的功能 GitLab Pages 而消灭了错误

发表回复