惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
量子位
M
MIT News - Artificial intelligence
Y
Y Combinator Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Google DeepMind News
Google DeepMind News
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
雷峰网
雷峰网
I
InfoQ
罗磊的独立博客
博客园 - 聂微东
酷 壳 – CoolShell
酷 壳 – CoolShell
大猫的无限游戏
大猫的无限游戏
D
Docker
H
Hackread – Cybersecurity News, Data Breaches, AI and More
腾讯CDC
博客园 - 三生石上(FineUI控件)
The GitHub Blog
The GitHub Blog
K
Kaspersky official blog
P
Privacy & Cybersecurity Law Blog
S
SegmentFault 最新的问题
T
Threat Research - Cisco Blogs
H
Help Net Security
小众软件
小众软件
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
C
CERT Recently Published Vulnerability Notes
WordPress大学
WordPress大学
T
Tenable Blog
T
The Blog of Author Tim Ferriss
C
Cisco Blogs
Simon Willison's Weblog
Simon Willison's Weblog
博客园 - Franky
A
Arctic Wolf
T
Threatpost
Scott Helme
Scott Helme
C
Cybersecurity and Infrastructure Security Agency CISA
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
The Exploit Database - CXSecurity.com
G
GRAHAM CLULEY
Security Latest
Security Latest
Spread Privacy
Spread Privacy
L
LINUX DO - 热门话题
V
Vulnerabilities – Threatpost
P
Privacy International News Feed
S
Schneier on Security
Latest news
Latest news
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Cyber Attacks, Cyber Crime and Cyber Security
C
CXSECURITY Database RSS Feed - CXSecurity.com

二丫讲梵

学习周刊-总第258期-2026年第15周 学习周刊-总第257期-2026年第14周 学习周刊-总第256期-2026年第13周 学习周刊-总第255期-2026年第12周 学习周刊-总第254期-2026年第11周 学习周刊-总第253期-2026年第10周 临时插播一条羊毛,免费领取450元大模型API代金券 学习周刊-总第252期-2026年第09周 学习周刊-总第251期-2026年第08周 学习周刊-总第250期-2026年第07周 学习周刊-总第249期-2026年第06周 诚邀评论,聊聊你所知欲知的我 学习周刊-总第248期-2026年第05周 我的QQ动态之2015年 我的QQ动态之2014年 我的QQ动态之2013年 我的QQ动态之2012年 我的QQ动态-2010-2011年 我的QQ动态-创栏小叙 学习周刊-总第247期-2026年第04周 Nexus社区版权益阉割--一文告诉你有哪些版本可以选择 学习周刊-总第246期-2026年第03周 学习周刊-总第245期-2026年第02周 学习周刊-总第244期-2026年第01周 学习周刊-总第243期-2025年第52周 学习周刊-总第242期-2025年第51周 开源项目ZenOps:带你领略禅意运维 学习周刊-总第241期-2025年第50周 用京东金融,享负债人生 学习周刊-总第240期-2025年第49周 学习周刊-总第239期-2025年第48周 整理我在静态服务透明代理上的极致求索之路,最后一个你绝想不到 学习周刊-总第238期-2025年第47周 我们输了,但收获颇多 太多了,太多了 学习周刊-总第237期-2025年第46周 学习周刊-总第236期-2025年第45周 学习周刊-总第235期-2025年第44周 二五年国庆二三事 学习周刊-总第234期-2025年第43周 学习周刊-总第233期-2025年第42周 学习周刊-总第232期-2025年第41周 学习周刊-总第231期-2025年第40周 学习周刊-总第230期-2025年第39周 西湖毅行 2025年开源世界逸闻三则 学习周刊-总第229期-2025年第38周 手抄《与妻书》 CNB开发与构建基于docker-cache缓存复用的配置实践心得 学习周刊-总第228期-2025年第37周 父亲善行录 学习周刊-总第227期-2025年第36周 带你认识我之看看我的高中同学录(其二) 学习周刊-总第226期-2025年第35周 带你认识我之看看我的高中同学录(其一) 认识神级MCP工具系列--用anyquery和数据库交互 学习周刊-总第225期-2025年第34周 学习周刊-总第224期-2025年第33周 学习周刊-总第223期-2025年第32周 学习周刊-总第222期-2025年第31周 学习周刊-总第221期-2025年第30周 CNB云原生开发环境届的瑞士军刀,详解qifei项目 vuepress-vdoing主题配置自建不蒜子统计 学习周刊-总第220期-2025年第29周 写在博客发表文章1000篇的节点 从claude cli的体验聊聊最大的敌人是我们自己的成见 学习周刊-总第219期-2025年第28周 学习周刊-总第218期-2025年第27周 学习周刊-总第217期-2025年第26周 理论正确,事实错误 学习周刊-总第216期-2025年第25周 学习周刊-总第215期-2025年第24周 学习周刊-总第214期-2025年第23周 学习周刊-总第213期-2025年第22周 学习周刊-总第212期-2025年第21周 从赵心童世锦赛夺冠聊聊我的斯诺克情缘 学习周刊-总第211期-2025年第20周 记录二五年五一之短暂回归家庭 学习周刊-总第210期-2025年第19周 学习周刊-总第209期-2025年第18周 学习周刊-总第208期-2025年第17周 Go开发实践之Gin框架将前端的dist目录embed到二进制 学习周刊-总第207期-2025年第16周 近期关于cobra库的一些实践心得总结 学习周刊-总第206期-2025年第15周 我的嗜好--嗑瓜子 记大宝参加幼儿园组织的清明烈士陵园扫墓活动 学习周刊-总第205期-2025年第14周 学习周刊-总第204期-2025年第13周 前端开发小笔记--在数组中给字段添加值与删除字段的操作 学习周刊-总第203期-2025年第12周 人生实苦,何以自渡 学习周刊-总第202期-2025年第11周 近期发现的一些优秀的工具提名(一) 学习周刊-总第201期-2025年第10周 学习周刊-总第200期-2025年第09周 记一次女友喝醉使我忍术破功 爱情风波--一次分手又复合的经历 学习周刊-总第199期-2025年第08周 整理我的信息源
gitlab备份恢复之后出现500错误之轻解
二丫讲梵 · 2025-09-07 · via 二丫讲梵

