极狐GitLab 软件包仓库管理
- Tier: 基础版, 专业版, 旗舰版
- Offering: 私有化部署
要使用极狐 GitLab 作为各种常见软件包管理器的私有仓库,请使用软件包注册表。您可以构建和发布软件包,这些软件包可以在下游项目中作为依赖项使用。
支持的格式
软件包注册表支持以下格式:
软件包类型 | 极狐 GitLab 版本 |
---|---|
Composer | 13.2+ |
Conan | 12.6+ |
Go | 13.1+ |
Maven | 11.3+ |
npm | 11.7+ |
NuGet | 12.8+ |
PyPI | 12.10+ |
通用软件包 | 13.5+ |
Helm Charts | 14.1+ |
软件包注册表也用于存储模型注册数据。
速率限制
在下游项目中下载软件包作为依赖项时,许多请求是通过软件包 API 发出的。因此,您可能会达到强制用户和 IP 的速率限制。为解决此问题,您可以定义软件包 API 的具体速率限制。有关更多详情,请参阅软件包注册表速率限制。
启用或禁用软件包注册表
软件包注册表默认启用。要禁用它:
-
编辑 /etc/gitlab/gitlab.rb:
ruby# Change to true to enable packages - enabled by default if not defined gitlab_rails['packages_enabled'] = false
-
保存文件并重新配置极狐 GitLab:
shellsudo gitlab-ctl reconfigure
更改存储路径
默认情况下,软件包存储在本地,但您可以更改默认本地位置,甚至可以使用对象存储。
更改本地存储路径
默认情况下,软件包存储在与极狐 GitLab 安装相关的本地路径中:
- Linux package (Omnibus): /var/opt/gitlab/gitlab-rails/shared/packages/
- Self-compiled (source): /home/git/gitlab/shared/packages/
要更改本地存储路径:
-
编辑 /etc/gitlab/gitlab.rb 并添加以下行:
rubygitlab_rails['packages_storage_path'] = "/mnt/packages"
-
保存文件并重新配置极狐 GitLab:
shellsudo gitlab-ctl reconfigure
如果您已经在旧存储路径中存储了软件包,请将所有内容从旧位置移动到新位置,以确保现有软件包保持可访问:
shellmv /var/opt/gitlab/gitlab-rails/shared/packages/* /mnt/packages/
Docker 和 Kubernetes 不使用本地存储。
- 对于 Helm chart (Kubernetes): 请改用对象存储。
- 对于 Docker: /var/opt/gitlab/ 目录已经挂载在主机上的一个目录中。无需更改容器内的本地存储路径。
使用对象存储
您可以使用对象存储来存储软件包,而不是依赖于本地存储。
有关更多信息,请参阅如何使用合并对象存储设置。
将本地软件包迁移到对象存储
在配置对象存储后,使用以下任务将现有软件包从本地存储迁移到远程存储。该处理在后台工作者中进行,并且无需停机。
-
迁移软件包。
shellsudo gitlab-rake "gitlab:packages:migrate"
shellRAILS_ENV=production sudo -u git -H bundle exec rake gitlab:packages:migrate
-
通过 PostgreSQL 控制台跟踪进度并验证所有软件包是否成功迁移。
shellsudo gitlab-rails dbconsole
shellsudo gitlab-rails dbconsole --database main
shellRAILS_ENV=production sudo -u git -H psql -d gitlabhq_production
-
使用以下 SQL 查询验证所有软件包是否迁移到对象存储。objectstg 的数量应与 total 相同:
shellgitlabhq_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 packages_package_files; total | filesystem | objectstg ------+------------+----------- 34 | 0 | 34
-
最后,验证 packages 目录中磁盘上没有文件:
shellsudo find /var/opt/gitlab/gitlab-rails/shared/packages -type f | grep -v tmp | wc -l
shellsudo -u git find /home/git/gitlab/shared/packages -type f | grep -v tmp | wc -l