管理极狐GitLab 依赖代理
极狐GitLab 可以用作各种常见包管理器的依赖代理。
本文是管理员文档。如果您想了解如何使用依赖代理,请参阅用户指南。
极狐GitLab 依赖代理:
- 默认开启。
- 可由管理员关闭。
- 需要启用 Puma Web 服务器。在 13.0 及更高版本中默认启用 Puma。
关闭依赖代理
默认情况下启用依赖代理。如果您是管理员,则可以关闭依赖代理。要关闭依赖代理,请按照与极狐GitLab 安装相对应的说明进行操作。
::Tabs
:::TabTitle Linux 软件包 (Omnibus)
-
编辑
/etc/gitlab/gitlab.rb
并添加以下行:gitlab_rails['dependency_proxy_enabled'] = false
-
保存文件并重新配置极狐GitLab,使更改生效。
:::TabTitle Helm chart (Kubernetes)
安装完成后,更新全局 appConfig
以关闭依赖代理:
global:
appConfig:
dependencyProxy:
enabled: false
bucket: gitlab-dependency-proxy
connection: {}
secret:
key:
有关详细信息,请参阅使用 charts 全局配置。
:::TabTitle 自编译(源)
-
安装完成后,配置
config/gitlab.yml
中的dependency_proxy
部分。将enabled
设置为false
以关闭依赖代理:dependency_proxy: enabled: false
-
重新启动极狐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)
-
编辑
/etc/gitlab/gitlab.rb
并添加以下行:gitlab_rails['dependency_proxy_storage_path'] = "/mnt/dependency_proxy"
-
保存文件并重新配置极狐GitLab,使更改生效。
:::TabTitle 自编译(源)
-
编辑
config/gitlab.yml
中的dependency_proxy
部分:dependency_proxy: enabled: true storage_path: shared/dependency_proxy
-
重新启动极狐GitLab,使更改生效。
::EndTabs
使用对象存储
您可以使用对象存储来存储依赖代理的 blob,而不是依赖本地存储。
::Tabs
:::TabTitle Linux 软件包 (Omnibus)
-
编辑
/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'. }
-
保存文件并重新配置极狐GitLab,使更改生效。
:::TabTitle 自编译(源)
-
编辑
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'.
-
重新启动极狐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 分钟。
在代理后面使用依赖代理
-
编辑
/etc/gitlab/gitlab.rb
并添加以下行:gitlab_workhorse['env'] = { "http_proxy" => "http://USERNAME:PASSWORD@example.com:8080", "https_proxy" => "http://USERNAME:PASSWORD@example.com:8080"
-
保存文件并重新配置极狐GitLab,使更改生效。