蔚蓝触点 Azuretouch

Azuretouch
Touch your future

GitLab 迁移及问题汇总

因为宝塔面板自带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

在我恢复的时候,碰到了这个问题:
3980899537.png
不用担心,按照上面给出的命令来修复就可以了。你可以修复完再执行一次这个命令,这时候就正常了。

关于反向代理和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迁移中的一个缺陷。解决方法如下:
  1. /etc/gitlab/gitlab-secrets.json目录中找到db_key_base这个值,复制到新的GitLab的对应位置。
  2. 执行命令
#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的样子。强迫症的我,一定要把它变回来。
  1. /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
  1. /etc/gitlab/目录下找到gitlab.rb,找到下面的地方,然后修改成
external_url 'https://yourdomain.com'

改完之后,sudo gitlab-ctl restart运行一下就可以了。重新打开项目,路径就已经改变了。




参考资料

  1. 官方文档 - NGINX settings
  2. 官方文档 - SSL settings
  3. 为 GitLab 启用 Let's Encrypt 颁发的 SSL 证书
未经允许不得转载:蔚蓝触点 Azuretouch » GitLab 迁移及问题汇总

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址