{{< details >}}

  • Tier: 基础版,专业版,旗舰版
  • Offering: 私有化部署

{{< /details >}}

{{< history >}}

  • 引入于极狐GitLab 11.11 中的专业版。
  • 在极狐GitLab 13.6 中从专业版更改为基础版。

{{< /history >}}

极狐GitLab 可以作为您频繁访问的上游镜像的依赖代理使用。

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

极狐GitLab 依赖代理:

  • 默认开启。
  • 可以由管理员关闭。

关闭依赖代理

依赖代理默认是启用的。如果您是管理员,您可以关闭依赖代理。要关闭依赖代理,请根据您的极狐GitLab 安装版本遵循相应的说明。

{{< tabs >}}

{{< tab title=”Linux package (Omnibus)” >}}

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

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

{{< /tab >}}

{{< tab title=”Helm chart (Kubernetes)” >}}

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

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

有关更多信息,请参阅使用 Globals 配置 Charts

{{< /tab >}}

{{< tab title=”Self-compiled (source)” >}}

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

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

{{< /tab >}}

{{< /tabs >}}

多节点极狐GitLab 安装

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

打开依赖代理

依赖代理默认是开启的,但可以由管理员关闭。要手动关闭它,请按照关闭依赖代理中的说明进行操作。

更改存储路径

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

更改本地存储路径

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

{{< tabs >}}

{{< tab title=”Linux package (Omnibus)” >}}

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

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

{{< /tab >}}

{{< tab title=”Self-compiled (source)” >}}

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

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

{{< /tab >}}

{{< /tabs >}}

使用对象存储

您可以使用统一对象存储设置而不是依赖本地存储。此部分描述了早期的配置格式。迁移步骤仍然适用

阅读更多关于在极狐GitLab 中使用对象存储

{{< tabs >}}

{{< tab title=”Linux package (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" # 存储桶名称。
    gitlab_rails['dependency_proxy_object_store_proxy_download'] = false        # 通过极狐GitLab 而不是使用对象存储的重定向传输所有下载。
    gitlab_rails['dependency_proxy_object_store_connection'] = {
      ##
      ## 如果提供者是 AWS S3,请取消以下注释
      ##
      #'provider' => 'AWS',
      #'region' => 'eu-west-1',
      #'aws_access_key_id' => 'AWS_ACCESS_KEY_ID',
      #'aws_secret_access_key' => 'AWS_SECRET_ACCESS_KEY',
      ##
      ## 如果提供者不是 AWS(兼容 S3 的),请取消以下注释
      ##
      #'host' => 's3.amazonaws.com',
      #'aws_signature_version' => 4             # 用于创建签名的 URL。如果提供者不支持 v4,请设置为 2。
      #'endpoint' => 'https://s3.amazonaws.com' # 适用于 S3 兼容服务,例如 DigitalOcean Spaces。
      #'path_style' => false                    # 如果为 true,使用 'host/bucket_name/object' 而不是 'bucket_name.host/object'。
    }
    
  2. 保存文件并重新配置极狐GitLab,以使更改生效。

{{< /tab >}}

{{< tab title=”Self-compiled (source)” >}}

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

    dependency_proxy:
      enabled: true
      ##
      ## 构建依赖代理的存储位置(默认:shared/dependency_proxy)。
      ##
      # storage_path: shared/dependency_proxy
      object_store:
        enabled: false
        remote_directory: dependency_proxy  # 存储桶名称。
        #  proxy_download: false     # 通过极狐GitLab 而不是使用对象存储的重定向传输所有下载。
        connection:
        ##
        ## 如果提供者是 AWS S3,请使用以下配置
        ##
          provider: AWS
          region: us-east-1
          aws_access_key_id: AWS_ACCESS_KEY_ID
          aws_secret_access_key: AWS_SECRET_ACCESS_KEY
          ##
          ## 如果提供者不是 AWS(兼容 S3 的),请注释掉前面的 4 行并使用以下配置:
          ##
          #  host: 's3.amazonaws.com'             # 默认:s3.amazonaws.com。
          #  aws_signature_version: 4             # 用于创建签名的 URL。如果提供者不支持 v4,请设置为 2。
          #  endpoint: 'https://s3.amazonaws.com' # 适用于 S3 兼容服务,例如 DigitalOcean Spaces。
          #  path_style: false                    # 如果为 true,使用 'host/bucket_name/object' 而不是 'bucket_name.host/object'。
    
  2. 重启极狐GitLab 以使更改生效。

{{< /tab >}}

{{< /tabs >}}

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

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

  • 对于 Linux 软件包安装:

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

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

您可以选择跟踪进度并验证所有依赖代理 blob 和清单是否成功迁移,使用PostgreSQL 控制台

  • 对于运行版本 14.1 及更早版本的 Linux 软件包安装,使用 sudo gitlab-rails dbconsole
  • 对于运行版本 14.2 及更高版本的 Linux 软件包安装,使用 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 控制台更改:

# 将 JWT 过期时间更新为 30 分钟
ApplicationSetting.update(container_registry_token_expire_delay: 30)

默认过期时间和 JihuLab.com 上的过期时间是 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,以使更改生效。