维护命令

安装后可以运行以下命令。

获取服务状态

运行 sudo gitlab-ctl status,查看每个组件的当前状态和正常运行时间。

输出将类似于以下内容:

run: nginx: (pid 972) 7s; run: log: (pid 971) 7s
run: postgresql: (pid 962) 7s; run: log: (pid 959) 7s
run: redis: (pid 964) 7s; run: log: (pid 963) 7s
run: sidekiq: (pid 967) 7s; run: log: (pid 966) 7s
run: puma: (pid 961) 7s; run: log: (pid 960) 7s

以第一行为例:

  • Nginx 是进程名称。
  • 972 是进程标识符。
  • NGINX 已经运行了 7 秒(7s)。
  • log 表示附加到上述进程的 svlogd 日志记录进程
  • 971 是记录进程的进程标识符。
  • 记录进程已经运行了 7 秒(7s)。

跟踪进程日志

查看设置日志文档

启动和停止

Omnibus GitLab 安装和配置后,您的服务器将运行一个 runit 服务目录(runsvdir)进程,该进程在启动时通过 /etc/inittab/etc/init/gitlab-runsvdir.conf 启动。不要直接处理 runsvdir 进程;您可以改用 gitlab-ctl 前端。

您可以使用以下命令启动、停止或重新启动极狐GitLab 及其所有组件。

# Start all GitLab components
sudo gitlab-ctl start

# Stop all GitLab components
sudo gitlab-ctl stop

# Restart all GitLab components
sudo gitlab-ctl restart

# Restart all GitLab components except given services ... (e.g. gitaly, redis)
sudo gitlab-ctl restart-except gitaly redis

请注意,在单核服务器上,重启 Puma 和 Sidekiq 可能需要长达一分钟的时间。您的极狐GitLab 实例将出现 502 错误,直到 Puma 再次启动。

您也可以启动、停止或重新启动单个组件。

sudo gitlab-ctl restart sidekiq

Puma 确实支持几乎零停机的重新加载。可以按如下方式触发:

sudo gitlab-ctl hup puma

请注意,您必须等待 hup命令完成,这可能需要一些时间。将该节点从池中移出,并且在完成之前不要在调用该节点的节点上重新启动服务。您也无法使用 Puma 重新加载来更新 Ruby 运行时。

Puma 有以下 signal 来控制应用程序行为:

Signal Puma
HUP 重新打开定义的日志文件,或停止进程以强制重启
INT 优雅地停止请求处理
USR1 分阶段重启 workers,滚动重启,无需重新加载配置
USR2 重新启动 workers 并重新加载配置
QUIT 退出主进程

对于 Puma,gitlab-ctl hup puma 将发送一系列 SIGINTSIGTERM(如果进程没有重新启动)signal。一旦收到 SIGINT,Puma 就会停止接受新连接。它完成所有正在运行的请求,然后 runit 重新启动服务。

调用 Rake 任务

要调用极狐GitLab Rake 任务,请使用 gitlab-rake。例如:

sudo gitlab-rake gitlab:check

如果您是 git 用户,请省略 sudo

与传统的极狐GitLab 安装相反,无需更改用户或 RAILS_ENV 环境变量;由 gitlab-rake 包装脚本处理。

启动 Rails 控制台会话

获取更多信息,查看 Rails 控制台

启动 PostgreSQL 超级用户 psql 会话

如果您需要超级用户访问捆绑的 PostgreSQL 服务,您可以使用 gitlab-psql 命令。它采用与常规 psql 命令相同的参数。

# Superuser psql access to GitLab's database
sudo gitlab-psql -d gitlabhq_production

仅在您至少运行一次 gitlab-ctl reconfigure 后才有效。gitlab-psql 命令不能用于连接远程 PostgreSQL 服务器,也不能用于连接本地非 Omnibus PostgreSQL 服务器。

在 Geo 跟踪数据库中启动 PostgreSQL 超级用户 psql 会话

与前面的命令类似,如果您需要超级用户访问捆绑的 Geo 跟踪数据库(geo-postgresql),则可以使用gitlab-geo-psql。它采用与常规 psql 命令相同的参数。

# Superuser psql access to GitLab's Geo tracking database
sudo gitlab-geo-psql -d gitlabhq_geo_production

Container Registry 垃圾回收

Container Registry 可能会使用大量磁盘空间。为了清除未使用的镜像层,镜像库包含一个垃圾收集命令

限制用户登录极狐GitLab

如果需要临时限制用户登录极狐GitLab,可以使用 sudo gitlab-ctl deploy-page up。当用户访问您的极狐GitLab URL 时,他们将看到一个任意的 Deploy in progress 页面。

要删除页面,您只需运行sudo gitlab-ctl deploy-page down。 您还可以使用 sudo gitlab-ctl deploy-page status 检查部署页面的状态。

另外,如果您真的想限制用户登录极狐GitLab 并限制对项目的变更,您可以将项目设置为只读,然后挂上“正在部署”的页面。

更新密钥文件

如果处于安全目的的需要,您可以更新 /etc/gitlab/gitlab-secrets.json 密钥文件。在此文件中:

  • 不要更新 gitlab_rails 密钥,因为它包含数据库的解密 key。如果更新了此密钥,你会看到和密钥文件丢失时一样的错误。
  • 你可以更新其他所有的密钥。

如果您的极狐GitLab 环境有多个节点,选择其中一个 Rails 节点执行初始化操作。

如果要更新密钥:

  1. 确认数据库的值能够被解密并且记录任何显示的错误信息,在继续之前解决掉这些错误。
  2. 推荐。提取您当前的 gitlab_rails 密钥。保存好输出结果,因为后续您会用到这些信息:
sudo grep "secret_key_base\|db_key_base\|otp_key_base\|encrypted_settings_key_base\|openid_connect_signing_key" /etc/gitlab/gitlab-secrets.json
  1. 将当前的密钥文件移到其他位置:
sudo mv /etc/gitlab/gitlab-secrets.json /etc/gitlab/gitlab-secrets.json.old
  1. 重配置极狐GitLab。随后极狐GitLab 将生成一个包含新密钥的 /etc/gitlab/gitlab-secrets.json 文件。
  2. 如果您提取了之前的 gitlab_rails 密钥,然后编辑新的 /etc/gitlab/gitlab-secrets.json 文件并将 gitlab_rails 下面键/值对的值替换为第 2 步中生成的密钥输出值。
  3. 重新配置极狐GitLab 以便密钥文件的变更能够生效。
  4. 重启极狐GitLab 以确保所有的服务都在使用新的密钥。
  5. 如果您的极狐GitLab 环境中有多个节点,您必须将密钥文件拷贝到其他所有的节点上:

    a. 在其他节点上,将当前的密钥文件移到其他位置 shell sudo mv /etc/gitlab/gitlab-secrets.json /etc/gitlab/gitlab-secrets.json.old b. 从您的 Rails 节点上将新的 /etc/gitlab/gitlab-secrets.json 文件拷贝到其他的极狐GitLab 节点。 c. 在其他的节点上,每个节点都要重新配置极狐GitLab。 d. 在其他的节点上,重启极狐GitLab 以确保所有的服务都在使用新的密钥。 e. 在其他的节点上,对 /etc/gitlab/gitlab-secrets.json 文件运行校验和匹配,以确认密钥是否匹配: shell sudo md5sum /etc/gitlab/gitlab-secrets.json

  6. 确认数据库的值能够被解密。输出的值要能够跟之前(替换密钥之前)的值相匹配。
  7. 确认极狐GitLab 如期工作。如果一切正常,就可以删除旧的密钥文件了。