GitLab 依赖代理管理
- Tier: 免费版, 专业版, 旗舰版
- Offering: GitLab 私有化部署
您可以将 GitLab 用作依赖代理,用于缓存频繁访问的上游制品,包括容器镜像和软件包。
本文是管理文档。要了解如何使用依赖代理,请参阅:
GitLab 依赖代理:
- 默认启用。
- 可由管理员禁用。
禁用依赖代理
依赖代理默认启用。如果您是管理员,可以禁用它。要禁用依赖代理,请按照与您的 GitLab 安装类型相对应的说明进行操作。
-
编辑
/etc/gitlab/gitlab.rb并添加以下行:gitlab_rails['dependency_proxy_enabled'] = false -
保存文件并重新配置 GitLab以使更改生效。
安装完成后,更新全局 appConfig 以禁用依赖代理:
global:
appConfig:
dependencyProxy:
enabled: false
bucket: gitlab-dependency-proxy
connection:
secret:
key:更多信息,请参阅使用全局变量配置 Charts。
-
安装完成后,在
config/gitlab.yml中配置dependency_proxy部分。将enabled设置为false以禁用依赖代理:dependency_proxy: enabled: false -
重启 GitLab以使更改生效。
多节点 GitLab 安装
为每个 Web 节点和 Sidekiq 节点遵循 Linux 包安装的步骤。
启用依赖代理
依赖代理默认启用,但可由管理员禁用。要手动启用它,请遵循禁用依赖代理中的说明。
更改存储路径
默认情况下,依赖代理文件存储在本地,但您可以更改默认的本地位置,甚至使用对象存储。
更改本地存储路径
Linux 包安装的依赖代理文件存储在 /var/opt/gitlab/gitlab-rails/shared/dependency_proxy/ 下,而源码安装则存储在 shared/dependency_proxy/(相对于 Git 主目录)。
-
编辑
/etc/gitlab/gitlab.rb并添加以下行:gitlab_rails['dependency_proxy_storage_path'] = "/mnt/dependency_proxy" -
保存文件并重新配置 GitLab以使更改生效。
-
编辑
config/gitlab.yml中的dependency_proxy部分:dependency_proxy: enabled: true storage_path: shared/dependency_proxy -
重启 GitLab以使更改生效。
使用对象存储
您可以不依赖本地存储,而是使用统一对象存储设置。 本节介绍早期的配置格式。迁移步骤仍然适用。
-
编辑
/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'。 } -
保存文件并重新配置 GitLab以使更改生效。
-
编辑
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'。 -
重启 GitLab以使更改生效。
将本地依赖代理的 blobs 和 manifests 迁移到对象存储
配置对象存储后, 使用以下任务将现有的依赖代理 blobs 和 manifests 从本地存储迁移到远程存储。 该处理由后台工作进程完成,无需停机。
-
对于 Linux 包安装:
sudo gitlab-rake "gitlab:dependency_proxy:migrate" -
对于自编译安装:
RAILS_ENV=production sudo -u git -H bundle exec rake gitlab:dependency_proxy:migrate
您可以选择使用 PostgreSQL 控制台跟踪进度并验证所有依赖代理的 blobs 和 manifests 是否已成功迁移:
- 对于运行 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')是否包含每个查询中所有依赖代理 blobs 和 manifests 的计数:
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)默认过期时间以及 GitLab.com 上的过期时间为 15 分钟。
在代理后使用依赖代理
-
编辑
/etc/gitlab/gitlab.rb并添加以下行:gitlab_workhorse['env'] = { "http_proxy" => "http://USERNAME:[email protected]:8080", "https_proxy" => "http://USERNAME:[email protected]:8080" } -
保存文件并重新配置 GitLab以使更改生效。