正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

セルフコンパイルインストールにおけるGitLab Pagesの管理

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab Self-Managed

GitLab Pagesを有効にする前に、GitLabをインストールが正常に完了していることを確認してください。

このドキュメントでは、セルフコンパイルインストールされたGitLabにおけるGitLab Pagesの設定方法について説明します。

Linuxパッケージインストール(推奨)におけるGitLab Pagesの設定に関する詳細は、Linuxパッケージのドキュメントを参照してください。

Linuxパッケージインストールを使用する利点は、サポートされている最新バージョンのGitLab Pagesが含まれていることです。

GitLab Pagesの仕組み

GitLab Pagesは、外部IPアドレスをリッスンし、カスタムドメインと証明書をサポートする軽量HTTPサーバーであるGitLab Pagesデーモンを利用します。SNIを介して動的証明書をサポートし、デフォルトでHTTP2を使用してページを公開します。この仕組みを十分に理解するために、READMEを読むことをおすすめします。

カスタムドメインワイルドカードドメインではない)の場合、Pagesデーモンは80または443ポートをリッスンする必要があります。そのため、設定方法にはある程度の柔軟性があります:

  • GitLabと同じサーバーでPagesデーモンを実行し、セカンダリIPでリッスンします。
  • 別のサーバーでPagesデーモンを実行します。この場合、PagesデーモンをインストールしたサーバーにもPagesのパスが存在する必要があるため、ネットワーク経由で共有する必要があります。
  • GitLabと同じサーバーでPagesデーモンを実行し、同じIP上の別のポートでリッスンする。その場合、ロードバランサーによるトラフィックのプロキシ処理が必要になります。このルートを選択する場合、HTTPSではTCPロードバランシングを使用する必要があります。TLS終端(HTTPSロードバランシング)を使用する場合、ユーザーが提供する証明書ではページを配信できません。HTTPの場合、HTTPまたはTCPTCP負荷分散を使用できます。

このドキュメントでは、最初のオプションを前提として説明を進めます。カスタムドメインをサポートしていない場合、セカンダリIPは必要ありません。

前提要件

Pagesの設定に進む前に、以下を確認してください:

  • GitLab Pagesの提供に使用する別のドメインが必要です。このドキュメントでは、それがexample.ioであると想定しています。
  • そのドメインのwildcard DNS record(ワイルドカードDNSレコード)を設定している必要があります。
  • Pagesのアーティファクトを圧縮および解凍するために必要なため、GitLabがインストールされている同じサーバーにzipおよびunzipパッケージがインストールされている必要があります。
  • オプション。HTTPSでPagesを提供する場合は、そのドメインのwildcard certificate(ワイルドカード証明書)(*.example.io)を用意します。
  • オプション(推奨): ユーザーが独自のものを持ち込む必要がないように、インスタンスRunnerを設定して有効にしている必要があります。

DNS設定

GitLab Pagesは、独自の仮想ホストで実行されることを想定しています。DNSサーバー/プロバイダーで、GitLabを実行しているホストを指すワイルドカードDNS Aレコードを追加する必要があります。たとえば、次のようなエントリになります:

*.example.io. 1800 IN A 192.0.2.1

example.ioはGitLab Pagesの提供元ドメイン、192.0.2.1はGitLabインスタンスのIPアドレスです。

GitLabドメインを使用してユーザーページを提供すべきではありません。詳細については、セキュリティセクションを参照してください。

設定

ニーズに応じて、4種類の方法でGitLab Pagesを設定できます。次に、もっとも簡単な設定からもっとも高度な設定へと続く順番で、以下のオプションを示します。絶対に必要な最小限の要件は、すべての設定で必要なワイルドカードDNSをセットアップすることです。

ワイルドカードドメイン

前提要件:

URLスキーム: http://<namespace>.example.io/<project_slug>

