gitlab 生产安全事故记录
2026-09-13 20:12:59 # 生产安全记录

问题:公司自建gitlab突然卡死 ,无法启动,启动后直接卡死虚拟机。

公司使用的是一个20c16g 的pc来做服务器。

安装了一个 windows,使用vm开linux虚拟机的方式来分配。

突然在没有断电的情况下,安装了gitlab虚拟机无法启动,直接卡死。

因为一直没有问题,也没有创建自动快照,因此没有备份,只能强行进去操作。

虚拟机能开,但是过一段时间会卡死。

这里就直接说原因了: gitlab使用的是docker安装,只要docker启动gitlab,启动后几分钟,就会卡死,ssh断开连接。vm软件直接卡死。

因此 首先开启虚拟机,关闭开机启动docker,停止gitlab容器。

说明 我们的gitlab文件是外挂出来了的

我用过的解决方法:

  1. 我想复制gitlab文件出来,结果复制中途,直接卡死,估计文件损坏之类。
  2. 是有修复软件,修复结果最后卡死
  3. 利用软件,把vmdk镜像copy出来,结果vmdk连文件都无法查看
  4. 快照镜像,然后试图启动,卡死
  5. 复制vm的文件,中途一个文件损坏。估计就是这个文件损坏导致无法启动gitlab,
  6. 因此选择其他的vmdk文件启动,可以启动,但是gitlab的代码是一年前的,不是最新的,因此只是恢复了部分。
  7. 新建虚拟机,选择报错的vmdk文件启动,然后进行 快照
    1. 企图启动gitlab 卡死
    2. 建立新的 gitlab容器 外挂地址选择 以前的地址,结果卡死(建立新的gitlab,外挂干净地址,是可以启动的)
    3. 拉取新版本的镜像,进行gitlab升级,同样挂在以前的地址,依然卡死。但是有所进步。
  8. 企图升级内核,来解决 依然卡死

最终解决方法 把外挂地址的 git-data 文件 和 postgresql文件 复制出来,新建一个虚拟机,把文件复制进去,新建一个gitlab容器,外挂地址选择这两个文件 ,内容恢复,就此完结。

这之前:复制这两个文件出来的时候没有卡死,说明不是他们两的问题,是其他gitlab文件的问题,其实当时我也删除所有gitlab-*的文件夹,但是还是卡死,所以才选择复制出来新建一个虚拟机测试。

中途我也看了很多关于 gitlab出错如何修复的解决方法。但是都没有用。毕竟别人只是出问题,而我的是卡死。估计是硬盘出问题了。中途还发生了硬盘无法识别,真是吓死人。

1
2
3
cd gitlab/data
# 删除 pid
rm -rf `find . -name *.pid`

后续:

  1. 建立定时快照

  2. 虚拟机 每周定时gitlab备份

    1
    2
    crontab -e
    0 0 * * 0 docker exec -it gitlab gitlab-rake gitlab:backup:create

真的是安全第一啊。。。。

windows 自动重启和关机命令 别问我如何知道的(不知道电脑重启了几百次):

1
2
shutdown -r -t 5
shutdown -s -t 0

2020-9-8更新

用了一段时间发现居然不能webhook,ci等功能,然后经过一堆google,发现问题了。

(其实新的项目可以webhook,但是旧的以前用过webhook,就不能了因为key不一样了,因此理论你可以把所有项目重新创建一个新的,就可以了,但是这样太麻烦了)

正常的是gitlab-secrets.json 文件丢失,而我只是没有copy,所以我就把以前的gitlab-secrets.json复制过来了,就可以了。

如果真的丢失了。

官方回答:https://gitlab.com/gitlab-org/gitlab-foss/-/issues/57690

您是否进行了备份和还原?机密文件似乎不正确,并且加密的URL字段无法解密: