gitlab迁移记录

  • A+
所属分类:DevOps gitlab & jenkins

一、起因

因服务器到期,需要将Gitlab迁移,制定好迁移日期与迁移地址,提前通知开发迁移时gitlab禁止访问,就准备迁移了。

二、迁移步骤记录

2.1、查看老环境的gitlab版本

# gitlab-rake gitlab:env:info

System information
System:     
Current User:   git
Using RVM:  no
Ruby Version:   2.1.8p440
Gem Version:    2.5.1
Bundler Version:1.10.6
Rake Version:   10.5.0
Sidekiq Version:4.1.2

GitLab information
Version:    8.9.5       #gitlab版本为8.9.5的版本
Revision:   f6ab19d
Directory:  /opt/gitlab/embedded/service/gitlab-rails
DB Adapter: postgresql
URL:        http://gitlab.zlkjbj.cn
HTTP Clone URL: http://gitlab.zlkjbj.cn/some-group/some-project.git
SSH Clone URL:  ssh://git@gitlab.zlkjbj.cn:52113/some-group/some-project.git
Using LDAP: no
Using Omniauth: no

GitLab Shell
Version:    3.0.0
Repositories:   /data/git-data/repositories
Hooks:      /opt/gitlab/embedded/service/gitlab-shell/hooks/
Git:        /opt/gitlab/embedded/bin/git
[root@mysql-idc-master ~]# vim /etc/gitlab/gitlab.rb

2.2、在新服务器上安装对应版本的Gitlab

# cat /etc/yum.repos.d/gitlab-ce.repo    #配置yum源
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1

# yum makecache      #获取缓存
# yum install -y gitlab-ce-8.9.5       #指定版本安装gitlab-ce版

2.3、配置
说明:根据老环境的配置来修改的

# egrep -v -n "^#|^$" /etc/gitlab/gitlab.rb 
11:external_url 'http://gitlab.your_domain.com'     #这里填访问gitlab后台的域名或IP地址
201:gitlab_rails['backup_path'] = "/data/gitlab-backup/"    #gitlab的备份路径
204:gitlab_rails['backup_keep_time'] = 604800    #这里是设置备份保留7天(7*3600*24=604800),秒为单位,如果想增大或减小,可以直接在该处配置,并通过gitlab-ctl restart 重启服务生效
219:git_data_dir "/data/gitlab-data"     #指定数据路径
229:gitlab_rails['gitlab_shell_ssh_port'] = "ssh port"       #由于默认的ssh端口修改了,所以这里是ssh的端口号

# gitlab-ctl reconfigure     #加载配置
# gitlab-ctl restart    #修改后重启

修改配置后记得创建对应得目录哦

# mkdir /data/{gitlab-data,gitlab-backup}
# chown -R git.git /data/gitlab-*

2.4、在老gitlab上导出备份数据

# gitlab-rake gitlab:backup:create   #创建备份

创建备份后的备份数据在定义的备份目录下,文件名格式为:

1540811251_gitlab_backup.tar

直接将备份文件传到新的服务器上就可以,我是通过scp命令:

# scp 1540811251_gitlab_backup.tar user@addr:/data/gitlab-backup/

2.5、在新服务器上导入数据

# gitlab-ctl stop unicorn     #停止数据写入
# gitlab-ctl stop sidekiq
# gitlab-rake gitlab:backup:restore BACKUP=1540811251     #导入数据

说明:BACKUP=1540811251:这里要和你备份文件的时间戳一致,导入过程中会有两个确认,输入yes即可。
注意:导入时备份文件必须放在配置文件指定的备份目录里。

三、访问gitlab后台

数据导入后重启下gitlab然后修改域名解析就可以通过域名访问了,这里遇到一个问题,通过域名访问时访问首页可以,但是访问具体项目时会报500错误
错误日志如下

Started GET "/davidb/workflow-test2" for 127.0.0.1 at 2016-05-25 11:18:10 -0500
Processing by ProjectsController#show as HTML
  Parameters: {"namespace_id"=>"davidb", "id"=>"workflow-test2"}
Completed 500 Internal Server Error in 242ms (ActiveRecord: 7.4ms)

OpenSSL::Cipher::CipherError (bad decrypt):
  app/models/project.rb:379:in `import_url'
  app/models/project.rb:409:in `external_import?'
  app/models/project.rb:401:in `import?'
  app/models/project.rb:417:in `import_in_progress?'
  app/controllers/projects_controller.rb:93:in `show'
  lib/gitlab/middleware/go.rb:16:in `call'

3.1、解决办法
覆盖原来gitlab的 db_key_base 到新的gitlab

db_key_base 位置在 /etc/gitlab/gitlab-secrets.json
3.2、然后执行如下命令
gitlab-ce版命令

sudo gitlab-rails runner "Project.where.not(import_url: nil).each { |p| p.import_data.destroy if p.import_data }"

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 }"

四、添加定时备份

echo "00 00 * * * /usr/bin/gitlab-rake gitlab:backup:create" >>/var/spool/cron/root

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: