{{< 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:

  1. 可选。在更改外部 URL 之前,确定您是否之前定义了自定义 主页 URL注销后路径。这两个设置可能会在配置新的外部 URL 后导致意外重定向。如果您定义了任何 URL,请完全删除它们。

  2. 编辑 /etc/gitlab/gitlab.rb 并将 external_url 更改为您偏好的 URL:

    external_url "http://gitlab.example.com"
    

    或者,您可以使用服务器的 IP 地址:

    external_url "http://10.0.0.1"
    

    在前面的示例中,我们使用普通 HTTP。如果您想使用 HTTPS,请参阅如何配置 SSL

  3. 重新配置极狐GitLab:

    sudo gitlab-ctl reconfigure
    
  4. 可选。如果您已经使用极狐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:

  1. /etc/gitlab/gitlab.rb 中设置 external_url

    external_url "https://example.com/gitlab"
    

    在此示例中,极狐GitLab 服务的相对 URL 是 /gitlab。根据您的喜好进行更改。

  2. 重新配置极狐GitLab:

    sudo gitlab-ctl reconfigure
    

如果您有任何问题,请参阅故障排除部分

从非 root 用户加载外部配置文件

Linux 软件包安装从 /etc/gitlab/gitlab.rb 文件加载所有配置。该文件具有严格的文件权限,并由 root 用户拥有。严格权限和所有权的原因是 /etc/gitlab/gitlab.rbgitlab-ctl reconfigure 期间由 root 用户作为 Ruby 代码执行。这意味着具有 /etc/gitlab/gitlab.rb 写入访问权限的用户可以添加由 root 作为代码执行的配置。

在某些组织中,允许访问配置文件,但不是以 root 用户身份。您可以通过指定文件的路径将外部配置文件包含在 /etc/gitlab/gitlab.rb 中:

  1. 编辑 /etc/gitlab/gitlab.rb

    from_file "/home/admin/external_gitlab.rb"
    
  2. 重新配置极狐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

要更改目录的位置,

  1. 编辑 /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',
        },
      ],
    }
    

    目标目录及其任何子路径不能是符号链接。

  2. 重新配置极狐GitLab:

    sudo gitlab-ctl reconfigure
    
  3. 可选。如果您已经在 /var/opt/gitlab/git-data 中有现有的 Git 仓库,您可以将它们移动到新位置:

    1. 在移动仓库时,阻止用户写入仓库:

      sudo gitlab-ctl stop
      
    2. 将仓库同步到新位置。注意 repositories 后面没有斜杠,但 git-data 后面有一个斜杠:

      sudo rsync -av --delete /var/opt/gitlab/git-data/repositories /mnt/nas/git-data/
      
    3. 重新配置以启动必要的进程并修复任何错误权限:

      sudo gitlab-ctl reconfigure
      
    4. /mnt/nas/git-data/ 中仔细检查目录布局。预期输出应该是 repositories

      sudo ls /mnt/nas/git-data/
      
    5. 启动极狐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 软件包安装上更改用户和群组:

  1. 编辑 /etc/gitlab/gitlab.rb

    user['username'] = "gitlab"
    user['group'] = "gitlab"
    
  2. 重新配置极狐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 等创建用户。要指定这些用户的数字标识符:

  1. 写下旧的用户和群组标识符,因为您可能以后需要它们:

    sudo cat /etc/passwd
    
  2. 编辑 /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
    
  3. 停止,重新配置,然后启动极狐GitLab:

    sudo gitlab-ctl stop
    sudo gitlab-ctl reconfigure
    sudo gitlab-ctl start
    
  4. 可选。如果您正在更改 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

要禁用用户和群组账户管理:

  1. 编辑 /etc/gitlab/gitlab.rb

    manage_accounts['enable'] = false
    
  2. 可选。您还可以使用不同的用户/群组名称,但需要指定用户/群组详情:

    # 极狐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'
    
  3. 重新配置极狐GitLab:

    sudo gitlab-ctl reconfigure
    

移动用户的家目录

