- 配置外部 URL
- 配置相对 URL
- 从非 root 用户加载外部配置文件
- 从文件中读取证书
- 将 Git 数据存储在备用目录中
- 更改 Git 用户/群组的名称
- 指定数字化的用户和群组标识符
- 禁用用户和群组账户管理
- 移动用户的主目录
- 禁用存储目录管理
- 仅在挂载给定文件系统后启动 Linux 软件包安装服务
- 配置运行时目录
- 配置失败的身份验证禁令
- 在安装过程中禁用自动缓存清理
- 使用 Sentry 进行错误报告和记录
- 设置内容交付网络(CDN) URL
- 设置 Content Security Policy
- 在安装时设置初始 root 密码
- 设置允许的主机以防止 host header 攻击
- Session Cookie 配置
- 在不使用明文存储的情况下向组件提供敏感配置
- 故障排查
极狐GitLab Linux 软件包的配置选项
要配置极狐GitLab,请在 /etc/gitlab/gitlab.rb
文件中设置相关选项。
gitlab.rb.template
包含可用选项的完整列表。新安装默认具有 /etc/gitlab/gitlab.rb
中列出的模板的所有选项。
/etc/gitlab/gitlab.rb
时提供的示例可能并不总是反映实例的默认设置。配置外部 URL
要向您的用户显示正确的仓库克隆链接,您必须向极狐GitLab 提供您的用户用来访问仓库的 URL。 您可以使用服务器的 IP,但首选完全限定域名 (FQDN)。有关在私有化部署实例中使用 DNS 的更多详细信息,请参阅 DNS 文档。
要更改外部 URL:
-
可选。在更改外部 URL 之前,请确定您之前是否自定义了 主页 URL 或 注销后路径。 在配置新的外部 URL 后,这两个设置都可能导致意外重定向。如果您定义了任何 URL,请将它们完全删除。
-
编辑
/etc/gitlab/gitlab.rb
并将external_url
更改为您的首选 URL:external_url "http://gitlab.example.com"
或者,您可以使用服务器的 IP 地址:
external_url "http://10.0.0.1"
在前面的示例中,我们使用 HTTP。如果您想使用 HTTPS,请参阅如何配置 SSL。
-
重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
-
可选。如果您已经使用极狐GitLab 一段时间,在更改外部 URL 后,您还应该使 Markdown 缓存无效。
在安装时指定外部 URL
如果您使用 Linux 软件包,您可以使用 EXTERNAL_URL
环境变量以最少的命令数设置极狐GitLab 实例。
如果设置了这个变量,它会被自动检测到,并且它的值被写为 gitlab.rb
文件中的 external_url
。
EXTERNAL_URL
环境变量仅影响软件包的安装和升级。对于常规的重新配置运行,使用 /etc/gitlab/gitlab.rb
中的值。
作为包更新的一部分,如果您无意中设置了 EXTERNAL_URL
变量,它将替换 /etc/gitlab/gitlab.rb
中的现有值,而不会发出任何警告。因此,我们建议不要全局设置变量,而是专门将其传递给安装命令:
sudo EXTERNAL_URL="https://gitlab.example.com" apt-get install gitlab-jh
配置相对 URL
虽然我们建议在自己的(子)域名下安装极狐GitLab,但有时这是不可能的。在这种情况下,极狐GitLab 也可以安装在相对 URL 下,例如,https://example.com/gitlab
。
通过更改 URL,所有远端 URL 也会更改,因此您必须在指向极狐GitLab 实例的任何本地仓库中手动编辑它们。
要启用相对 URL:
-
在
/etc/gitlab/gitlab.rb
中设置external_url
:external_url "https://example.com/gitlab"
在这个例子中,提供给极狐GitLab 使用的相对 URL 是
/gitlab
。根据您的喜好更改它。 -
重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
从非 root 用户加载外部配置文件
Linux 软件包安装从 /etc/gitlab/gitlab.rb
文件加载所有配置。
该文件具有严格的文件权限,归 root
用户所有。严格权限和所有权的原因是,/etc/gitlab/gitlab.rb
在 gitlab-ctl reconfigure
期间由 root
用户作为 Ruby 代码执行。这意味着 /etc/gitlab/gitlab.rb
具有写入权限的用户,可以添加由 root
作为代码执行的配置。
在某些组织中,允许访问配置文件,但不能以 root 用户身份访问。
您可以通过指定文件的路径在 /etc/gitlab/gitlab.rb
中包含外部配置文件:
-
编辑
/etc/gitlab/gitlab.rb
文件:from_file "/home/admin/external_gitlab.rb"
-
重新配置极狐GitLab
shell sudo gitlab-ctl reconfigure
当您使用from_file
时:
- 通过
from_file
方法包含进/etc/gitlab/gitlab.rb
的代码在重新配置极狐GitLab 时将以root
权限运行。 - 在包含
from_file
之后,在/etc/gitlab/gitlab.rb
中设置的任何配置都优先于包含文件中的配置。
从文件中读取证书
证书可以存储为单独的文件,并在运行 sudo gitlab-ctl reconfigure
时加载到内存中。包含证书的文件必须是纯文本。
在此示例中,PostgreSQL 服务器证书是直接从文件中读取的,而不是直接复制并粘贴到 gitlab.rb
中。
postgresql['internal_certificate'] = File.read('/path/to/server.crt')
将 Git 数据存储在备用目录中
默认情况下,Linux 软件包安装将 Git 仓库数据存储在 /var/opt/gitlab/git-data
下。仓库存储在名为 repositories
的子文件夹中。
要更改 git-data
父目录的位置:
-
编辑
/etc/gitlab/gitlab.rb
:git_data_dirs({ "default" => { "path" => "/mnt/nas/git-data" } })
您还可以添加多个 Git 数据目录:
git_data_dirs({ "default" => { "path" => "/var/opt/gitlab/git-data" }, "alternative" => { "path" => "/mnt/nas/git-data" } })
目标目录及其任何子路径不得是软链接(symlink)。
-
重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
-
可选。如果您已经在
/var/opt/gitlab/git-data
中有现有的 Git 仓库,则可以将它们移动到新位置:-
在您移动用户时,阻止用户写入仓库:
sudo gitlab-ctl stop
-
将仓库同步到新位置。注意
repositories
后面没有斜线,但git-data
后面有斜线:sudo rsync -av --delete /var/opt/gitlab/git-data/repositories /mnt/nas/git-data/
-
重新配置以启动必要的进程并修复任何错误的权限:
sudo gitlab-ctl reconfigure
-
仔细检查
/mnt/nas/git-data/
中的目录布局。预期的输出应该是repositories
:sudo ls /mnt/nas/git-data/
-
启动极狐GitLab 并验证您是否可以在 Web 界面中浏览仓库:
sudo gitlab-ctl start
-
如果您在自己的服务器上运行 Gitaly,请记住还包括每个 Git 数据目录的 gitaly_address
。
更改 Git 用户/群组的名称
默认情况下,Linux 软件包安装使用用户名 git
进行极狐GitLab Shell 登录、Git 数据本身的所有权以及 Web 界面上的 SSH URL 生成。
同样,git
群组用于 Git 数据的群组所有权。
要更改用户和群组:
-
编辑
/etc/gitlab/gitlab.rb
:user['username'] = "gitlab" user['group'] = "gitlab"
-
重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
如果您要更改现有安装的用户名,则重新配置运行不会更改嵌套目录的所有权,因此您必须手动执行此操作。
至少,您必须更改 repositories
和 uploads
目录的所有权:
sudo chown -R gitlab:gitlab /var/opt/gitlab/git-data/repositories
sudo chown -R gitlab:gitlab /var/opt/gitlab/gitlab-rails/uploads
指定数字化的用户和群组标识符
Linux 软件包安装为极狐GitLab、PostgreSQL、Redis、NGINX 等创建用户。要为这些用户指定数字标识符: 1. 记录下旧的用户和组标识符,您后续可能会用到它们:
sudo cat /etc/passwd
-
编辑
/etc/gitlab/gitlab.rb
并将标识符改成您想要的:user['uid'] = 1234 user['gid'] = 1234 postgresql['uid'] = 1235 postgresql['gid'] = 1235 redis['uid'] = 1236 redis['gid'] = 1236 web_server['uid'] = 1237 web_server['gid'] = 1237 registry['uid'] = 1238 registry['gid'] = 1238 mattermost['uid'] = 1239 mattermost['gid'] = 1239 prometheus['uid'] = 1240 prometheus['gid'] = 1240
-
停止、重新配置以及重启极狐GitLab:
sudo gitlab-ctl stop sudo gitlab-ctl reconfigure sudo gitlab-ctl start
-
可选的。 如果您要更改
user['uid']
和user['gid']
,请确保更新任何非 Linux 软件包直接管理的文件的 uid/guid,例如日志:find /var/log/gitlab -uid <old_uid> | xargs -I:: chown git :: find /var/log/gitlab -gid <old_uid> | xargs -I:: chgrp git :: find /var/opt/gitlab -uid <old_uid> | xargs -I:: chown git :: find /var/opt/gitlab -gid <old_uid> | xargs -I:: chgrp git ::
禁用用户和群组账户管理
默认情况下,Linux 软件包安装创建系统用户和群组账户,并保持信息更新。 这些系统账户运行包的各种组件。 大多数用户不需要更改。 但是,如果您的系统账户由其他软件管理,例如 LDAP,您可能需要禁用由极狐GitLab 包完成的账户管理。
默认情况下,Linux 软件包安装要求存在以下用户和群组:
Linux 用户和群组 | 必需? | 描述 | 默认的主目录 | 默认的 shell |
---|---|---|---|---|
git |
是 | 极狐GitLab 用户/群组 | /var/opt/gitlab |
/bin/sh |
gitlab-www |
是 | Web 服务器用户/群组 | /var/opt/gitlab/nginx |
/bin/false |
gitlab-redis |
仅当使用打包的 Redis 时 | Redis 中用于极狐GitLab 的用户/群组 | /var/opt/gitlab/redi |
/bin/false |
gitlab-psql |
仅当使用打包的 PostgreSQL 时 | PostgreSQL 用户/群组 | /var/opt/gitlab/postgresql |
/bin/sh |
gitlab-prometheus |
是 | 用于 Prometheus 监控和各种导出器的 Prometheus 用户/群组 | /var/opt/gitlab/prometheus |
/bin/sh |
mattermost |
仅当使用极狐GitLab Mattermost 时 | 极狐GitLab Mattermost 用户/群组 | /var/opt/gitlab/mattermost |
/bin/sh |
registry |
仅当使用极狐GitLab Registry 时 | 极狐GitLab Registry 用户/群组 | /var/opt/gitlab/registry |
/bin/sh |
gitlab-consul |
仅当使用极狐GitLab Consul 时 | 极狐GitLab Consul 用户/群组 | /var/opt/gitlab/consul |
/bin/sh |
gitlab-backup |
仅当使用 gitlab-backup-cli 时 |
极狐GitLab 备份命令行用户 | /var/opt/gitlab/backups |
/bin/sh |
要禁用用户和群组账户管理:
-
编辑
/etc/gitlab/gitlab.rb
:manage_accounts['enable'] = false
-
可选的。 您也可以使用不同的用户/群组名称,但您必须指定用户/群组详细信息:
# GitLab user['username'] = "git" user['group'] = "git" user['shell'] = "/bin/sh" user['home'] = "/var/opt/custom-gitlab" # Web server web_server['username'] = 'webserver-gitlab' web_server['group'] = 'webserver-gitlab' web_server['shell'] = '/bin/false' web_server['home'] = '/var/opt/gitlab/webserver' # Prometheus prometheus['username'] = 'gitlab-prometheus' prometheus['group'] = 'gitlab-prometheus' prometheus['shell'] = '/bin/sh' prometheus['home'] = '/var/opt/gitlab/prometheus' # Redis (not needed when using external Redis) redis['username'] = "redis-gitlab" redis['group'] = "redis-gitlab" redis['shell'] = "/bin/false" redis['home'] = "/var/opt/redis-gitlab" # Postgresql (not needed when using external Postgresql) postgresql['username'] = "postgres-gitlab" postgresql['group'] = "postgres-gitlab" postgresql['shell'] = "/bin/sh" postgresql['home'] = "/var/opt/postgres-gitlab" # Consul consul['username'] = 'gitlab-consul' consul['group'] = 'gitlab-consul' consul['dir'] = "/var/opt/gitlab/registry" # Registry registry['username'] = "registry" registry['group'] = "registry" registry['dir'] = "/var/opt/gitlab/registry" # Mattermost mattermost['username'] = 'mattermost' mattermost['group'] = 'mattermost' mattermost['home'] = '/var/opt/gitlab/mattermost'
-
重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
移动用户的主目录
对于极狐GitLab 用户,建议将 home 目录设置在本地磁盘(非 NFS)中以获得更好的性能。在 NFS 中设置时,Git 请求将需要发出另一个网络请求来读取 Git 配置,并且会增加 Git 操作的延迟。
要移动现有的主目录,需要停止极狐GitLab 服务并且需要一些停机时间。
-
停止极狐GitLab:
gitlab-ctl stop
-
停止 runit 服务器:
sudo systemctl stop gitlab-runsvdir
-
更改主目录:
usermod -d /path/to/home <username>
如果您有现有数据,则需要手动将其复制/同步到这些新位置。
-
编辑
/etc/gitlab/gitlab.rb
:user['home'] = "/var/opt/custom-gitlab"
-
启动 runit 服务器:
sudo systemctl start gitlab-runsvdir
-
重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
禁用存储目录管理
Linux 软件包负责创建具有正确所有权和权限的所有必要目录,并保持更新。
一些目录包含大量数据,因此在某些设置中,这些目录很可能安装在 NFS(或其他)共享上。
某些类型的挂载不允许 root 用户(初始设置的默认用户)自动创建目录,例如在共享上启用了 root_squash
的 NFS。为了解决这个问题,Linux 软件包尝试使用目录的所有者用户创建这些目录。
禁用 /etc/gitlab
目录管理
如果您挂载了/etc/gitlab
目录,你可以关闭该目录的管理:
-
编辑
/etc/gitlab/gitlab.rb
:manage_storage_directories['manage_etc'] = false
-
重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
禁用 /var/opt/gitlab
目录管理
如果要挂载所有极狐GitLab 存储目录,每个目录都在单独的挂载上,则应完全禁用存储目录的管理。
Linux 软件包安装要求这些目录存在于文件系统中。如果配置了此设置,则由您来创建和设置正确的权限。
启用此设置可防止创建以下目录:
默认位置 | 权限 | 所有权 | 目的 |
---|---|---|---|
/var/opt/gitlab/git-data |
0700 |
git:git |
保存仓库库目录 |
/var/opt/gitlab/git-data/repositories |
2770 |
git:git |
保存 Git 仓库 |
/var/opt/gitlab/gitlab-rails/shared |
0751 |
git:gitlab-www |
保存大型对象目录 |
/var/opt/gitlab/gitlab-rails/shared/artifacts |
0700 |
git:git |
保存 CI 产物 |
/var/opt/gitlab/gitlab-rails/shared/external-diffs |
0700 |
git:git |
保存外部合并请求差异 |
/var/opt/gitlab/gitlab-rails/shared/lfs-objects |
0700 |
git:git |
保存 LFS 对象 |
/var/opt/gitlab/gitlab-rails/shared/packages |
0700 |
git:git |
保存软件包仓库 |
/var/opt/gitlab/gitlab-rails/shared/dependency_proxy |
0700 |
git:git |
保存依赖项代理 |
/var/opt/gitlab/gitlab-rails/shared/terraform_state |
0700 |
git:git |
保存 terraform state |
/var/opt/gitlab/gitlab-rails/shared/ci_secure_files |
0700 |
git:git |
保存上传的安全文件 |
/var/opt/gitlab/gitlab-rails/shared/pages |
0750 |
git:gitlab-www |
保存用户 pages |
/var/opt/gitlab/gitlab-rails/uploads |
0700 |
git:git |
保存用户附件 |
/var/opt/gitlab/gitlab-ci/builds |
0700 |
git:git |
保存 CI 构建日志 |
/var/opt/gitlab/.ssh |
0700 |
git:git |
保存授权密钥 |
要禁用存储目录的管理:
-
编辑
/etc/gitlab/gitlab.rb
:manage_storage_directories['enable'] = false
-
重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
仅在挂载给定文件系统后启动 Linux 软件包安装服务
如果您想在挂载给定文件系统之前阻止 Linux 软件包安装服务(NGINX、Redis、Puma 等)启动:
-
编辑
/etc/gitlab/gitlab.rb
:# wait for /var/opt/gitlab to be mounted high_availability['mountpoint'] = '/var/opt/gitlab'
-
重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
如果挂载点不存在,极狐GitLab 重新配置会失败。
配置运行时目录
启用 Prometheus 监控后,极狐GitLab Exporter 会对每个 Puma 进程(Rails 指标)进行测量。每个 Puma 进程都需要为每个控制器请求,将指标文件写入临时位置。 然后 Prometheus 收集所有这些文件并处理它们的值。
为了避免创建磁盘 I/O,Linux 软件包使用运行时目录。
在 reconfigure
期间,包检查 /run
是否是 tmpfs
挂载。
如果不是,则会显示以下警告并禁用 Rails 指标:
Runtime directory '/run' is not a tmpfs mount.
再次启用 Rails 指标:
-
编辑
/etc/gitlab/gitlab.rb
以创建tmpfs
挂载(注意配置中没有=
):runtime_dir '/path/to/tmpfs'
-
重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
配置失败的身份验证禁令
您可以为 Git 和容器镜像库配置失败的身份验证禁令。当客户端被禁止后,会返回 403 错误码。
可配置的设置如下:
设置 | 描述 |
---|---|
enabled |
默认为 false 。将此设为 true 就会开启 Git 和容器仓库认证禁令 |
ip_whitelist |
不能阻止的 IP。它们必须以字符串的形式格式化在 Ruby 数组中。您可以使用单个 IP 地址或 CIDR 表示法,例如 ["127.0.0.1", "127.0.0.2", "127.0.0.3", "192.168.0.1/24"] 。 |
maxretry |
在指定时间内,一个请求可以被执行的最大次数。 |
findtime |
在 IP 地址被加入到拒绝列表之前,失败请求可以在多少秒内计算对该 IP 的限制。 |
bantime |
一个 IP 地址被封锁的总时长,以秒为单位。 |
如果要配置 Git 和容器镜像仓库认证禁令:
-
编辑
/etc/gitlab/gitlab.rb
:gitlab_rails['rack_attack_git_basic_auth'] = { 'enabled' => true, 'ip_whitelist' => ["127.0.0.1"], 'maxretry' => 10, # Limit the number of Git HTTP authentication attempts per IP 'findtime' => 60, # Reset the auth attempt counter per IP after 60 seconds 'bantime' => 3600 # Ban an IP for one hour (3600s) after too many auth attempts }
-
重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
在安装过程中禁用自动缓存清理
如果您有大型极狐GitLab 安装实例,您可能不想运行 rake cache:clear
任务,因为它可能需要很长时间才能完成。默认情况下,缓存清除任务在重新配置期间自动运行。
要在安装期间禁用自动缓存清理:
-
编辑
/etc/gitlab/gitlab.rb
:# This is an advanced feature used by large gitlab deployments where loading # whole RAILS env takes a lot of time. gitlab_rails['rake_cache_clear'] = false
-
重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
使用 Sentry 进行错误报告和记录
Sentry 是一个错误报告和日志记录工具,可用作 SaaS 或内部部署。它是开源的,您可以浏览它的源代码仓库。
配置 Sentry:
- 在 Sentry 中创建一个项目。
- 在您创建的项目中找到数据源名称(Data Source Name,即 DSN)。
-
编辑
/etc/gitlab/gitlab.rb
:gitlab_rails['sentry_enabled'] = true gitlab_rails['sentry_dsn'] = 'https://<key>@sentry.io/<project>' gitlab_rails['sentry_clientside_dsn'] = 'https://<key>@sentry.io/<project>' gitlab_rails['sentry_environment'] = 'production'
Sentry 环境 可用于跨多个已部署的极狐GitLab 环境(例如实验室、开发、staging、生产)跟踪错误和问题。
-
可选的。要在从特定服务器发送的每个事件上设置自定义 Sentry 标签,可以设置
GITLAB_SENTRY_EXTRA_TAGS
环境变量。这个变量是一个 JSON 编码的散列,表示应该为来自该服务器的所有异常传递给 Sentry 的任何标签。对于实例,设置:
gitlab_rails['env'] = { 'GITLAB_SENTRY_EXTRA_TAGS' => '{"stage": "main"}' }
将添加值为
main
的stage
标签。 -
重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
设置内容交付网络(CDN) URL
使用 gitlab_rails['cdn_host']
为内容交付网络 (CDN) 或 asset 主机,提供静态 asset,将会配置一个 Rails asset 主机。
设置 CDN/asset 主机:
-
编辑
/etc/gitlab/gitlab.rb
:gitlab_rails['cdn_host'] = 'https://mycdnsubdomain.fictional-cdn.com'
-
重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
设置 Content Security Policy
设置内容安全策略 (CSP) 可以帮助阻止 JavaScript 跨站点脚本 (XSS) 攻击。有关更多详细信息,请参阅关于 CSP 的 Mozilla 文档。
report_only
更改为 true
来测试配置。添加 CSP:
-
编辑
/etc/gitlab/gitlab.rb
:gitlab_rails['content_security_policy'] = { enabled: true, report_only: false }
极狐GitLab 自动为 CSP 提供安全的默认值。 为指令明确设置
<default_value>
值,等同于不设置值并将使用默认值。添加自定义 CSP:
gitlab_rails['content_security_policy'] = { enabled: true, report_only: false, directives: { default_src: "'none'", script_src: "https://example.com" } }
安全默认值用于未明确配置的指令。
要取消设置 CSP 指令,请将值设置为
false
。 -
重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
在安装时设置初始 root 密码
管理员用户 root
的初始密码可以在安装时进行设置。详情请参见设置初始密码。
设置允许的主机以防止 host header 攻击
为了防止极狐GitLab 接受与预期不同的主机头:
-
编辑
/etc/gitlab/gitlab.rb
:gitlab_rails['allowed_hosts'] = ['gitlab.example.com']
-
重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
极狐GitLab 中没有因未配置 allowed_hosts
导致的已知安全问题,但建议深入防御潜在的 HTTP host header 攻击。
如果使用自定义外部代理(例如 Apache),则可能需要添加 localhost。管理员应向外部代理添加过滤器,以减轻通过代理传递给 workhorse 的潜在 HTTP Host header 攻击。
gitlab_rails['allowed_hosts'] = ['gitlab.example.com', '127.0.0.1', 'localhost']
Session Cookie 配置
如果要修改网页会话 cookie 的值:
-
编辑
/etc/gitlab/gitlab.rb
:gitlab_rails['session_store_session_cookie_token_prefix'] = 'custom_prefix_'
-
重新配置极狐GitLab
sudo gitlab-ctl reconfigure
默认值是空字符 ""
。
在不使用明文存储的情况下向组件提供敏感配置
有些组件在 gitlab.rb
中提供了 `extra_config_command。这允许通过外部脚本动态提供密钥,而不是从明文文本存储中读取它们。
可用的选项如下:
gitlab.rb 设置 |
责任 |
---|---|
redis['extra_config_command'] |
为 Redis 服务器配置文件提供额外的配置 |
gitlab_rails['redis_extra_config_command'] |
为极狐GitLab Rails 应用程序所用的 Redis 配置文件提供额外的配置。(resque.yml 、redis.yml 、redis.<redis_instance>.yml 文件) |
gitlab_rails['db_extra_config_command'] |
为极狐GitLab Rails 应用程序所用的 DB 配置文件提供额外的额配置。 (database.yml ) |
gitlab_kas['extra_config_command'] |
为极狐GitLab Kubernetes agent server(KAS) 提供额外的配置。 |
gitlab_workhorse['extra_config_command'] |
为极狐GitLab Workhorse 提供额外的额配置。 |
gitlab_exporter['extra_config_command'] |
为极狐GitLab Exporter 提供额外的配置 |
分配给这些选项的值应该是指向一个可执行脚本的绝对路径,该脚本将敏感配置以所需格式写入标准输出(STDOUT)。组件:
- 执行提供的脚本。
- 用脚本提供的值替换用户和默认配置文件中设置的值。
为 Redis 服务器和客户端组件提供 Redis 密码
作为示例,您可以使用脚本和下面的 gitlab.rb
片段为 Redis 服务器或需要连接到 Redis 的组件指定密码。
gitlab.rb
文件中拥有明文密码。密码最终将以明文形式出现在位于 /var/opt/gitlab/redis/redis.conf
的 Redis 服务器配置文件中。-
将下面的内容保存为
/opt/generate-redis-conf
#!/opt/gitlab/embedded/bin/ruby require 'json' require 'yaml' class RedisConfig REDIS_PASSWORD = `echo "toomanysecrets"`.strip # Change the command inside backticks to fetch Redis password class << self def server puts "requirepass '#{REDIS_PASSWORD}'" puts "masterauth '#{REDIS_PASSWORD}'" end def rails puts YAML.dump({ 'password' => REDIS_PASSWORD }) end def kas puts YAML.dump({ 'redis' => { 'password' => REDIS_PASSWORD } }) end def workhorse puts JSON.dump({ redis: { password: REDIS_PASSWORD } }) end def gitlab_exporter puts YAML.dump({ 'probes' => { 'sidekiq' => { 'opts' => { 'redis_password' => REDIS_PASSWORD } } } }) end end end def print_error_and_exit $stdout.puts "Usage: generate-redis-conf <COMPONENT>" $stderr.puts "Supported components are: server, rails, kas, workhorse, gitlab_exporter" exit 1 end print_error_and_exit if ARGV.length != 1 component = ARGV.shift begin RedisConfig.send(component.to_sym) rescue NoMethodError print_error_and_exit end
-
确保上面创建的脚本是可执行的:
chmod +x /opt/generate-redis-conf
-
将以下片段添加到
/etc/gitlab/gitlab.rb
:redis['extra_config_command'] = '/opt/generate-redis-conf server' gitlab_rails['redis_extra_config_command'] = '/opt/generate-redis-conf rails' gitlab_workhorse['extra_config_command'] = '/opt/generate-redis-conf workhorse' gitlab_kas['extra_config_command'] = '/opt/generate-redis-conf kas' gitlab_exporter['extra_config_command'] = '/opt/generate-redis-conf gitlab_exporter'
-
运行
sudo gitlab-ctl reconfigure
。
为极狐GitLab Rails 提供 PostgreSQL 用户密码
作为示例,您可以使用脚本和下面的配置来提供极狐GitLab Rails 应该用来连接 PostgreSQL 服务器的密码。
-
将下面的脚本保存为
/opt/generate-db-config
:#!/opt/gitlab/embedded/bin/ruby require 'yaml' db_password = `echo "toomanysecrets"`.strip # Change the command inside backticks to fetch DB password puts YAML.dump({ 'main' => { 'password' => db_password }, 'ci' => { 'password' => db_password } })
-
确保上面创建的脚本是可执行的:
chmod +x /opt/generate-db-config
-
将以下片段添加到
/etc/gitlab/gitlab.rb
:gitlab_rails['db_extra_config_command'] = '/opt/generate-db-config'
-
运行
sudo gitlab-ctl reconfigure
。
故障排查
Mixlib::ShellOut::ShellCommandFailed: linux_user[GitLab user and group]
为用户移动主目录时,如果没有停止 runit 服务,也没有手动为用户移动主目录,极狐GitLab 在重新配置时会遇到错误:
account[GitLab user and group] (gitlab::users line 28) had an error: Mixlib::ShellOut::ShellCommandFailed: linux_user[GitLab user and group] (/opt/gitlab/embedded/cookbooks/cache/cookbooks/package/resources/account.rb line 51) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '8'
---- Begin output of ["usermod", "-d", "/var/opt/gitlab", "git"] ----
STDOUT:
STDERR: usermod: user git is currently used by process 1234
---- End output of ["usermod", "-d", "/var/opt/gitlab", "git"] ----
Ran ["usermod", "-d", "/var/opt/gitlab", "git"] returned 8
确保在移动主目录之前停止 runit
。
修改 Git 用户或组的名称后极狐GitLab 反应 502
如果您在既有实力上修改了 Git 用户或者组的名称,这可能会带来多种副作用。
您可以检查与文件无法访问相关的错误,并尝试修复它们的权限:
gitlab gitlab-ctl tail -f