- 配置极狐GitLab 的外部 URL
- 为极狐GitLab 配置相对 URL
- 从非 root 用户加载外部配置文件
- 从文件读取证书
- 从
git_data_dirs
迁移 - 在替代目录中存储 Git 数据
- 更改 Git 用户或群组的名称
- 指定数字用户和群组标识符
- 禁用用户和群组账户管理
- 移动用户的家目录
- 禁用存储目录管理
- 仅在给定文件系统挂载后启动 Linux 软件包安装服务
- 配置运行时目录
- 配置失败认证禁令
- 禁用安装期间的自动缓存清理
- 使用 Sentry 进行错误报告和日志记录
- 设置内容分发网络 URL
- 设置内容安全策略
- 在安装时设置初始根密码
- 设置允许的主机以防止主机头攻击
- 会话 Cookie 配置
- 向组件提供敏感配置而无需明文存储
- 相关主题
- Troubleshooting
{{< details >}}
- Tier: 基础版,专业版,旗舰版
- Offering: 私有化部署
{{< /details >}}
要配置极狐GitLab,请在 /etc/gitlab/gitlab.rb
文件中设置相关选项。
gitlab.rb.template
包含可用选项的完整列表。新安装默认在 /etc/gitlab/gitlab.rb
中列出了模板的所有选项。
{{< alert type=”note” >}}
当您编辑 /etc/gitlab/gitlab.rb
时提供的示例可能并不总是反映实例的默认设置。
{{< /alert >}}
有关默认设置的列表,请参阅软件包默认值。
配置极狐GitLab 的外部 URL
要向您的用户显示正确的仓库克隆链接,您必须为极狐GitLab 提供用户用来访问仓库的 URL。您可以使用服务器的 IP,但建议使用完全限定域名 (FQDN)。有关在极狐GitLab 私有化部署实例中使用 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-ee
为极狐GitLab 配置相对 URL
{{< alert type=”note” >}}
对于自编译(源代码)安装,有一个单独的文档。
{{< /alert >}}
虽然我们建议在自己的(子)域中安装极狐GitLab,但有时这是不可能的。在这种情况下,极狐GitLab 也可以安装在相对 URL 下,例如 https://example.com/gitlab
。
通过更改 URL,所有远程 URL 也会随之更改,因此您必须在任何指向您的极狐GitLab 实例的本地仓库中手动编辑它们。
要在极狐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:
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 服务器证书直接从文件中读取,而不是直接复制并粘贴到 /etc/gitlab/gitlab.rb
中。
postgresql['internal_certificate'] = File.read('/path/to/server.crt')
从 git_data_dirs
迁移
从 18.0 开始,git_data_dirs
将不再是配置 Gitaly 存储位置的支持方式。如果您明确定义了 git_data_dirs
,则需要迁移配置。
例如,对于 Gitaly 服务,如果您的 /etc/gitlab/gitlab.rb
配置如下:
git_data_dirs({
"default" => {
"path" => "/mnt/nas/git-data"
}
})
您需要在 gitaly['configuration']
下重新定义配置。请注意,必须将 /repositories
后缀附加到路径,因为之前是内部附加的。
gitaly['configuration'] = {
storage: [
{
name: 'default',
path: '/mnt/nas/git-data/repositories',
},
],
}
需要注意的是,路径的父目录也必须由 Omnibus 管理。按照上面的示例,Omnibus 必须修改 /mnt/nas/git-data
的权限,并可能在运行时在该目录中存储数据。您应该选择一个允许这种行为的适当路径。
对于 Rails 和 Sidekiq 客户端,如果您的 /etc/gitlab/gitlab.rb
配置如下:
git_data_dirs({
"default" => {
"gitaly_address" => "tcp://gitaly1.internal:8075"
}
})
您需要在 gitlab_rails['repositories_storages']
下重新定义配置。
gitlab_rails['repositories_storages'] = {
"default" => {
"gitaly_address" => "tcp://gitaly1.internal:8075"
}
}
在替代目录中存储 Git 数据
默认情况下,Linux 软件包安装将 Git 仓库数据存储在 /var/opt/gitlab/git-data/repositories
下,Gitaly 服务监听 unix:/var/opt/gitlab/gitaly/gitaly.socket
。
要更改目录的位置,
-
编辑
/etc/gitlab/gitlab.rb
:gitaly['configuration'] = { storage: [ { name: 'default', path: '/mnt/nas/git-data/repositories', }, ], }
您还可以添加多个 Git 数据目录:
gitaly['configuration'] = { storage: [ { name: 'default', path: '/var/opt/gitlab/git-data/repositories', }, { name: 'alternative', path: '/mnt/nas/git-data/repositories', }, ], }
目标目录及其任何子路径不能是符号链接。
-
重新配置极狐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,请参阅配置 Gitaly 的文档。
如果您不打算移动所有仓库,而是希望在现有仓库存储之间移动特定项目,请使用编辑项目 API 端点并指定 repository_storage
属性。
更改 Git 用户或群组的名称
{{< alert type=”warning” >}}
我们不建议更改现有安装的用户或群组,因为这可能会导致不可预测的副作用。
{{< /alert >}}
默认情况下,Linux 软件包安装使用用户名 git
进行极狐GitLab Shell 登录,拥有 Git 数据本身,并在 Web 界面上生成 SSH URL。类似地,git
群组用于 Git 数据的群组所有权。
要在新的 Linux 软件包安装上更改用户和群组:
-
编辑
/etc/gitlab/gitlab.rb
:user['username'] = "gitlab" user['group'] = "gitlab"
-
重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
如果您正在更改现有安装的用户名,则重新配置运行不会更改嵌套目录的所有权,因此您必须手动执行此操作。
至少,您必须更改仓库和上传目录的所有权:
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 等创建用户。要指定这些用户的数字标识符:
-
写下旧的用户和群组标识符,因为您可能以后需要它们:
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-prometheus |
是 | Prometheus 用户/群组用于 Prometheus 监控和各种导出器 | /var/opt/gitlab/prometheus |
/bin/sh |
gitlab-redis |
仅在使用打包的 Redis 时 | 极狐GitLab 的 Redis 用户/群组 | /var/opt/gitlab/redis |
/bin/false |
gitlab-psql |
仅在使用打包的 PostgreSQL 时 | PostgreSQL 用户/群组 | /var/opt/gitlab/postgresql |
/bin/sh |
gitlab-consul |
仅在使用极狐GitLab Consul 时 | 极狐GitLab Consul 用户/群组 | /var/opt/gitlab/consul |
/bin/sh |
registry |
仅在使用极狐GitLab Registry 时 | 极狐GitLab Registry 用户/群组 | /var/opt/gitlab/registry |
/bin/sh |
mattermost |
仅在使用极狐GitLab Mattermost 时 | 极狐GitLab Mattermost 用户/群组 | /var/opt/gitlab/mattermost |
/bin/sh |
gitlab-backup |
仅在使用 gitlab-backup-cli 时 |
极狐GitLab Backup Cli 用户 | /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 服务器 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(不需要在使用外部 Redis 时) redis['username'] = "redis-gitlab" redis['group'] = "redis-gitlab" redis['shell'] = "/bin/false" redis['home'] = "/var/opt/redis-gitlab" # Postgresql(不需要在使用外部 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" registry['shell'] = "/usr/sbin/nologin" # Mattermost mattermost['username'] = 'mattermost' mattermost['group'] = 'mattermost' mattermost['home'] = '/var/opt/gitlab/mattermost'
-
重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
移动用户的家目录
对于极狐GitLab 用户,我们建议将家目录设置在本地磁盘上,而不是在共享存储如 NFS 上,以获得更好的性能。将其设置在 NFS 中时,Git 请求必须进行另一个网络请求来读取 Git 配置,这增加了 Git 操作的延迟。
要移动现有的家目录,需要停止极狐GitLab 服务并需要一些停机时间:
-
停止极狐GitLab:
sudo gitlab-ctl stop
-
停止 runit 服务器:
sudo systemctl stop gitlab-runsvdir
-
更改家目录:
sudo 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 |
2770 |
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 |
保存外部合并请求 diff |
/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 状态 |
/var/opt/gitlab/gitlab-rails/shared/ci_secure_files |
0700 |
git:git |
保存上传的安全文件 |
/var/opt/gitlab/gitlab-rails/shared/pages |
0750 |
git:gitlab-www |
保存用户页面 |
/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 等)在给定文件系统挂载之前启动,可以设置 high_availability['mountpoint']
设置:
-
编辑
/etc/gitlab/gitlab.rb
:# 等待 /var/opt/gitlab 挂载 high_availability['mountpoint'] = '/var/opt/gitlab'
-
重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
{{< alert type=”note” >}}
如果挂载点不存在,极狐GitLab 将无法重新配置。
{{< /alert >}}
配置运行时目录
启用 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 被添加到拒绝列表之前,失败请求可以计入的最大时间(秒)。 |
bantime |
IP 被阻止的总时间(秒)。 |
要配置 Git 和容器注册表认证禁令:
-
编辑
/etc/gitlab/gitlab.rb
:gitlab_rails['rack_attack_git_basic_auth'] = { 'enabled' => true, 'ip_whitelist' => ["127.0.0.1"], 'maxretry' => 10, # 限制每个 IP 的 Git HTTP 认证尝试次数 'findtime' => 60, # 每 60 秒重置每个 IP 的认证尝试计数器 'bantime' => 3600 # 在过多认证尝试后禁止一个 IP 一小时(3600s) }
-
重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
禁用安装期间的自动缓存清理
如果您有一个大型极狐GitLab 安装,您可能不想运行 rake cache:clear
任务,因为它可能需要很长时间才能完成。默认情况下,在重新配置期间自动运行缓存清理任务。
要禁用安装期间的自动缓存清理:
-
编辑
/etc/gitlab/gitlab.rb
:# 这是一个高级功能,用于大型极狐GitLab 部署,其中加载整个 RAILS 环境需要很长时间。 gitlab_rails['rake_cache_clear'] = false
-
重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
使用 Sentry 进行错误报告和日志记录
{{< alert type=”warning” >}}
从极狐GitLab 17.0 开始,仅支持 Sentry 版本 21.5.0 或更高版本。如果您使用的是早期版本的自托管 Sentry 实例,则必须升级 Sentry以继续从您的极狐GitLab 环境中收集错误。
{{< /alert >}}
Sentry 是一个开源错误报告和日志记录工具,可以用作 SaaS (https://sentry.io) 或私有化部署。
要配置 Sentry:
- 在 Sentry 中创建一个项目。
- 找到您创建的项目的数据源名称 (DSN)。
-
编辑
/etc/gitlab/gitlab.rb
:gitlab_rails['sentry_enabled'] = true gitlab_rails['sentry_dsn'] = 'https://<public_key>@<host>/<project_id>' # Rails SDK 使用的值 gitlab_rails['sentry_clientside_dsn'] = 'https://<public_key>@<host>/<project_id>' # 浏览器 JavaScript SDK 使用的值 gitlab_rails['sentry_environment'] = 'production'
Sentry 环境可用于跟踪多个已部署的极狐GitLab 环境中的错误和问题,例如实验室、开发、测试和生产。
-
可选。要在从特定服务器发送的每个事件上设置自定义 Sentry 标签,可以设置环境变量
GITLAB_SENTRY_EXTRA_TAGS
。此变量是一个 JSON 编码的哈希,表示应传递给 Sentry 的任何标签,以便从该服务器发送的所有异常。例如,设置:
gitlab_rails['env'] = { 'GITLAB_SENTRY_EXTRA_TAGS' => '{"stage": "main"}' }
将添加
stage
标签,值为main
。 -
重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
设置内容分发网络 URL
使用 gitlab_rails['cdn_host']
为静态资源提供内容分发网络 (CDN) 或资源主机。这会配置一个 Rails 资源主机。
要设置 CDN/资源主机:
-
编辑
/etc/gitlab/gitlab.rb
:gitlab_rails['cdn_host'] = 'https://mycdnsubdomain.fictional-cdn.com'
-
重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
设置内容安全策略
设置内容安全策略 (CSP) 可以帮助阻止 JavaScript 跨站脚本 (XSS) 攻击。
{{< alert type=”note” >}}
不正确配置 CSP 规则可能会导致极狐GitLab 无法正常工作。在实施策略之前,您可能还需要将 report_only
更改为 true
来测试配置。
{{< /alert >}}
要添加 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
的初始密码。有关更多信息,请参阅设置初始密码。
设置允许的主机以防止主机头攻击
为了防止极狐GitLab 接受除预期之外的主机头:
-
编辑
/etc/gitlab/gitlab.rb
:gitlab_rails['allowed_hosts'] = ['gitlab.example.com']
-
重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
没有已知的安全问题是由于未配置 allowed_hosts
而导致极狐GitLab 出现的,但建议进行深度防御,以防止潜在的 HTTP 主机头攻击。
如果使用自定义外部代理,例如 Apache,可能需要添加本地主机地址或名称(localhost
或 127.0.0.1
)。您应该向外部代理添加过滤器,以减轻通过代理传递到 workhorse 的潜在 HTTP 主机头攻击。
gitlab_rails['allowed_hosts'] = ['gitlab.example.com', '127.0.0.1', 'localhost']
会话 Cookie 配置
要更改生成的 Web 会话 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 应用程序使用的数据库配置文件提供额外配置。(database.yml ) |
gitlab_kas['extra_config_command'] |
向极狐GitLab Kubernetes 代理服务器提供额外配置。 |
gitlab_workhorse['extra_config_command'] |
向极狐GitLab Workhorse 提供额外配置。 |
gitlab_exporter['extra_config_command'] |
向极狐GitLab Exporter 提供额外配置。 |
为这些选项中的任何一个分配的值应该是一个绝对路径,指向一个可执行脚本,该脚本以所需格式将敏感配置写入 STDOUT。组件:
- 执行提供的脚本。
- 用脚本发出的值替换用户和默认配置文件设置的值。
向 Redis 服务器和客户端组件提供 Redis 密码
作为示例,您可以使用下面的脚本和 gitlab.rb
片段来指定密码给 Redis 服务器和需要连接到 Redis 的组件。
{{< alert type=”note” >}}
在指定 Redis 服务器的密码时,此方法仅能避免在 gitlab.rb
文件中出现明文密码。密码将以明文形式出现在 Redis 服务器配置文件中,该文件位于 /var/opt/gitlab/redis/redis.conf
。
{{< /alert >}}
-
将下面的脚本保存为
/opt/generate-redis-conf
#!/opt/gitlab/embedded/bin/ruby require 'json' require 'yaml' class RedisConfig REDIS_PASSWORD = `echo "toomanysecrets"`.strip # 更改反引号内的命令以获取 Redis 密码 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 # 更改反引号内的命令以获取数据库密码 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
。
相关主题
- 禁用模拟
- 设置 LDAP 登录
- 智能卡认证
-
设置 NGINX 以进行以下操作:
- 设置 HTTPS
- 将
HTTP
请求重定向到HTTPS
- 更改默认端口和 SSL 证书位置
- 设置 NGINX 监听地址或地址
- 在极狐GitLab 服务器块中插入自定义 NGINX 设置
- 在 NGINX 配置中插入自定义设置
- 启用
nginx_status
- 使用非打包的 Web 服务器
- 使用非打包的 PostgreSQL 数据库管理服务器
- 使用非打包的 Redis 实例
- 向极狐GitLab 运行时环境添加
ENV
变量 - 更改
gitlab.yml
和application.yml
设置 - 通过 SMTP 发送应用程序邮件
- 调整 Puma 设置
Troubleshooting
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
。
GitLab responds with 502 after changing the name of the Git user or group
如果你在现有安装中更改了 Git 用户或用户组的名称,这可能会导致许多副作用。
你可以检查与无法访问文件相关的错误,并尝试修复它们的权限:
gitlab gitlab-ctl tail -f