Gitlab 服务器迁移
in Linux with 0 comment

Gitlab 服务器迁移

in Linux with 0 comment

参考:https://docs.gitlab.com/ee/raketasks/backup_restore.html

最近公司新够了一批服务器,且此前的服务器即将作废,迁移就顺理成章地成为了一道必不可少的工序。本文主要讲解 Gitlab server 迁移步骤。

前景提要

当前的 Gitlab(CE,社区版) 是通过 Docker 运行的,命令如下:

#!/bin/bash

CONTAINER_NAME=gitlab-server
CONFIG_DIR=/opt/servers/gitlab/config
LOGS_DIR=/opt/servers/gitlab/logs
DATA_DIR=/opt/servers/gitlab/data

sudo docker run -d \
  --name $CONTAINER_NAME \
  --hostname gitlab.example.com \
  -p 443:443 \
  -p 80:80 \
  -p 22:22 \
  --restart always \
  -v $CONFIG_DIR:/etc/gitlab \
  -v $LOG_DIR:/var/log/gitlab \
  -v $DATA_DIR:/var/opt/gitlab \
  gitlab/gitlab-ce

注意自定义配置 hostname = gitlab.example.com。

这台服务器直接用于提供 Gitlab 服务器,不经过代理进行访问(推荐),所以端口都采用默认的配置。

备份

备份前请确认 Gitlab 处于运行状态,然后执行

请自行替换

执行 Gitlab 备份命令

# 备份重要私密文件
docker exec -it {container_id} gitlab-ctl backup-etc
# 备份 Gitlab 上传文件,数据库等
docker exec -it {container_id} gitlab-backup

这里,我们会得到两个备份文件:

复制备份文件到宿主机(方便转移)

请自行替换备份文件名

docker cp {container_id}:/etc/gitlab/config_backup/gitlab_config_1605521585_2020_11_16.tar ~/
docker cp {container_id}:/var/opt/gitlab/backups/1605508463_2020_11_16_13.5.4_gitlab_backup.tar ~/

转移备份文件

转移备份文件到新服务器

转移前请确保知晓对方服务器帐号密码或者将本服务器的 public key 添加到对方服务器的 ~/.ssh/authorized_keys 中

rsync ~/gitlab_config_1605521585_2020_11_16.jar username@server:~/
rsync ~/1605508463_2020_11_16_13.5.4_gitlab_backup.tar username@server:~/

启动新 Gitlab 并准备备份文件

进入新的服务器后,按照本文开头命令运行全新的 Gitlab。

配置 sshd 默认端口

由于 Gitlab 需要占用 22 端口,所有需要配置 sshd 的默认端口,保证 Gitlab 能够正常启动。

编辑 sshd_config 文件:

sudo vim /etc/ssh/sshd_config

新增以下配置:

Port 2222

重启 sshd:

sudo systemctl restart sshd

解压并复制到容器对应目录

# 解压 Gitlab 配置
mkdir ~/gitlab-config
tar xvf gitlab_config_1605497689_2020_11_16.tar -C ~/gitlab-config

# 将目录复制到容器目录中
docker cp ~/gitlab-config/etc/gitlab/ {container_id}:/etc/
# 将备份文件复制到容器指定目录中
docker cp 1605508463_2020_11_16_13.5.4_gitlab_backup.tar {container_id}:/var/opt/gitlab/backups

容器中的备份文件:1605508463_2020_11_16_13.5.4_gitlab_backup.tar的权限为:-rw------- 1 1000 1000,会导致备份还原程序解压时出现 Permisssion Denied 错误,所以需要进入容器中设置该文件的权限为:-rw------- 1 git git

docker exec -it {container_id} bash
chown git:git /var/opt/gitlab/backups/1605508463_2020_11_16_13.5.4_gitlab_backup.tar
exit

进行备份还原操作

此时新的 Gitlab 正在运行,且备份数据已准备就绪。在还原之前,首先需要停止 unicorn、puma 和 sidekiq 服务。

docker exec -it {container_id} gitlab-ctl stop unicorn
docker exec -it {container_id} gitlab-ctl stop puma
docker exec -it {container_id} gitlab-ctl stop sidekiq
docker exec -it {container_id} gitlab-ctl status

执行备份还原操作:

docker exec -it 18 gitlab-backup restore

申请域名证书

这里推荐使用 https://github.com/acmesh-official/acme.sh/wiki/dnsapi 获取免费证书。

配置 Nginx SSL

进入容器 /etc/gitlab/ssl 或者直接在 /opt/servers/gitlab/config/ssl 下添加证书即可。注意:域名证书文件名必须以 crt 结尾,如:gitlab.example.com.crt,同时 ca.crt (证书授权证书)也许要添加到对应的目录或者 append 到 gitlab.example.com.crt 中。否则会造成 x509: certificate signed by unknown authority 错误。

重启 Gitlab

docker restart {container_id}

最后当然是更改域名的解析了 :P