极狐GitLab Linux 软件包的配置选项

要配置极狐GitLab,请在 /etc/gitlab/gitlab.rb 文件中设置相关选项。

gitlab.rb.template 包含可用选项的完整列表。新安装默认具有 /etc/gitlab/gitlab.rb 中列出的模板的所有选项。

note 编辑 /etc/gitlab/gitlab.rb 时提供的示例可能并不总是反映实例的默认设置。

配置外部 URL

要向您的用户显示正确的仓库克隆链接,您必须向极狐GitLab 提供您的用户用来访问仓库的 URL。 您可以使用服务器的 IP,但首选完全限定域名 (FQDN)。有关在私有化部署实例中使用 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-jh

配置相对 URL

虽然我们建议在自己的(子)域名下安装极狐GitLab,但有时这是不可能的。在这种情况下,极狐GitLab 也可以安装在相对 URL 下,例如,https://example.com/gitlab

通过更改 URL,所有远端 URL 也会更改,因此您必须在指向极狐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 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 父目录的位置:

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

  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,请记住还包括每个 Git 数据目录的 gitaly_address

更改 Git 用户/群组的名称

note 我们不建议更改现有安装的用户或群组,因为它可能会导致不可预知的副作用。

默认情况下,Linux 软件包安装使用用户名 git 进行极狐GitLab Shell 登录、Git 数据本身的所有权以及 Web 界面上的 SSH URL 生成。 同样,git 群组用于 Git 数据的群组所有权。

要更改用户和群组:

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

    user['username'] = "gitlab"
    user['group'] = "gitlab"
    
  2. 重新配置极狐GitLab:

    sudo gitlab-ctl reconfigure
    

如果您要更改现有安装的用户名,则重新配置运行不会更改嵌套目录的所有权,因此您必须手动执行此操作。

至少,您必须更改 repositoriesuploads 目录的所有权:

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
  1. 编辑 /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
    
  2. 停止、重新配置以及重启极狐GitLab:

    sudo gitlab-ctl stop
    sudo gitlab-ctl reconfigure
    sudo gitlab-ctl start
    
  3. 可选的。 如果您要更改 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

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

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

    sudo gitlab-ctl reconfigure
    

移动用户的主目录

对于极狐GitLab 用户,建议将 home 目录设置在本地磁盘(非 NFS)中以获得更好的性能。在 NFS 中设置时,Git 请求将需要发出另一个网络请求来读取 Git 配置,并且会增加 Git 操作的延迟。

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

  1. 停止极狐GitLab:

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

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

    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 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 保存授权密钥

要禁用存储目录的管理:

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

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

    sudo gitlab-ctl reconfigure
    

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

如果您想在挂载给定文件系统之前阻止 Linux 软件包安装服务(NGINX、Redis、Puma 等)启动:

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

    # wait for /var/opt/gitlab to be mounted
    high_availability['mountpoint'] = '/var/opt/gitlab'
    
  2. 重新配置极狐GitLab:

    sudo gitlab-ctl reconfigure
    
    note 如果挂载点不存在,极狐GitLab 重新配置会失败。

配置运行时目录

启用 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 地址被加入到拒绝列表之前,失败请求可以在多少秒内计算对该 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, # 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
    }
    
  2. 重新配置极狐GitLab:

    sudo gitlab-ctl reconfigure
    

在安装过程中禁用自动缓存清理

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

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

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

    sudo gitlab-ctl reconfigure
    

使用 Sentry 进行错误报告和记录

caution 从极狐GitLab 17.0 开始,只支持 21.5.0 以上版本的 Sentry。如果您使用的 Sentry 实例的版本比 21.5.0 老,您需要升级 Sentry 以便能够继续从您的极狐GitLab 环境收集错误信息。

Sentry 是一个错误报告和日志记录工具,可用作 SaaS 或内部部署。它是开源的,您可以浏览它的源代码仓库

配置 Sentry:

  1. 在 Sentry 中创建一个项目。
  2. 在您创建的项目中找到数据源名称(Data Source Name,即 DSN)。
  3. 编辑 /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、生产)跟踪错误和问题。

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

    对于实例,设置:

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

    将添加值为 mainstage 标签。

  5. 重新配置极狐GitLab:

    sudo gitlab-ctl reconfigure
    

设置内容交付网络(CDN) URL

使用 gitlab_rails['cdn_host'] 为内容交付网络 (CDN) 或 asset 主机,提供静态 asset,将会配置一个 Rails asset 主机

设置 CDN/asset 主机:

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

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

    sudo gitlab-ctl reconfigure
    

设置 Content Security Policy

设置内容安全策略 (CSP) 可以帮助阻止 JavaScript 跨站点脚本 (XSS) 攻击。有关更多详细信息,请参阅关于 CSP 的 Mozilla 文档

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

添加 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 密码

管理员用户 root 的初始密码可以在安装时进行设置。详情请参见设置初始密码

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

为了防止极狐GitLab 接受与预期不同的主机头:

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

    gitlab_rails['allowed_hosts'] = ['gitlab.example.com']
    
  2. 重新配置极狐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']

如果要修改网页会话 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 应用程序所用的 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)。组件:

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

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

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

note 当为 Redis 服务器指定密码时,这种方法只是让用户避免了在 gitlab.rb 文件中拥有明文密码。密码最终将以明文形式出现在位于 /var/opt/gitlab/redis/redis.conf 的 Redis 服务器配置文件中。
  1. 将下面的内容保存为 /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
    
  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 # Change the command inside backticks to fetch DB password
    
    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

故障排查

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