因为宝塔面板自带GitLab,所以用了很久。最近因为换了台服务器,GitLab需要迁移。之前只有备份,从未做过恢复,这里就记录一下迁移的步骤,以及遇到的问题和解决方法。
进行迁移
迁移的方法,无非就是备份数据,然后在新服务器上恢复数据。网上随便一搜就有很多,这里直接上命令:
sudo gitlab-rake gitlab:backup:create
命令执行完,会在目录/var/opt/gitlab/backups
中创建tar的压缩包,压缩包名字类似于1520238328_gitlab_backup
,其中这个时间戳要记下来,因为我们恢复数据的时候需要用到。
恢复数据
恢复数据也很简单,无非就是暂停服务,然后恢复数据,然后重启服务就可以了。这里也直接上命令:
sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq
sudo gitlab-rake gitlab:backup:restore BACKUP=xxxxxxxxxx
sudo gitlab-ctl start
其中xxxxxxxxxx
换成刚刚备份文件中的那个时间戳就可以了。
执行完之后,我们再运行一下这个命令来校验一下:
sudo gitlab-rake gitlab:check SANITIZE=true
在我恢复的时候,碰到了这个问题:
不用担心,按照上面给出的命令来修复就可以了。你可以修复完再执行一次这个命令,这时候就正常了。
关于反向代理和SSL的问题
因为宝塔面板的GitLab默认是端口8099,所以如果你要用80端口,必然要使用反向代理。这里很简单,新建一个网站,然后改一下它的配置文件就可以了。
另外关于SSL,我没有在GitLab上直接添加SSL支持,因为本来就用反向代理,就在反向代理上添加了。将SSL证书文件(.pem和.key)复制到到/www/server/nginx/cert
目录,cert目录没有就新建一个。然后在nginx里添加SSL那段就可以了。详细的配置如下:
upstream git{
server 127.0.0.1:8099;
}
server {
listen 443 ssl;
server_name yourdomain.com;
#server_name_in_redirect off;
ssl on;
ssl_certificate ../cert/gitlab.pem;
ssl_certificate_key ../cert/gitlab.key;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:10m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
client_max_body_size 500m;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header CLIENT_IP $remote_addr;
proxy_set_header X-Forwarded-Ssl on;
proxy_pass http://git;
index index.html index.htm;
proxy_buffering on;
}
}
#以下配置是将HTTP强制转成HTTPS
server {
listen 80;
server_name yourdomain.com;
return 301 https://yourdomain.com$request_uri;
}
问题汇总
经过以上操作,GitLab已经移植完毕。
- 在我的操作过程中,碰到了这样一个问题,就是点开某些项目,会碰到500的错误。这是GitLab迁移中的一个缺陷。解决方法如下:
- 在
/etc/gitlab/gitlab-secrets.json
目录中找到db_key_base
这个值,复制到新的GitLab的对应位置。 - 执行命令
#EE版本执行
sudo gitlab-rails runner "Project.where(mirror: false).where.not(import_url: nil).each { |p| p.import_data.destroy if p.import_data }"
#CE版本执行
sudo gitlab-rails runner "Project.where.not(import_url: nil).each { |p| p.import_data.destroy if p.import_data }"
然后重启GitLab服务,问题解决。
- 移植后关于项目路径的问题
在移植后,发现所有项目的路径都变成了IP:8099
的样子。强迫症的我,一定要把它变回来。
- 在
/opt/gitlab/embedded/service/gitlab-rails/config
目录下找到gitlab.yml
,修改中间的几个地方:
## Web server settings (note: host is the FQDN, do not include http://)
host: yourdomain.com
port: 443
https: true
- 在
/etc/gitlab/
目录下找到gitlab.rb
,找到下面的地方,然后修改成
external_url 'https://yourdomain.com'
改完之后,sudo gitlab-ctl restart
运行一下就可以了。重新打开项目,路径就已经改变了。