# 前言

2018 年的时候,我写过一篇 gitlab 备份恢复的文章,详见:Gitlab备份以及恢复

上篇文章使用的 gitlab 版本是 10.x,如今 7 年过去,不少内容已不适用,今天再次来记录一下备份恢复的过程,以及遇到的问题。

# 备份恢复

通常 gitlab 如果是全新安装,则建议你安装最新版本,如果是旧版本,则使用原则也是非不要不升级。

现在我来记录一下从 12.x 之后适用的备份恢复流程。

# 流程

先来简要概述一下 gitlab 通过备份恢复的方式迁移的流程:

  1. 首先准备一台新的机器,然后部署和原来环境同版本的 gitlab 服务。
  2. 拷贝老的服务的 配置秘钥,然后重载配置文件。
  3. 在老的主机执行备份操作。
  4. 将备份文件传到新的主机。
  5. 在新的主机执行恢复操作。

# 准备

准备新的环境,部署新的服务,这个可参考:GitLab部署的最佳实践

如果你是基于 docker 部署,则可使用如下 compose 文件拉起:

services:
  gitlab:
    image: 'gitlab/gitlab-ce:15.3.3-ce.0'
    container_name: gitlab
    restart: always
    environment:
      TZ: 'Asia/Shanghai'
    ports:
      - '22:22'
      - '8080:80'
    volumes:
      - '/data/project/gitlab/config:/etc/gitlab'
      - '/data/project/gitlab/logs:/var/log/gitlab'
      - '/data/project/gitlab/data:/var/opt/gitlab'

1
2
3
4
5
6
7
8
9
10
11
12
13
14

拉起之后,服务正常启动,所有重要内容都已挂载到本地。

此时去到老的服务器,把 gitlab.rbgitlab-secrets.json 两个文件的内容覆盖掉新拉起环境的 config 目录下对应的两个文件。