このセットアップは、Pagesで使用できる最小限のものです。これは、以下に説明するように、他のすべてのセットアップのベースです。NGINXはすべてのリクエストをデーモンにプロキシします。Pagesデーモンは外部からのリクエストをリッスンしません。

  1. Pagesデーモンをインストールします:

    cd /home/git
    sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-pages.git
    cd gitlab-pages
    sudo -u git -H git checkout v$(</home/git/gitlab/GITLAB_PAGES_VERSION)
    sudo -u git -H make
  2. GitLabインストールディレクトリに移動します:

    cd /home/git/gitlab
  3. gitlab.ymlを編集し、pages設定で、enabledtrueに、hostをGitLab Pagesの提供元となるFQDNに設定します:

    ## GitLab Pages
    pages:
      enabled: true
      # The location where pages are stored (default: shared/pages).
      # path: shared/pages
    
      host: example.io
      access_control: false
      port: 8090
      https: false
      artifacts_server: false
      external_http: ["127.0.0.1:8090"]
      secret_file: /home/git/gitlab/gitlab-pages-secret
  4. 次の設定ファイルを/home/git/gitlab-pages/gitlab-pages.confに追加し、example.ioをGitLab Pagesの提供元となるFQDNに、gitlab.example.comをGitLabインスタンスのURLに必ず変更してください:

    listen-http=:8090
    pages-root=/home/git/gitlab/shared/pages
    api-secret-key=/home/git/gitlab/gitlab-pages-secret
    pages-domain=example.io
    internal-gitlab-server=https://gitlab.example.com

    GitLab PagesとGitLabを同じホストで実行する場合は、httpアドレスを使用できます。httpsを使用し、自己署名証明書を使用する場合は、カスタム認証局をGitLab Pagesで使用できるようにしてください。たとえば、SSL_CERT_DIR環境変数を設定することで、これを行うことができます。

  5. シークレットAPIキーを追加します:

    sudo -u git -H openssl rand -base64 32 > /home/git/gitlab/gitlab-pages-secret
  6. pagesデーモンを有効にするには:

    • systemdをinitとして使用している場合は、以下を実行します:

      sudo systemctl edit gitlab.target

      開いたエディタで、以下を追加してファイルを保存します:

      [Unit]
      Wants=gitlab-pages.service
    • システムでSysV initの代わりにを使用している場合は、/etc/default/gitlabを編集し、gitlab_pages_enabledtrueに設定します:

      gitlab_pages_enabled=true
  7. gitlab-pages NGINX設定ファイルをコピーします:

    sudo cp lib/support/nginx/gitlab-pages /etc/nginx/sites-available/gitlab-pages.conf
    sudo ln -sf /etc/nginx/sites-{available,enabled}/gitlab-pages.conf
  8. NGINXを再起動します。

  9. GitLabを再起動します。

TLS対応のワイルドカードドメイン

前提要件:

URLスキーム: https://<namespace>.example.io/<project_slug>

NGINXはすべてのリクエストをデーモンにプロキシします。Pagesデーモンは外部からのリクエストをリッスンしません。

  1. Pagesデーモンをインストールします:

    cd /home/git
    sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-pages.git
    cd gitlab-pages
    sudo -u git -H git checkout v$(</home/git/gitlab/GITLAB_PAGES_VERSION)
    sudo -u git -H make
  2. gitlab.ymlで、ポートを443に、httpsをtrueに設定します:

    ## GitLab Pages
    pages:
      enabled: true
      # The location where pages are stored (default: shared/pages).
      # path: shared/pages
    
      host: example.io
      port: 443
      https: true
  3. /etc/default/gitlabを編集し、gitlab_pages_enabledtrueに設定して、pagesデーモンを有効にします。gitlab_pages_optionsでは、-pages-domainは以前に設定したhost値と一致する必要があります。-root-certおよび-root-key設定は、example.ioドメインのワイルドカードTLS証明書です:

    gitlab_pages_enabled=true
    gitlab_pages_options="-pages-domain example.io -pages-root $app_root/shared/pages -listen-proxy 127.0.0.1:8090 -root-cert /path/to/example.io.crt -root-key /path/to/example.io.key"
  4. gitlab-pages-ssl NGINX設定ファイルをコピーします:

    sudo cp lib/support/nginx/gitlab-pages-ssl /etc/nginx/sites-available/gitlab-pages-ssl.conf
    sudo ln -sf /etc/nginx/sites-{available,enabled}/gitlab-pages-ssl.conf
  5. NGINXを再起動します。

  6. GitLabを再起動します。

高度な設定

