前面提到 gitlab 迁移的问题,当迁移前后的版本不一致时,备份是无法还原的。

新的服务器使用了 ubuntu 22 的系统,在安装了宝塔面板后,软件商店中有一个 GitLab 最新社区版,安装的是 16.0.1 版本。经过测试 14.1.1 的备份并不能还原,所以解决方法有两个:一个是将使用的 gitlab 升级到 16.0.1;另一个是新服务器安装一个 14.1.1 版本的 gitlab。

一开始尝试找 gitlab 升级的资料,结果发现 gitlab 得按照小版本一个接着一个去升级,这样的话,14 到 16 还不知道要升级多少次呢,果断放弃。那么只剩下在新服务器安装 gitlab 14.1.1 这一种方法了。

从 gitlab 的 gitlab-ce 包列表里搜索 14.1.1,根据 ubuntu/focal 筛选出两条记录:

gitlab-ce 14.1.1 ubuntu/focal 版本

一开始真的是看花了眼,以为是同一个版本,其实 arm64 版本与 amd64 版本完全不同。

安装 gitlab arm64 版本的 deb 包文件失败:

root@cstation01:/home/zhifu# sudo dpkg -i gitlab-ce_14.1.1-ce.0_arm64.deb 
dpkg: error processing archive gitlab-ce_14.1.1-ce.0_arm64.deb (--install):
 package architecture (arm64) does not match system (amd64)
Errors were encountered while processing:
 gitlab-ce_14.1.1-ce.0_arm64.deb

Ubuntu 如何查看 CPU 架构、系统信息、内核版本、版本代号?

使用 uname -m 或者 arch 可以获取到当前服务器的架构类型。aarch64 表示 ARM 的 x64 架构,x86_64 是兼容 x86 的 x64 架构。amd64 也就是 x84_64

为什么有的地方叫X86-64,有的地方叫AMD64?

ubuntu 不同版本有不同的代号:

  • Ubuntu 12.04 (LTS)代号为 precise
  • Ubuntu 14.04 (LTS)代号为 trusty
  • Ubuntu 16.04 (LTS)代号为 xenial
  • Ubuntu 18.04 (LTS)代号为 bionic
  • Ubuntu 20.04 (LTS)代号为 focal
  • Ubuntu 22.04 (LTS)代号为 jammy

所以 ubuntu/focal 对应的是 Ubuntu 20.04 版本。

严格意义上来说,ubuntu/focal 其实也是不适合 Ubuntu 22.04 的,但暂时没有想要重新创建服务器。

点击进入到 gitlab-ce_14.1.1-ce.0_amd64.deb 版本详情页,直接通过 sudo apt-get install gitlab-ce=14.1.1-ce.0 安装会提示找不到对应版本的 gitlab。使用 apt search gitlab-ce 也只找到 gitlab-ce/jammy 16.0.2-ce.0 amd64,也就是说 apt 可以直接安装 gitlab-ce/jammy 16.0.2-ce.0 amd64 版本。

执行安装仓库的指令 curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash 之后,再次执行依然找不到安装版本。

所以只能选择下载 deb 文件到服务器,再通过 dpkg -i gitlab-ce_14.1.1-ce.0_amd64.deb 离线安装:

wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/ubuntu/focal/gitlab-ce_14.1.1-ce.0_amd64.deb/download.deb

结果下载失败,提示 Unable to establish SSL connection.。有按照网上说的关闭防火墙 ufw disable 但并没有什么用。猜测可能是本地机房的特殊性导致的,尝试本地下载也是不行的,那就从其他服务器下载好之后再上传到新服务器。

经过一些下载、上传操作,再执行 dpkg -i gitlab-ce_14.1.1-ce.0_amd64.deb 离线安装。

提示修改 external_url 后重新配置 gitlab,修改成可访问的 schema + 域名【或ip】后,执行 sudo gitlab-ctl reconfigure 成功后,会生成默认的 root 密码,在 /etc/gitlab/initial_root_password 中。

有教程提到需要手动备份还原以下两个文件:

  • /etc/gitlab/gitlab.rc
  • /etc/gitlab/gitlab-secrets.json
Warning: Your gitlab.rb and gitlab-secrets.json files contain sensitive data
and are not included in this backup. You will need to restore these files manually.

第一个 gitlab.rc 属于 gitlab 配置文件,可以考虑对比原文件,找到修改过的配置项同步到新的配置文件中。

第二个 gitlab-secrets.json 文件负责为包含必需的敏感信息的列存储加密密钥。如果密钥丢失,则 gitlab 无法解密这些列,从而无法访问以下项目:

  • CI/CD variables
  • Kubernetes / GCP integration
  • Custom Pages domains
  • Project error tracking
  • Runner authentication
  • Project mirroring
  • Web hooks

替换前注意备份好原来的文件,以防止未知情况发生。

之后将 gitlab 备份上传到 /var/opt/gitlab/backups/ 中执行 gitlab-backup restore force=yes BACKUP=1685949497_2023_06_05_14.1.1 还原备份即可。