美文网首页
docker gitlab 备份还原

docker gitlab 备份还原

作者: 我爱盐酥鸡 | 来源:发表于2020-07-16 19:24 被阅读0次

灾难起源

起因是服务器 root 文件系统内存较小,只有 50G,经常爆仓。
于是乎,就把 gitlab 整体移动到内存相对较大 home 文件系统下。
这不,转移了,我人直接裂开来。

噩耗!!!

我打开命令窗口,口嚼香糖,一顿蜻蜓点水,在键盘上滑过 cp -R /app /home,刹那间,整整几个 G 的文件便搬了家。当然,其中包含着这个星期来所备份的文件。

然而,此时的我仍然在享受着香糖在口腔带来的愉悦,却不知下一秒,gitlab 的明天与意外哪个会先来。

我对着 gitlab 满心许下祝福,轻轻地敲下:

$ cd /home/app/docker/gitlab
$ docker-compose up

而此刻,等待我的却是,无尽的无尽。

gitaly cant up

有个 gitaly 服务启动失败!

失格!!!

啊,这……

在重新尝试多次启动无果后,似乎走上了一条不归路。
漆黑的命令窗口,如同深渊,凝视着你的凝视。

随着:

$ docker rm `docker ps -a | grep Exited | awk '{print $1}'`  
$ docker rmi -f `docker images | grep '<none>' | awk '{print $3}'`  

命令的执行,似乎变得清净起来。
清除了停止的容器与无用的镜像。干净的环境,总会为 gitlab 带来好运吧。然而,到头来还是一场梦。

依然启动不了 gitaly 服务,而带来的后果,就是仓库页面数据读取的失败。

gitlab 503

其他页面功能正常,仓库页面访问返回 503

返璞!!!

既然是转移之后出现的错误,那我再转移回来会报错吗?

随着我把命令喂给窗口后,gitlab 回到了原本属于它的家乡。正如同古诗句“乡音无改鬓毛衰”,此刻的 gitlab 与 它生长的 /app 环境却那么的格格不入。

依然是启动不了 gitaly,那么,gitaly 启动失败跟仓库页面 503 有什么关系呢?

Gitaly 是一个 Git RPC
服务,用于处理 GitLab 进行的所有 git 调用。
后台服务,专门负责访问磁盘以高效处理 git 操作,并缓存耗时操作。所有 git 操作都通过 Gitaly 处理。

即是 gitalygitlab 使用的处理读取 git 的桥梁服务,gitaly 开不起来,那么 gitlabgit 仓库数据的读取便是失了效。

归真!!!

经过一番查找,定位问题为数据卷挂载目录下 /app/volumes/gitlab/gitlab/repositoies/ 这个文件夹。

执行 ls,列出目录下文件:

+gitaly @hashed  @pools

有三个文件,试着把 +gitaly 文件夹删掉,重新启动 docker gitlab,发现会重新生成 +gitaly 文件夹,此时的 gitlab,好像一个捉迷藏玩的很好的孩子,藏了很久终于被发现了一样。

仓库页面已经可以打开了,除了代码仓库显示为空仓库,其他数据也可以读取了。

空仓库

执行 ls -a,大家都摊牌,别藏着掖着了:

$ ls -a
+gitaly .gitaly-metadata  @hashed  @pools

发现有一个隐藏的文件 .gitaly-metadata,查看 cat .gitaly-metadata

{"gitaly_filesystem_id":"c19d98bb-9bf7-4579-b120-c6e33902c225"}

估计就是这个生成的配置文件系统 ID 指向失效了,导致找不到 git 仓库地址。

尝试过去查找 gitaly_filesystem_id 的意义,发现源码是 ruby 函数生成,精力有限,遂无深究。

人祸湮灭

时间旅行

没错,就是恢复备份。

执行

$ cd /app/docker/gitlab
$ docker-compose run --rm gitlab app:rake gitlab:backup:restore

执行中,会让选择恢复的备份文件,输入备份 tar 包完整名称,回车即可。
如:1593450065_2020_06_29_13.0.6_gitlab_backup.tar

但是,很不幸,出现权限问题。

还原出现权限问题
还原失败

精准夺权

遇到阻碍,那就夺权。

目标是备份文件 tar 包下所有文件的用户组与所有者,都修改为 root 用户。

把备份文件 tar 包拖出来,解压到 backup 文件夹,修改权限到 root 用户组与 root 所有者。

备份文件解压

修改 backup 文件夹里面所有文件为用户组 root

chgrp -R root backup

修改 backup 文件夹里面所有文件为所有者 root

chown -R root backup

然后将夺权后的文件再重新打包为 tar 包。

继续执行:

$ cd /app/docker/gitlab
$ docker-compose run --rm gitlab app:rake gitlab:backup:restore
还原过程

虽然还有报权限错误,因为 tar.gz 包里面没有夺权,但是问题不大。

柳暗花明

回到 docker-compose.yml 目录,启动容器!

$ cd /app/docker/gitlab
$ docker-compose up

柳暗花明又一村,我胡汉三又回来了!

启动成功

相关文章

  • docker gitlab 备份还原

    灾难起源 起因是服务器 root 文件系统内存较小,只有 50G,经常爆仓。于是乎,就把 gitlab 整体移动到...

  • Gitlab备份还原升级

    备份 备份目录 可以通过vim /etc/gitlab/gitlab.rb修改 还原 gitlab-rake gi...

  • 备份与还原Gitlab实例

    备份与还原Gitlab实例 部署 推荐使用docker部署: deploy.sh 其中由于远程部署,22端口被ss...

  • gitlab备忘

    使用docker镜像启动gitlab 创建gitlab备份 默认备份文件保存在/var/opt/gitlab/ba...

  • gitlab 通过备份还原 admin/runner 500 I

    本文介绍 gitlab 通过备份还原 admin/runner 500 Internal Server Error...

  • Gitlab版本升级

    Gitlab docker部署命令 停服务,准备备份,防止升级期间有研发同学提交代码 备份文件 删除docker ...

  • gitlab 迁移(备份与还原)

    大体思路为,先将原gitlab进行备份,然后将备份文件拷贝到新的gitlab机器上进行还原操作。 查看版本信息 g...

  • gitlab 备份和还原

    备份说明: gitlab备份分为配置备份和数据备份 执行指令-数据备份 gitlab-backup create ...

  • Mongo 数据迁移

    迁移步骤 备份数据 还原数据docker下部署mongodb参考Docker 部署MongoDBubuntu下搭建...

  • gitlab备份和恢复

    gitlab备份和恢复 一、gitlab仓库备份 过程如下 1.1、备份命令 gitlab-rake gitlab...

网友评论

      本文标题:docker gitlab 备份还原

      本文链接:https://www.haomeiwen.com/subject/okymhktx.html