警告

📢 注意:重中之重, gitlab-secrets.json 文件一定要一定要拷贝过来,gitlab 的许多重要功能都会依赖这个配置,如果老的配置没有拷贝,或者已经丢失,问题就会很难办。

这里也需要注意,新的环境通过 docker 部署时,配置文件中的一些自定义目录应该去掉,使其保持默认,以对应上挂载到宿主机的目录。

配置都放好之后,可以进入到容器,执行配置重载命令:

docker exec -it gitlab bash
gitlab-ctl reconfigure

1
2

重载完毕,新环境就准备好了,达到可恢复状态。

# 备份

通过如下命令可以对 gitlab 系统进行备份,此命令有别于上边 18 年那篇文章的命令。

  • 一般执行备份就要禁止写的操作了,因此这个阶段需提前通知维护窗口,先禁止访问,再执行备份,以保证数据完整性。
  • 创建完毕之后,如果配置文件有指定,则备份文件在指定目录,如果没有指定,则默认目录为:/var/opt/gitlab/backups
  • 关于备份耗时:备份执行的时间长短,取决于仓库文件大小,这里给一个参考数据。30G 左右的备份文件大约二十多分钟备份完成。
  • 最后,再次提醒,务必注意上边提到的两个配置文件的备份,通常备份完成后,也会有如下提醒:

备份完成之后,将备份文件传到新的服务器的备份目录下,这个操作根据自己的习惯来传,不再赘述。

# 恢复

通过如下命令可对 gitlab 系统进行恢复,注意指定到文件的版本号处。

gitlab-backup restore BACKUP=1690008995_2025_09_07_15.3.3

1

  • 恢复时看到错误提示 ERROR: _must be owner of extension pg_trgm_ 可忽略,不影响恢复动作。
  • 如果提示文件不存在,看看是不是备份文件不在备份目录下,或者是文件名没写对。
  • 恢复过程中,开始和最后会有两次输入 yes 用于确认的操作,请注意。
  • 关于恢复耗时:恢复执行的时间长短,取决于备份文件的大小,如果文件较大,则需要较长的时间。这里还是以 30G 左右备份文件来举例,大约恢复时间需要三个小时左右,请耐心等待。

执行完毕之后,自己可通过绑定 hosts 验证是否有问题,没有问题就可以恢复访问了。

# 问题

gitlab 的备份恢复机制还是非常稳定好用的,可谓操作简单,数据稳定,值得信赖。

现在最大的问题,就是可能在执行这个备份恢复的过程中,漏掉了 gitlab-secrets.json 文件的迁移,并且老的配置也已丢失,可能会影响的问题如下:

  • CI/CD variables
  • Kubernetes / GCP integration
  • Custom Pages domains
  • Project error tracking
  • Runner authentication
  • Project mirroring
  • Integrations
  • Web hooks
  • Deploy tokens

现象是使用这些功能的时候,会在页面遇到 500 的错误。

关于这个问题,网上有一些解决方案,但我参考之后,并没有找到完全根治此问题的方案,如果上边功能大部分你用不到,只是使用代码仓库的功能,那似乎也没什么影响,如果重度依赖如上功能,则仍需要探索解决方案。

gitlab 官方也提供了对应的文档:GitLab 备份故障排除 (opens new window),我参考之后,只有 webhook 通过清空之后,重新配置解决了问题,其他的都没有效果。

web hooks

可通过如下命令进行清空,访问控制台:

sudo gitlab-rails dbconsole --database main

1

清空:

-- truncate web_hooks table
TRUNCATE integrations, chat_names, issue_tracker_data, jira_tracker_data, slack_integrations, web_hooks, zentao_tracker_data, web_hook_logs CASCADE;

1
2

清空完毕,再次进入到系统 hooks 页面,就不会报 500 的错误了,此时重新配置 hook 即可。

但是修改系统设置等功能出现的 500 错误,我至今未找到完美的解决方案,如果大家有可根治此问题的方案,请在评论区告诉我。