对于极狐GitLab 用户,我们建议将家目录设置在本地磁盘上,而不是在共享存储如 NFS 上,以获得更好的性能。将其设置在 NFS 中时,Git 请求必须进行另一个网络请求来读取 Git 配置,这增加了 Git 操作的延迟。

要移动现有的家目录,需要停止极狐GitLab 服务并需要一些停机时间:

  1. 停止极狐GitLab:

    sudo gitlab-ctl stop
    
  2. 停止 runit 服务器:

    sudo systemctl stop gitlab-runsvdir
    
  3. 更改家目录:

    sudo usermod -d /path/to/home <username>
    

    如果您有现有数据,您需要手动复制/同步到新位置:

  4. 编辑 /etc/gitlab/gitlab.rb

    user['home'] = "/var/opt/custom-gitlab"
    
  5. 启动 runit 服务器:

    sudo systemctl start gitlab-runsvdir
    
  6. 重新配置极狐GitLab:

    sudo gitlab-ctl reconfigure
    

禁用存储目录管理

Linux 软件包负责创建所有必要的目录,具有正确的所有权和权限,并保持此更新。

一些目录保存大量数据,因此在某些设置中,这些目录很可能挂载在 NFS(或其他)共享上。

某些类型的挂载不允许 root 用户自动创建目录(初始设置的默认用户),例如在共享上启用了 root_squash 的 NFS。为了应对这种情况,Linux 软件包尝试使用目录的所有者用户创建这些目录。

禁用 /etc/gitlab 目录管理

如果您已挂载 /etc/gitlab 目录,可以关闭该目录的管理:

  1. 编辑 /etc/gitlab/gitlab.rb

    manage_storage_directories['manage_etc'] = false
    
  2. 重新配置极狐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 保存授权密钥

要禁用存储目录的管理:

  1. 编辑 /etc/gitlab/gitlab.rb

    manage_storage_directories['enable'] = false
    
  2. 重新配置极狐GitLab:

    sudo gitlab-ctl reconfigure
    

仅在给定文件系统挂载后启动 Linux 软件包安装服务

如果您想防止 Linux 软件包安装服务(NGINX、Redis、Puma 等)在给定文件系统挂载之前启动,可以设置 high_availability['mountpoint'] 设置:

  1. 编辑 /etc/gitlab/gitlab.rb

    # 等待 /var/opt/gitlab 挂载
    high_availability['mountpoint'] = '/var/opt/gitlab'
    
  2. 重新配置极狐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 指标:

  1. 编辑 /etc/gitlab/gitlab.rb 以创建 tmpfs 挂载(注意配置中没有 =):

    runtime_dir '/path/to/tmpfs'
    
  2. 重新配置极狐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 和容器注册表认证禁令:

  1. 编辑 /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)
    }
    
  2. 重新配置极狐GitLab:

    sudo gitlab-ctl reconfigure
    

禁用安装期间的自动缓存清理

如果您有一个大型极狐GitLab 安装,您可能不想运行 rake cache:clear 任务,因为它可能需要很长时间才能完成。默认情况下,在重新配置期间自动运行缓存清理任务。

要禁用安装期间的自动缓存清理:

  1. 编辑 /etc/gitlab/gitlab.rb

    # 这是一个高级功能,用于大型极狐GitLab 部署,其中加载整个 RAILS 环境需要很长时间。
    gitlab_rails['rake_cache_clear'] = false
    
  2. 重新配置极狐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:

  1. 在 Sentry 中创建一个项目。
  2. 找到您创建的项目的数据源名称 (DSN)。
  3. 编辑 /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 环境中的错误和问题,例如实验室、开发、测试和生产。

  4. 可选。要在从特定服务器发送的每个事件上设置自定义 Sentry 标签,可以设置环境变量 GITLAB_SENTRY_EXTRA_TAGS。此变量是一个 JSON 编码的哈希,表示应传递给 Sentry 的任何标签,以便从该服务器发送的所有异常。

    例如,设置:

    gitlab_rails['env'] = {
      'GITLAB_SENTRY_EXTRA_TAGS' => '{"stage": "main"}'
    }
    

    将添加 stage 标签,值为 main

  5. 重新配置极狐GitLab:

    sudo gitlab-ctl reconfigure
    