ワイルドカードドメインに加えて、GitLab Pagesがカスタムドメインで動作するように設定することもできます。この場合も、カスタムドメインでTLS証明書を使用する、使用しないの2つのオプションがあります。最も簡単なセットアップは、TLS証明書を使用しない方法です。

カスタムドメイン

前提要件:

URLスキーム: http://<namespace>.example.io/<project_slug>http://custom-domain.com

その場合、pagesデーモンが実行されています。NGINXは引き続きデーモンにリクエストをプロキシしますが、デーモンは外部からのリクエストも受信できます。カスタムドメインはサポートされていますが、TLSはサポートされていません。

  1. Pagesデーモンをインストールします:

    cd /home/git
    sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-pages.git
    cd gitlab-pages
    sudo -u git -H git checkout v$(</home/git/gitlab/GITLAB_PAGES_VERSION)
    sudo -u git -H make
  2. 以下の例のようにgitlab.ymlを編集します。GitLab Pagesの提供元となるFQDNにhostを変更する必要があります。pagesデーモンが接続をリッスンするセカンダリIPにexternal_httpを設定します:

    pages:
      enabled: true
      # The location where pages are stored (default: shared/pages).
      # path: shared/pages
    
      host: example.io
      port: 80
      https: false
    
      external_http: 192.0.2.2:80
  3. デーモンを有効にするには、/etc/default/gitlabを編集し、gitlab_pages_enabledtrueに設定します。gitlab_pages_optionsでは、-pages-domainの値はhostと一致し、-listen-httpexternal_httpと一致する必要があります:

    gitlab_pages_enabled=true
    gitlab_pages_options="-pages-domain example.io -pages-root $app_root/shared/pages -listen-proxy 127.0.0.1:8090 -listen-http 192.0.2.2:80"
  4. gitlab-pages-ssl NGINX設定ファイルをコピーします:

    sudo cp lib/support/nginx/gitlab-pages /etc/nginx/sites-available/gitlab-pages.conf
    sudo ln -sf /etc/nginx/sites-{available,enabled}/gitlab-pages.conf
  5. /etc/nginx/site-available/内のすべてのGitLab関連の設定を編集し、0.0.0.0192.0.2.1に置き換えます。ここで、192.0.2.1はGitLabがリッスンするプライマリIPです。

  6. NGINXを再起動します。

  7. GitLabを再起動します。

TLS対応のカスタムドメイン

前提要件:

URLスキーム: https://<namespace>.example.io/<project_slug>https://custom-domain.com

その場合、pagesデーモンが実行されています。NGINXは引き続きデーモンにリクエストをプロキシしますが、デーモンは外部からのリクエストも受信できます。カスタムドメインとTLSをサポートしています。

  1. Pagesデーモンをインストールします:

    cd /home/git
    sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-pages.git
    cd gitlab-pages
    sudo -u git -H git checkout v$(</home/git/gitlab/GITLAB_PAGES_VERSION)
    sudo -u git -H make
  2. 以下の例のようにgitlab.ymlを編集します。GitLab Pagesの提供元となるFQDNにhostを変更する必要があります。pagesデーモンが接続をリッスンするセカンダリIPにexternal_httpexternal_httpsを設定します:

    ## GitLab Pages
    pages:
      enabled: true
      # The location where pages are stored (default: shared/pages).
      # path: shared/pages
    
      host: example.io
      port: 443
      https: true
    
      external_http: 192.0.2.2:80
      external_https: 192.0.2.2:443
  3. /etc/default/gitlabを編集し、gitlab_pages_enabledtrueに設定して、pagesデーモンを有効にします。gitlab_pages_optionsでは、-pages-domainhost-listen-httpexternal_http-listen-httpsexternal_https設定と一致させる必要があります。-root-certおよび-root-key設定は、example.ioドメインのワイルドカードTLS証明書です:

    gitlab_pages_enabled=true
    gitlab_pages_options="-pages-domain example.io -pages-root $app_root/shared/pages -listen-proxy 127.0.0.1:8090 -listen-http 192.0.2.2:80 -listen-https 192.0.2.2:443 -root-cert /path/to/example.io.crt -root-key /path/to/example.io.key"
  4. gitlab-pages-ssl NGINX設定ファイルをコピーします:

    sudo cp lib/support/nginx/gitlab-pages-ssl /etc/nginx/sites-available/gitlab-pages-ssl.conf
    sudo ln -sf /etc/nginx/sites-{available,enabled}/gitlab-pages-ssl.conf
  5. /etc/nginx/site-available/内のすべてのGitLab関連の設定を編集し、0.0.0.0192.0.2.1に置き換えます。ここで、192.0.2.1はGitLabがリッスンするプライマリIPです。

  6. NGINXを再起動します。

  7. GitLabを再起動します。

