GitLab 依存プロキシの管理
- GitLab Premium11.11で導入されました。
- 13.6でGitLab PremiumからGitLab Freeに移動しました。
GitLabは様々な一般的なパッケージマネージャの依存プロキシとして使用できます。
これは管理用のドキュメントです。依存プロキシの使い方を学びたい場合は、ユーザーガイドをご覧ください。
GitLab 依存プロキシ:
- デフォルトでオンになっています。
- 管理者がオフにすることもできます。
- Pumaウェブサーバーが有効になっている必要があります。GitLab 13.0以降ではPumaはデフォルトで有効になっています。
依存プロキシをオフにする
依存プロキシはデフォルトで有効になっています。管理者であれば、依存プロキシをオフにすることができます。依存プロキシをオフにするには、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:
詳細は、「グローバルを使用した Chart の設定」を参照してください。
-
インストールが完了したら、
config/gitlab.yml
のdependency_proxy
セクションを設定します。enabled
をfalse
に設定して、依存プロキシをオフにします:dependency_proxy: enabled: false
-
変更を有効にするためにGitLabを再起動してください。
複数ノードのGitLabインストール
各WebノードとSidekiqノードのLinuxパッケージインストールの手順に従ってください。
依存プロキシをオンにします。
依存プロキシはデフォルトでオンになっていますが、管理者がオフにすることもできます。依存プロキシをオンにするには、「依存プロキシをオフにする」の手順に従って、enabled
フィールドをtrue
に設定します。
ストレージパスの変更
デフォルトでは、依存プロキシのファイルはローカルに保存されますが、デフォルトのローカルの場所を変更したり、オブジェクトストレージを使用することもできます。
ローカルストレージのパスの変更
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を再起動してください。
オブジェクトストレージの使用
ローカルストレージに依存する代わりに、オブジェクトストレージを使用して依存プロキシのブロブを保存することができます。GitLab 13.2以降では、統合オブジェクトストレージの設定を使用する必要があります。このセクションでは、以前の設定形式について説明します。マイグレーション手順はまだ適用されます。
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" # 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 を再設定してください。
-
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を再起動してください。
ローカルの依存プロキシ blob とマニフェストをオブジェクトストレージにマイグレーションします。
GitLab 14.8で導入されました。
オブジェクトストレージを設定した後、以下のタスクを使用して既存の依存プロキシ blob とマニフェストをローカルストレージからリモートストレージにマイグレーションします。処理はバックグラウンドワーカーで行われ、ダウンタイムは必要ありません。
-
Linuxパッケージ・インストールの場合:
sudo gitlab-rake "gitlab:dependency_proxy:migrate"
-
セルフコンパイルによるインストールの場合:
RAILS_ENV=production sudo -u git -H bundle exec rake gitlab:dependency_proxy:migrate
オプションで、PostgreSQLコンソールを使用して進捗を追跡し、すべての依存プロキシBLOBとマニフェストが正常にマイグレーションされたことを確認することができます:
-
sudo gitlab-rails dbconsole
バージョン14.1以前を実行しているLinuxパッケージインストールの場合。 -
sudo gitlab-rails dbconsole --database main
バージョン 14.2 以降を実行している Linux パッケージインストール用。 -
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)
デフォルトの有効期限とGitLab.comでの有効期限は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 を再設定してください。