设置内容分发网络 URL

使用 gitlab_rails['cdn_host'] 为静态资源提供内容分发网络 (CDN) 或资源主机。这会配置一个 Rails 资源主机。

要设置 CDN/资源主机:

  1. 编辑 /etc/gitlab/gitlab.rb

    gitlab_rails['cdn_host'] = 'https://mycdnsubdomain.fictional-cdn.com'
    
  2. 重新配置极狐GitLab:

    sudo gitlab-ctl reconfigure
    

设置内容安全策略

设置内容安全策略 (CSP) 可以帮助阻止 JavaScript 跨站脚本 (XSS) 攻击。

{{< alert type=”note” >}}

不正确配置 CSP 规则可能会导致极狐GitLab 无法正常工作。在实施策略之前,您可能还需要将 report_only 更改为 true 来测试配置。

{{< /alert >}}

要添加 CSP:

  1. 编辑 /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

  2. 重新配置极狐GitLab:

    sudo gitlab-ctl reconfigure
    

在安装时设置初始根密码

可以在安装时设置管理员用户 root 的初始密码。有关更多信息,请参阅设置初始密码

设置允许的主机以防止主机头攻击

为了防止极狐GitLab 接受除预期之外的主机头:

  1. 编辑 /etc/gitlab/gitlab.rb

    gitlab_rails['allowed_hosts'] = ['gitlab.example.com']
    
  2. 重新配置极狐GitLab:

    sudo gitlab-ctl reconfigure
    

没有已知的安全问题是由于未配置 allowed_hosts 而导致极狐GitLab 出现的,但建议进行深度防御,以防止潜在的 HTTP 主机头攻击。

如果使用自定义外部代理,例如 Apache,可能需要添加本地主机地址或名称(localhost127.0.0.1)。您应该向外部代理添加过滤器,以减轻通过代理传递到 workhorse 的潜在 HTTP 主机头攻击。

gitlab_rails['allowed_hosts'] = ['gitlab.example.com', '127.0.0.1', 'localhost']

要更改生成的 Web 会话 Cookie 值的前缀:

  1. 编辑 /etc/gitlab/gitlab.rb

    gitlab_rails['session_store_session_cookie_token_prefix'] = 'custom_prefix_'
    
  2. 重新配置极狐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.ymlredis.ymlredis.<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。组件:

  1. 执行提供的脚本。
  2. 用脚本发出的值替换用户和默认配置文件设置的值。

向 Redis 服务器和客户端组件提供 Redis 密码

作为示例,您可以使用下面的脚本和 gitlab.rb 片段来指定密码给 Redis 服务器和需要连接到 Redis 的组件。

{{< alert type=”note” >}}

在指定 Redis 服务器的密码时,此方法仅能避免在 gitlab.rb 文件中出现明文密码。密码将以明文形式出现在 Redis 服务器配置文件中,该文件位于 /var/opt/gitlab/redis/redis.conf

{{< /alert >}}

  1. 将下面的脚本保存为 /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
    
  2. 确保上面创建的脚本是可执行的:

    chmod +x /opt/generate-redis-conf
    
  3. 将以下代码片段添加到 /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'
    
  4. 运行 sudo gitlab-ctl reconfigure

向极狐GitLab Rails 提供 PostgreSQL 用户密码

作为示例,您可以使用下面的脚本和配置来提供极狐GitLab Rails 应用于连接到 PostgreSQL 服务器的密码。

  1. 将以下脚本保存为 /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
     }
    })
    
  2. 确保上面创建的脚本是可执行的:

    chmod +x /opt/generate-db-config
    
  3. 将以下代码片段添加到 /etc/gitlab/gitlab.rb

    gitlab_rails['db_extra_config_command'] = '/opt/generate-db-config'
    
  4. 运行 sudo gitlab-ctl reconfigure

相关主题

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