当仓库数量不多的情况下,可以基于本地拉取推送或从服务端直接拉取代码仓库的方式进行迁移,但在这种情况下需要用户重新申请账号和上传ssh key信息。
因之前的gitlab服务端采用docker方式部署,数据挂载在机器本地盘上,故考虑直接迁移数据的方式进行操作,迁移完成后若客户端采用域名方式访问gitlab,则此方法对客户端几乎无影响。
迁移前准备
确认两端的gitlab版本号一致:
停止原服务器上的gitlab服务,并压缩相关文件夹(也可以不停止通过rsync方式增量同步),将数据传输给目标服务器(方式有很多种)。
备份文件:zip -r -q gitlab.zip /data/gitlab
,中途可能会出现No such device or address
的错误告警,可以进行忽略,是部分文件的软连接在镜像内的缘故。
使用scp转移文件(我这里只有原服务器对外开了SSH):
解压文件:
cd /data/gitlab && unzip gitlab.zip
启动服务
以下的所有操作目录都是基准在/data/gitlab内
迁移后,修改/config/gitlab.rb
文件:
- 修改
external_url
字段,从原IP地址到目标机IP地址 - 若有ldap认证,修改
gitlab_rails['ldap_servers']
尝试启动镜像:
- export GITLAB_HOME=/data/gitlab
- docker run –detach –hostname gitlab.sc.net –publish 8443:443 –publish 880:880 –publish 822:22 –name gitlab –restart always –volume $GITLAB_HOME/config:/etc/gitlab –volume $GITLAB_HOME/logs:/var/log/gitlab –volume $GITLAB_HOME/data:/var/opt/gitlab gitlab/gitlab-ce:15.0.3-ce.0
启动后,使用docker logs container_id
即可查看日志内容,也可通过docker ps
查看容器的health状态:
启动一段时间后,Web页面仍无法打开,查看日志和状态发现进入异常,根据提示尝试开始修复权限的问题:
再等待一段时间后,成功打开首页,尝试用标准用户登录,发现仓库内容及记录均存在,服务迁移完成:
后续
问题:登录后,访问具体项目提示500,查看日志内容为gitlaly提示的permission denied。
解决方案:docker exec -it gitlab /bin/bash
,使用chown -R git:git /var/opt/gitlab/gitaly/
解决
发表回复