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

DNS設定

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

「ドメインネームシステム」(DNS)は、IPアドレスとドメイン名を対応させるために使用される命名システムです。

IPアドレスのみを使用してGitLabインスタンスを実行することもできますが、ドメイン名を使用する方が次の点で優れています:

  • 記憶しやすく、使いやすい。

  • HTTPSには必須です。

    Let’s Encryptインテグレーション(自動SSL証明書)を利用するには、お使いのインスタンスのドメイン名がパブリックインターネット上で解決できる必要があります。

ネームレジストラを使用する

ドメイン名をインスタンスのIPアドレスに関連付けるには、1つ以上のDNSレコードを指定する必要があります。ドメインのDNS設定にDNSレコードを追加することは、選択したプロバイダーによって完全に異なり、このドキュメントのスコープ外です。

一般的に、そのプロセスは以下のようになります:

  1. DNSレジストラのコントロールパネルにアクセスし、DNSレコードを追加します。タイプは次のいずれかである必要があります:

    • A
    • AAAA
    • CNAME

    タイプはインスタンスの基盤となるアーキテクチャによって異なります。最も一般的なものはAレコードです。

  2. 設定が適用されたことをテストします。

  3. SSHを使用して、GitLabがインストールされているサーバーに接続します。

  4. お好みのGitLab設定で設定ファイル(/etc/gitlab/gitlab.rb)を編集します。

DNSレコードの詳細については、DNS records overviewを参照してください。

動的DNSサービスを使用する

非本番環境での使用には、nip.ioなどの動的DNSサービスを使用できます。

これらは本番環境や長期間稼働するインスタンスには推奨されません。その理由は以下の通りです:

GitLabの設定でDNSを使用するもの

以下のGitLab設定は、DNSエントリに対応しています。

GitLab設定説明設定
external_urlこのURLは、メインのGitLabインスタンスとやり取りします。SSH/HTTP/HTTPS経由でクローンする場合や、ウェブUIにアクセスする場合に使用されます。GitLab Runnerは、このURLを使用してインスタンスと通信します。external_urlを設定します。
registry_external_urlこのURLは、コンテナレジストリとやり取りするために使用されます。Let’s Encryptインテグレーションで使用できます。このURLは、external_urlと同じDNSエントリを使用できますが、異なるポートを使用します。registry_external_urlを設定します。
pages_external_urlデフォルトでは、GitLab Pagesを使用するプロジェクトは、この値のサブドメインにデプロイされます。pages_external_urlを設定します。
Auto DevOpsドメインAuto DevOpsを使用してプロジェクトをデプロイする場合、このドメインを使用してソフトウェアをデプロイできます。インスタンスまたはクラスターレベルで定義できます。これはGitLabUIを使用して設定され、/etc/gitlab/gitlab.rbでは設定されません。Auto DevOpsドメインを設定します。

トラブルシューティング

特定のコンポーネントへのアクセスで問題がある場合、またはLet’s Encryptインテグレーションが失敗している場合、DNSに問題がある可能性があります。digツールを使用して、DNSが問題の原因であるかどうかを判断できます。

成功したDNSクエリ

この例では、Public Cloudflare DNS resolverを使用して、クエリがグローバルに解決できることを確認しています。ただし、Google Public DNS resolverのような他のパブリックリゾルバーも利用できます。

$ dig registry.gitlab.com @1.1.1.1

; <<>> DiG 9.18.18-0ubuntu0.22.04.1-Ubuntu <<>> registry.gitlab.com @1.1.1.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3934
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;registry.gitlab.com.  IN A

;; ANSWER SECTION:
registry.gitlab.com. 58 IN A 35.227.35.254

;; Query time: 8 msec
;; SERVER: 1.1.1.1#53(1.1.1.1) (UDP)
;; WHEN: Wed Jan 31 11:16:51 CET 2024
;; MSG SIZE  rcvd: 64

ステータスがNOERRORであり、ANSWER SECTIONに実際の結果があることを確認してください。

失敗したDNSクエリ

$ dig fake.gitlab.com @1.1.1.1

; <<>> DiG 9.18.18-0ubuntu0.22.04.1-Ubuntu <<>> fake.gitlab.com @1.1.1.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 25693
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;fake.gitlab.com.  IN A

;; AUTHORITY SECTION:
gitlab.com.  1800 IN SOA diva.ns.cloudflare.com. dns.cloudflare.com. 2331688399 10000 2400 604800 1800

;; Query time: 12 msec
;; SERVER: 1.1.1.1#53(1.1.1.1) (UDP)
;; WHEN: Wed Jan 31 11:17:46 CET 2024
;; MSG SIZE  rcvd: 103

この例では、statusNXDOMAINであり、ANSWER SECTIONはありません。SERVERフィールドは、どのDNSサーバーに回答がクエリされたかを示しています。この場合はPublic Cloudflare DNS resolverです。

ワイルドカードDNSエントリを使用する

URL属性にワイルドカードDNSを使用することも可能ですが、それぞれの完全なドメイン名を提供する必要があります。

Let’s Encryptインテグレーションは、ワイルドカード証明書をフェッチしません。これはご自身で行う必要があります。