GitLab 依存プロキシの管理

GitLabは様々な一般的なパッケージマネージャの依存プロキシとして使用できます。

これは管理用のドキュメントです。依存プロキシの使い方を学びたい場合は、ユーザーガイドをご覧ください。

GitLab 依存プロキシ:

  • デフォルトでオンになっています。
  • 管理者がオフにすることもできます。
  • Pumaウェブサーバーが有効になっている必要があります。GitLab 13.0以降ではPumaはデフォルトで有効になっています。

依存プロキシをオフにする

依存プロキシはデフォルトで有効になっています。管理者であれば、依存プロキシをオフにすることができます。依存プロキシをオフにするには、GitLab のインストールに対応する手順に従ってください。

Linux package (Omnibus)
  1. /etc/gitlab/gitlab.rb を編集し、以下の行を追加します:

    gitlab_rails['dependency_proxy_enabled'] = false
    
  2. ファイルを保存し、変更を有効にするためにGitLab を再設定してください。

Helm chart (Kubernetes)

インストールが完了したら、グローバルappConfig を更新して依存プロキシをオフにします:

global:
  appConfig:
    dependencyProxy:
      enabled: false
      bucket: gitlab-dependency-proxy
      connection: {}
       secret:
       key:

詳細は、「グローバルを使用した Chart の設定」を参照してください。

Self-compiled (source)
  1. インストールが完了したら、config/gitlab.ymldependency_proxy セクションを設定します。enabledfalse に設定して、依存プロキシをオフにします:

    dependency_proxy:
      enabled: false
    
  2. 変更を有効にするためにGitLabを再起動してください。

複数ノードのGitLabインストール

各WebノードとSidekiqノードのLinuxパッケージインストールの手順に従ってください。

依存プロキシをオンにします。

依存プロキシはデフォルトでオンになっていますが、管理者がオフにすることもできます。依存プロキシをオンにするには、「依存プロキシをオフにする」の手順に従って、enabled フィールドをtrue に設定します。

ストレージパスの変更

デフォルトでは、依存プロキシのファイルはローカルに保存されますが、デフォルトのローカルの場所を変更したり、オブジェクトストレージを使用することもできます。

ローカルストレージのパスの変更

Linux パッケージ・インストール用の依存プロキシ・ファイルは/var/opt/gitlab/gitlab-rails/shared/dependency_proxy/ に、ソース・インストール用の依存プロキシ・ファイルはshared/dependency_proxy/ (Git ホーム・ディレクトリからの相対パス) に保存されます。

Linux package (Omnibus)
  1. /etc/gitlab/gitlab.rb を編集し、以下の行を追加します:

    gitlab_rails['dependency_proxy_storage_path'] = "/mnt/dependency_proxy"
    
  2. ファイルを保存し、変更を有効にするためにGitLab を再設定してください。

Self-compiled (source)
  1. config/gitlab.ymldependency_proxy セクションを編集します:

    dependency_proxy:
      enabled: true
      storage_path: shared/dependency_proxy
    
  2. 変更を有効にするためにGitLabを再起動してください。

オブジェクトストレージの使用

ローカルストレージに依存する代わりに、オブジェクトストレージを使用して依存プロキシのブロブを保存することができます。GitLab 13.2以降では、統合オブジェクトストレージの設定を使用する必要があります。このセクションでは、以前の設定形式について説明します。マイグレーション手順はまだ適用されます

GitLab でのオブジェクトストレージの使用について、詳しくはこちらをご覧ください。

Linux package (Omnibus)
  1. /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'.
    }
    
  2. ファイルを保存し、変更を有効にするためにGitLab を再設定してください。

Self-compiled (source)
  1. config/gitlab.ymldependency_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'.
    
  2. 変更を有効にするために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分です。

プロキシの後ろで依存プロキシを使う

  1. /etc/gitlab/gitlab.rb を編集し、以下の行を追加します:

    gitlab_workhorse['env'] = {
     "http_proxy" => "http://USERNAME:PASSWORD@example.com:8080",
     "https_proxy" => "http://USERNAME:PASSWORD@example.com:8080"
    
  2. ファイルを保存し、変更を有効にするためにGitLab を再設定してください。