--- stage: Package group: Package Registry info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments --- # GitLab Package Registry administration **(FREE SELF)** To use GitLab as a private repository for a variety of common package managers, use the Package Registry. You can build and publish packages, which can be consumed as dependencies in downstream projects. ## Supported formats The Package Registry supports the following formats: | Package type | GitLab version | |-------------------------------------------------------------------|----------------| | [Composer](../../user/packages/composer_repository/index.md) | 13.2+ | | [Conan](../../user/packages/conan_repository/index.md) | 12.6+ | | [Go](../../user/packages/go_proxy/index.md) | 13.1+ | | [Maven](../../user/packages/maven_repository/index.md) | 11.3+ | | [npm](../../user/packages/npm_registry/index.md) | 11.7+ | | [NuGet](../../user/packages/nuget_repository/index.md) | 12.8+ | | [PyPI](../../user/packages/pypi_repository/index.md) | 12.10+ | | [Generic packages](../../user/packages/generic_packages/index.md) | 13.5+ | | [Helm Charts](../../user/packages/helm_repository/index.md) | 14.1+ | ## Accepting contributions The below table lists formats that are not supported, but are accepting Community contributions for. Consider contributing to GitLab. This [development documentation](../../development/packages/index.md) guides you through the process. | Format | Status | | ------ | ------ | | Chef | [#36889](https://gitlab.com/gitlab-org/gitlab/-/issues/36889) | | CocoaPods | [#36890](https://gitlab.com/gitlab-org/gitlab/-/issues/36890) | | Conda | [#36891](https://gitlab.com/gitlab-org/gitlab/-/issues/36891) | | CRAN | [#36892](https://gitlab.com/gitlab-org/gitlab/-/issues/36892) | | Debian | [Draft: Merge Request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/50438) | | Opkg | [#36894](https://gitlab.com/gitlab-org/gitlab/-/issues/36894) | | P2 | [#36895](https://gitlab.com/gitlab-org/gitlab/-/issues/36895) | | Puppet | [#36897](https://gitlab.com/gitlab-org/gitlab/-/issues/36897) | | RPM | [#5932](https://gitlab.com/gitlab-org/gitlab/-/issues/5932) | | RubyGems | [#803](https://gitlab.com/gitlab-org/gitlab/-/issues/803) | | SBT | [#36898](https://gitlab.com/gitlab-org/gitlab/-/issues/36898) | | Terraform | [Draft: Merge Request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/18834) | | Vagrant | [#36899](https://gitlab.com/gitlab-org/gitlab/-/issues/36899) | ## Rate limits When downloading packages as dependencies in downstream projects, many requests are made through the Packages API. You may therefore reach enforced user and IP rate limits. To address this issue, you can define specific rate limits for the Packages API. For more details, see [Package Registry Rate Limits](../../user/admin_area/settings/package_registry_rate_limits.md). ## Change the storage path By default, the packages are stored locally, but you can change the default local location or even use object storage. ### Change the local storage path By default, the packages are stored in a local path, relative to the GitLab installation: - Linux package (Omnibus): `/var/opt/gitlab/gitlab-rails/shared/packages/` - Self-compiled (source): `/home/git/gitlab/shared/packages/` To change the local storage path: ::Tabs :::TabTitle Linux package (Omnibus) 1. Edit `/etc/gitlab/gitlab.rb` and add the following line: ```ruby gitlab_rails['packages_storage_path'] = "/mnt/packages" ``` 1. Save the file and reconfigure GitLab: ```shell sudo gitlab-ctl reconfigure ``` :::TabTitle Self-compiled (source) 1. Edit `/home/git/gitlab/config/gitlab.yml`: ```yaml production: &base packages: enabled: true storage_path: /mnt/packages ``` 1. Save the file and restart GitLab: ```shell # For systems running systemd sudo systemctl restart gitlab.target # For systems running SysV init sudo service gitlab restart ``` ::EndTabs Docker and Kubernetes do not use local storage. - For the Helm chart (Kubernetes): Use object storage instead. - For Docker: The `/var/opt/gitlab/` directory is already mounted in a directory on the host. There's no need to change the local storage path inside the container. ### Use object storage Instead of relying on the local storage, you can use an object storage to store packages. For more information, see how to use the [consolidated object storage settings](../object_storage.md#consolidated-object-storage-configuration). ### Migrate local packages to object storage After [configuring the object storage](#use-object-storage), use the following task to migrate existing packages from the local storage to the remote storage. The processing is done in a background worker and requires **no downtime**. 1. Migrate the packages. ::Tabs :::TabTitle Linux package (Omnibus) ```shell sudo gitlab-rake "gitlab:packages:migrate" ``` :::TabTitle Self-compiled (source) ```shell RAILS_ENV=production sudo -u git -H bundle exec rake gitlab:packages:migrate ``` ::EndTabs 1. Track the progress and verify that all packages migrated successfully using the PostgreSQL console. ::Tabs :::TabTitle Linux package (Omnibus) 14.1 and earlier ```shell sudo gitlab-rails dbconsole ``` :::TabTitle Linux package (Omnibus) 14.2 and later ```shell sudo gitlab-rails dbconsole --database main ``` :::TabTitle Self-compiled (source) ```shell RAILS_ENV=production sudo -u git -H psql -d gitlabhq_production ``` ::EndTabs 1. Verify that all packages migrated to object storage with the following SQL query. The number of `objectstg` should be the same as `total`: ```shell 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 packages_package_files; total | filesystem | objectstg ------+------------+----------- 34 | 0 | 34 ``` 1. Finally, verify that there are no files on disk in the `packages` directory: ::Tabs :::TabTitle Linux package (Omnibus) ```shell sudo find /var/opt/gitlab/gitlab-rails/shared/packages -type f | grep -v tmp | wc -l ``` :::TabTitle Self-compiled (source) ```shell sudo -u git find /home/git/gitlab/shared/packages -type f | grep -v tmp | wc -l ``` ::EndTabs