NGINXの注意事項

以下の情報は、セルフコンパイルインストールにのみ適用されます。

NGINX設定でドメイン名をセットアップする際は、特に注意してください。バックスラッシュを削除しないでください。

GitLab Pagesドメインがexample.ioの場合は、以下のように置き換えます:

server_name ~^.*\.YOUR_GITLAB_PAGES\.DOMAIN$;

変更後は次のようになります:

server_name ~^.*\.example\.io$;

サブドメインを使用している場合は、最初のドットを除くすべてのドット(.)をバックスラッシュ()でエスケープしてください。たとえば、pages.example.ioは次のようになります:

server_name ~^.*\.pages\.example\.io$;

アクセス制御

GitLab Pagesのアクセス制御はプロジェクトごとに設定できます。Pagesサイトへのアクセス制御は、そのプロジェクトに対するユーザーのメンバーシップに基づいて制御できます。

アクセス制御は、PagesデーモンをGitLabのOAuthアプリケーションとして登録することで機能します。認証されていないユーザーがプライベートPagesサイトにアクセスするリクエストを行うたびに、PagesデーモンはユーザーをGitLabにリダイレクトします。認証に成功すると、ユーザーはトークン付きでPagesにリダイレクトされ、そのトークンはCookieに保持されます。Cookieはシークレットキーで署名されているため、改ざんを検出できます。

プライベートサイトのリソースを表示する各リクエストは、そのトークンを使用してPagesによって認証されます。Pagesは受信したリクエストごとにGitLab APIにリクエストを送り、ユーザーにそのサイトを閲覧する権限があるかどうかを確認します。

Pagesのアクセス制御パラメータは設定ファイルで設定され、慣例によりgitlab-pages-configという名前が付けられます。この設定ファイルは、-config flagまたはCONFIG環境変数を使用してページに渡されます。

Pagesへのアクセス制御はデフォルトで無効になっています。有効にするには、次の手順に従います:

  1. config/gitlab.ymlファイルを変更します:

    pages:
      access_control: true
  2. GitLabを再起動します。

  3. 新しいシステムOAuthアプリケーションを作成します。これはGitLab Pagesと呼ばれ、Redirect URLhttps://projects.example.io/authである必要があります。これは「信頼できる」アプリケーションである必要はありませんが、apiスコープが必要です。

  4. 次の引数を使用して設定ファイルを渡して、Pagesデーモンを起動します:

      auth-client-id=<OAuth Application ID generated by GitLab>
      auth-client-secret=<OAuth code generated by GitLab>
      auth-redirect-uri='http://projects.example.io/auth'
      auth-secret=<40 random hex characters>
      auth-server=<URL of the GitLab instance>
  5. これで、ユーザーはプロジェクトの設定からアクセス制御を設定できるようになります。

ストレージパスを変更する

GitLab Pagesのコンテンツを保存するデフォルトのパスを変更するには、次の手順に従います。

  1. ページはデフォルトで/home/git/gitlab/shared/pagesに保存されます。別の場所に保存する場合は、gitlab.ymlpagesセクションで設定する必要があります:

    pages:
      enabled: true
      # The location where pages are stored (default: shared/pages).
      path: /mnt/storage/pages
  2. GitLabを再起動します。

Pagesの最大サイズを設定する

プロジェクトごとの解凍されたアーカイブの最大サイズのデフォルトは100 MBです。

この値を変更するには:

  1. 左側のサイドバーの下部で、管理者を選択します。
  2. 設定 > 設定を選択します。
  3. Pagesを展開します。
  4. Maximum size of pages (MB)(Pagesの最大サイズ(MB))の値を更新します。

バックアップ

ページは通常のバックアップの一部であるため、設定するものはありません。

セキュリティ

クロスサイトスクリプティング攻撃を防ぐために、GitLab PagesをGitLabとは異なるホスト名で実行することを強くおすすめします。