管理极狐GitLab 依赖代理

极狐GitLab 可以用作各种常见包管理器的依赖代理。

本文是管理员文档。如果您想了解如何使用依赖代理,请参阅用户指南

极狐GitLab 依赖代理:

  • 默认开启。
  • 可由管理员关闭。
  • 需要启用 Puma Web 服务器。在 13.0 及更高版本中默认启用 Puma。

关闭依赖代理

默认情况下启用依赖代理。如果您是管理员,则可以关闭依赖代理。要关闭依赖代理,请按照与极狐GitLab 安装相对应的说明进行操作。

::Tabs

:::TabTitle Linux 软件包 (Omnibus)

  1. 编辑 /etc/gitlab/gitlab.rb 并添加以下行:

    gitlab_rails['dependency_proxy_enabled'] = false
    
  2. 保存文件并重新配置极狐GitLab,使更改生效。

:::TabTitle Helm chart (Kubernetes)

安装完成后,更新全局 appConfig 以关闭依赖代理:

global:
  appConfig:
    dependencyProxy:
      enabled: false
      bucket: gitlab-dependency-proxy
      connection: {}
       secret:
       key:

有关详细信息,请参阅使用 charts 全局配置

:::TabTitle 自编译(源)

  1. 安装完成后,配置 config/gitlab.yml 中的 dependency_proxy 部分。将 enabled 设置为 false 以关闭依赖代理:

    dependency_proxy:
      enabled: false
    
  2. 重新启动极狐GitLab,使更改生效。

::EndTabs

多节点极狐GitLab 安装

遵循每个 Web 和 Sidekiq 节点的 Linux 软件包安装的步骤。

打开依赖代理

依赖代理默认开启,但管理员可以关闭。要打开依赖代理,请按照关闭依赖代理中的说明进行操作,但将 enabled 字段设置为 true

更改存储路径

默认情况下,依赖代理文件存储在本地,但您可以更改默认本地位置,甚至使用对象存储。

更改本地存储路径

Linux 软件包安装的依赖代理文件存储在 /var/opt/gitlab/gitlab-rails/shared/dependency_proxy/ 下,源安装存储在 shared/dependency_proxy/ 下(相对于 Git 主目录)。

::Tabs

:::TabTitle Linux 软件包 (Omnibus)

  1. 编辑 /etc/gitlab/gitlab.rb 并添加以下行:

    gitlab_rails['dependency_proxy_storage_path'] = "/mnt/dependency_proxy"
    
  2. 保存文件并重新配置极狐GitLab,使更改生效。

:::TabTitle 自编译(源)

  1. 编辑 config/gitlab.yml 中的 dependency_proxy 部分:

    dependency_proxy:
      enabled: true
      storage_path: shared/dependency_proxy
    
  2. 重新启动极狐GitLab,使更改生效。

::EndTabs

使用对象存储

您可以使用对象存储来存储依赖代理的 blob,而不是依赖本地存储。

阅读有关在极狐GitLab 中使用对象存储的更多信息

note在 13.2 及更高版本中,我们建议使用合并对象存储设置。本节介绍早期的配置格式。

::Tabs

:::TabTitle Linux 软件包 (Omnibus)

  1. 编辑 /etc/gitlab/gitlab.rb 并添加以下行(必要时取消注释):

    gitlab_rails['dependency_proxy_enabled'] = true
    gitlab_rails['dependency_proxy_storage_path'] = "/var/opt/gitlab/gitlab-rails/shared/dependency_proxy"
    gitlab_rails['dependency_proxy_object_store_enabled'] = true
    gitlab_rails['dependency_proxy_object_store_remote_directory'] = "dependency_proxy" # The bucket name.
    gitlab_rails['dependency_proxy_object_store_proxy_download'] = false        # Passthrough all downloads via GitLab instead of using Redirects to Object Storage.
    gitlab_rails['dependency_proxy_object_store_connection'] = {
      ##
      ## If the provider is AWS S3, uncomment the following
      ##
      #'provider' => 'AWS',
      #'region' => 'eu-west-1',
      #'aws_access_key_id' => 'AWS_ACCESS_KEY_ID',
      #'aws_secret_access_key' => 'AWS_SECRET_ACCESS_KEY',
      ##
      ## If the provider is other than AWS (an S3-compatible one), uncomment the following
      ##
      #'host' => 's3.amazonaws.com',
      #'aws_signature_version' => 4             # For creation of signed URLs. Set to 2 if provider does not support v4.
      #'endpoint' => 'https://s3.amazonaws.com' # Useful for S3-compliant services such as DigitalOcean Spaces.
      #'path_style' => false                    # If true, use 'host/bucket_name/object' instead of 'bucket_name.host/object'.
    }
    
  2. 保存文件并重新配置极狐GitLab,使更改生效。

:::TabTitle 自编译(源)

  1. 编辑 config/gitlab.yml 中的 dependency_proxy 部分(必要时取消注释):

    dependency_proxy:
      enabled: true
      ##
      ## The location where build dependency_proxy are stored (default: shared/dependency_proxy).
      ##
      # storage_path: shared/dependency_proxy
      object_store:
        enabled: false
        remote_directory: dependency_proxy  # The bucket name.
        #  proxy_download: false     # Passthrough all downloads via GitLab instead of using Redirects to Object Storage.
        connection:
        ##
        ## If the provider is AWS S3, use the following
        ##
          provider: AWS
          region: us-east-1
          aws_access_key_id: AWS_ACCESS_KEY_ID
          aws_secret_access_key: AWS_SECRET_ACCESS_KEY
          ##
          ## If the provider is other than AWS (an S3-compatible one), comment out the previous 4 lines and use the following instead:
          ##
          #  host: 's3.amazonaws.com'             # default: s3.amazonaws.com.
          #  aws_signature_version: 4             # For creation of signed URLs. Set to 2 if provider does not support v4.
          #  endpoint: 'https://s3.amazonaws.com' # Useful for S3-compliant services such as DigitalOcean Spaces.
          #  path_style: false                    # If true, use 'host/bucket_name/object' instead of 'bucket_name.host/object'.
    
  2. 重新启动极狐GitLab,使更改生效。

::EndTabs

将本地依赖代理 blob 和清单迁移到对象存储

引入于 14.8 版本。

配置对象存储后,使用以下任务将现有的依赖代理 blob 和清单从本地存储迁移到远程存储。处理是在后台 worker 中完成的,不需要停机。

  • Linux 软件包安装:

    sudo gitlab-rake "gitlab:dependency_proxy:migrate"
    
  • 源安装:

    RAILS_ENV=production sudo -u git -H bundle exec rake gitlab:dependency_proxy:migrate
    

您可以选择跟踪进度并使用 PostgreSQL 控制台验证所有包是否已成功迁移:

  • Linux 软件包安装(14.1 及更早版本):sudo gitlab-rails dbconsole
  • Linux 软件包安装(14.2 及更高版本):sudo gitlab-rails dbconsole --database main
  • 自编译安装:sudo -u git -H psql -d gitlabhq_production

验证 objectstg(其中 file_store = '2')具有每个查询的所有依赖代理 blob 和清单的计数:

gitlabhq_production=# SELECT count(*) AS total, sum(case when file_store = '1' then 1 else 0 end) AS filesystem, sum(case when file_store = '2' then 1 else 0 end) AS objectstg FROM dependency_proxy_blobs;

total | filesystem | objectstg
------+------------+-----------
 22   |          0 |        22

gitlabhq_production=# SELECT count(*) AS total, sum(case when file_store = '1' then 1 else 0 end) AS filesystem, sum(case when file_store = '2' then 1 else 0 end) AS objectstg FROM dependency_proxy_manifests;

total | filesystem | objectstg
------+------------+-----------
 10   |          0 |        10

验证 dependency_proxy 文件夹中的磁盘上没有文件:

sudo find /var/opt/gitlab/gitlab-rails/shared/dependency_proxy -type f | grep -v tmp | wc -l

更改 JWT 过期时间

依赖代理遵循 Docker v2 令牌身份验证流程,向客户端发出 JWT 以用于拉取请求。令牌过期时间可使用应用程序设置 container_registry_token_expire_delay 进行配置。可以从 rails 控制台更改:

# update the JWT expiration to 30 minutes
ApplicationSetting.update(container_registry_token_expire_delay: 30)

默认过期时间为 15 分钟。

在代理后面使用依赖代理

  1. 编辑 /etc/gitlab/gitlab.rb 并添加以下行:

    gitlab_workhorse['env'] = {
     "http_proxy" => "http://USERNAME:PASSWORD@example.com:8080",
     "https_proxy" => "http://USERNAME:PASSWORD@example.com:8080"
    
  2. 保存文件并重新配置极狐GitLab,使更改生效。