gitlab迁移

阿里云的服务器要到期了, 刚好去年在腾讯云活动期买了一个服务器, 3年1400多, 2核-4g, 不想浪费资源, 就打算把阿里云服务器中gitlab迁移到腾讯云服务器上


gitlab迁移数据需要你两个gitlab服务版本相同, 这里相同是指版本号和版本(企业ee还是社区ce),所以新的gitlab服务要根据当前gitlab服务搭建,我使用的os是centos7

查看当前的gitlab服务版本方法, 域名加上"/help"路径, 比如http://git.xxxxxx.com/help

当我知道版本之后,可以去gitlab提供的网址查找

Manually Downloading and Installing a GitLab Packagedocs.gitlab.com图标

这里我的gitlab社区版,版本号是11.10.2,选择gitlab ce

使用搜索功能可以很快找到11.10.2

我选择了第一个

这里有两个红框, 第一个是教你在把gitlab ce源加到系统中, 第二是安装当前版本的gitlab

curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
sudo yum install gitlab-ce-11.10.2-ce.0.el7.x86_64

按步骤执行,在提示安装,这样新的gitlab就能安装成功

在安装完成新的gitlab服务之后, 要去老的服务上备份数据以便迁移到新的服务,具体也可以看文档

Backing up and restoring GitLabdocs.gitlab.com图标

文档中提供了源码安装备份、docker安装备份,还有安装包安装备份, 因为我使用的是安装包安装,所以这里说的是安装包备份

gitlab-rake gitlab:backup:create

备份文件将以tar格式备份到/var/opt/gitlab/backup路径下

名字为1562040158_2019_07_02_11.10.2_gitlab_backup.tar就是这次备份的, 名字是以当前日期拼成的方便查找,备份的路径和名字都是自定义(还可以传到一些云平台的储存对象中),大家可以看看文档,

这里我遇到了麻烦, 服务器硬盘空间不足导致备份失败, 因为备份文件太大了, 没完成时就已经5g。一看git中很多没有用的数据,幸好gitlab支持选择备份

gitlab-rake gitlab:backup:create SKIP=builds,uploads,artifacts,lfs,registry,pages 

这里放弃备份了builds,uploads,artifacts,lfs,registry,pages, 下面是这几个参数代表什么

最后把备份文件变成了2.1g


在备份完成之后,需要将备份文件复制到新的服务器上, 一开始使用scp,但是这两台服务器带宽小,复制很慢,这时想到了阿里云的oss, 因为备份所在的服务器就是阿里云的, 把备份上传到oss中应该会很快, 而oss是储存对象下载速度也不会很慢, 这样做还可以跳出带宽限制。看了一下文档有收费,相对来说便宜,就几毛钱。其实应该可以直接备份到oss上的,我没有试这里不讲了。

oss的文档

概述_命令行工具ossutil_常用工具_对象存储 OSS-阿里云help.aliyun.com

这里我使用的ossutil, 就是oss的命令行工具,直接wget下载

wget http://gosspublic.alicdn.com/ossutil/1.6.3/ossutil64

赋权限

chmod 755 ossutil64

按提示配置

./ossutil64 config

需要配置access key, secret(在安全信息管理找到), endpoint(oss控制台查找),endpoint一定要配置“ECS 的经典网络访问(内网)”

使用appendformfile命令上传到oss, 速度7m/s左右

./ossutil64 appendfromfile /var/opt/gitlab/backups/1562040158_2019_07_02_11.10.2_gitlab_backup.tar  oss://xxxxx/1562040158_2019_07_02_11.10.2_gitlab_backup.ta

然后我将备份从oss下载到了本地, 速度在5m/s左右

我在将备份传到腾讯云的服务器中(新的gitlab),发现了腾讯云scp复制的时候也很快,带宽限制不好, 速度在2m/s

我们还有将备份复制到新的gitlab服务器下,进行restore

cp 1562040158_2019_07_02_11.10.2_gitlab_backup.tar /var/opt/gitlab/backups/
cd /var/opt/gitlab/backups/
sudo chown git.git ./1562040158_2019_07_02_11.10.2_gitlab_backup.tar

停止一些服务, 中断某些连接

sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq

可以用查看这两个服务是否终止

sudo gitlab-ctl status

还原备份

sudo gitlab-rake gitlab:backup:restore BACKUP=1562040158_2019_07_02_11.10.2

这里去掉备份名字的_gitlab_backup.tar

按照提示进行操作, 在将域名改过来

vim /etc/gitlab/gitlab.rb

将文件中的external_url改成你的gitlab的url,

重启gitlab服务

sudo gitlab-ctl restart

最后别忘记了,把域名指到服务器上



最后在我沾沾自喜时候,本以为搞定了才发现ci/cd的配置页报了500

ActionView::Template::Error ():
    25:     project_clusters_path(@project),
    26:     class: 'btn btn-info'
    27:   %hr
    28:   = render partial: 'ci/runner/how_to_setup_runner',
    29:            locals: { registration_token: @project.runners_token,
    30:                      type: 'specific',
    31:                      reset_token_url: reset_registration_token_namespace_project_settings_ci_cd_
path }

lib/gitlab/crypto_helper.rb:27:in `aes256_gcm_decrypt'
app/models/concerns/token_authenticatable_strategies/encrypted.rb:45:in `get_token'
app/models/concerns/token_authenticatable_strategies/base.rb:33:in `ensure_token!'
app/models/concerns/token_authenticatable.rb:43:in `block in add_authentication_token_field'
app/models/project.rb:1543:in `runners_token'
app/views/projects/runners/_specific_runners.html.haml:28:in `_app_views_projects_runners__specific_runn
ers_html_haml__234361673848007128_70078833608300'
app/views/projects/runners/_index.html.haml:8:in `_app_views_projects_runners__index_html_haml__31167800
35569937812_70078832007340'
app/views/projects/settings/ci_cd/show.html.haml:42:in `_app_views_projects_settings_ci_cd_show_html_ham
l__1867383084659381760_70078907269380'
app/controllers/application_controller.rb:116:in `render'
lib/gitlab/i18n.rb:55:in `with_locale'
lib/gitlab/i18n.rb:61:in `with_user_locale'
app/controllers/application_controller.rb:434:in `set_locale'
lib/gitlab/middleware/multipart.rb:103:in `call'
lib/gitlab/request_profiler/middleware.rb:16:in `call'
lib/gitlab/middleware/go.rb:20:in `call'
lib/gitlab/etag_caching/middleware.rb:13:in `call'
lib/gitlab/middleware/correlation_id.rb:16:in `block in call'
lib/gitlab/correlation_id.rb:15:in `use_id'
lib/gitlab/middleware/correlation_id.rb:15:in `call'
lib/gitlab/middleware/read_only/controller.rb:40:in `call'
lib/gitlab/middleware/read_only.rb:18:in `call'
lib/gitlab/middleware/basic_health_check.rb:25:in `call'
lib/gitlab/request_context.rb:26:in `call'
lib/gitlab/metrics/requests_rack_middleware.rb:29:in `call'
lib/gitlab/middleware/release_env.rb:13:in `call'

后来才注意到官方文章中给出两个需要迁移的文件


/etc/gitlab/gitlab-secrets.json
/etc/gitlab/gitlab.rb
解决GitLab在恢复备份后打开『集成』页面时报错500的问题 - Untitled Spot_未命名小站untitled.pw图标

参考了上述博客, 复制到对应新服务的位置,重新配置重启, 不要忘记更新地址

gitlab-ctl reconfigure && gitlab-ctl restart

编辑于 2019-07-04