GitLab 是一个基于 Git 的集成软件开发平台,支持代码托管、 Wiki、项目管理、CI/CD 等,使用很方便,对我来说几乎是一个全能的管理平台,老杨在几年前用 Docker-compose 搭建了一个 GitLab Community Edition ,但是搬迁服务器的时候容易出问题,在我自己动手搬新服务器失败之后,决定按照官方推荐的 Omnibus 方式来安装,方便未来的维护。所谓的 Omunibus 方式,其实就是 Linux 安装包,GitLab 官方编译好的安装包,支持多个不同的 Linux 发行版,我平常惯用的系统是 Debian,官方支持良好。
GitLab 的安装
我这次 GitLab 的折腾主要是搬迁,但是一开始都要重新装一个全新的干净的 GitLab ,版本是 GitLab CE 14.9.2 安装步骤如下:
- 首先使用下列命令更新系统,确保系统软件都处在最新的稳定版本
apt update
sudo apt upgrade -y
- 安装 GitLab 必要的依赖软件
sudo apt install openssh-server ca-certificates perl
- 添加 GitLab 软件源,请注意下列脚本和官方网站不同,官方网站总是试图引导安装gitlab-ee,而我想要安装的是gitlab-ce,该脚本的内容可以点击这里查看
sudo curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
- 安装 GitLab 软件
- 如果安装最新版本,可以直接使用下列命令
sudo EXTERNAL_URL="https://yourdomain.com" apt install gitlab-ce
- 如果安装指定版本,比如我要安装的是 14.9.2 则使用下列命令
sudo EXTERNAL_URL="https://yourdomain.com" apt install gitlab-ce=14.9.2-ce.0
- 如果安装最新版本,可以直接使用下列命令
- 出现安装成功的画面,访问你的网址就可以使用了
GitLab 的迁移
GitLab 搬迁或者说迁移有以下几个要点:
- GitLab 的搬迁思路是:在旧服务器备份-> 在新服务器安装全新的 GitLab -> 恢复备份
- 在新服务器上安装的 GitLab 版本一定要和旧服务器上的 GitLab 版本一致,这也是我在前文中安装的 GitLab 不是最新版本,而是指定的 14.9.2 版本的原因
- 可以使用 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 的,恢复步骤如下:
- 将备份文件(也是接下来用来恢复的文件)拷贝到新服务器的 /var/opt/gitlab/backups 目录下
- 修改文件所有者,chown 给 git:sudo chown git:git /var/opt/gitlab/backups/filename-ce_gitlab_backup.tar
- 停止新服务器上安装好的空 GitLab 的运行:
- sudo gitlab-ctl stop puma
- sudo gitlab-ctl stop sidekiq
- sudo gitlab-ctl status
- 恢复指定的备份文件,请注意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
- 完成恢复后,执行下方命令,重新配置 GitLab ,即可正常使用了
- sudo gitlab-ctl reconfigure
- sudo gitlab-ctl restart
- sudo gitlab-rake gitlab:check SANITIZE=true
参考文档:
- GitLab 中文文档:https://docs.gitlab.cn/jh/raketasks/backup_restore.html
- GitLab 英文文档:https://docs.gitlab.com/ee/update/#linux-packages-omnibus-gitlab
1个小报错记录:
1.undefined method `[]’ for nil:NilClass
没找到解决方法,包括参考官方论坛上的帖子也无效。最后通过在 gitlab.rd 配置文件中禁用了用不到的功能 GitLab Pages 而消灭了错误