Skip to main content
ドキュメントへの更新が頻繁に発行されており、このページの翻訳はまだ行われている場合があります。 最新の情報については、「英語のドキュメント」を参照してください。

リポジトリ キャッシュの構成

GitHub Enterprise Server 用のリポジトリ キャッシュを構成するには、新しいインスタンスを作成し、リポジトリ キャッシュをプライマリ インスタンスに接続し、リポジトリ キャッシュに対するリポジトリ ネットワークのレプリケーションを構成します。

リポジトリ キャッシュの構成について

リポジトリ キャッシュと呼ばれる特殊な種類のレプリカを作成することで、リポジトリ キャッシュを構成できます。次に、リポジトリ キャッシュにレプリケートされるリポジトリ ネットワークを管理するデータの場所ポリシーを設定できます。

クラスタリングでは、リポジトリ キャッシュはサポートされていません。

リポジトリ キャッシュの DNS

プライマリ インスタンスとリポジトリ キャッシュの DNS 名は異なっている必要があります。 たとえば、プライマリ インスタンスが github.example.com にある場合は、キャッシュ名は europe-ci.github.example.comgithub.asia.example.com に決定できます。

CI マシンで、プライマリ インスタンスではなくリポジトリ キャッシュからフェッチするには、Git の url.<base>.insteadOf 構成設定を使用できます。 詳細については、Git ドキュメントにある「git-config」を参照してください。

たとえば、CI マシンのグローバル .gitconfig には、次の行が含まれます。

[url "https://europe-ci.github.example.com/"]
    insteadOf = https://github.example.com/

次に、https://github.example.com/myorg/myrepo をフェッチするように Git に要求すると、代わりに https://europe-ci.github.example.com/myorg/myrepo からフェッチされます。

リポジトリ キャッシュの構成

  1. 新しい GitHub Enterprise Server インスタンスを希望するプラットフォームにセットアップします。 このインスタンスがリポジトリ キャッシュになります。 詳細については、「GitHub Enterprise Server インスタンスをセットアップする」を参照してください。

  2. プライマリアプライアンス上のパスワードと一致する管理者パスワードを設定して続行します。

  3. [レプリカとして構成] をクリックします。 新しいインスタンスをレプリカとして設定するリンクがあるインストール オプション

  4. "Add new SSH key(新しいSSH鍵の追加)"の下でSSH鍵を入力してください。 SSH キーの追加

  5. [キーの追加] をクリックします。

  6. SSH を使用して、リポジトリ キャッシュの IP アドレスに接続します。

    $ ssh -p 122 admin@REPLICA-IP
  7. レプリケーション用のキーの組を生成するには、プライマリ アプライアンスの IP アドレスを指定して ghe-repl-setup コマンドを使用し、それが返す公開キーをコピーします。

    $ ghe-repl-setup PRIMARY_IP
    1. プライマリ アプライアンスの承認されたキーのリストに公開キーを追加するには、`https://PRIMARY-HOSTNAME/setup/settings` を参照して、レプリカからコピーしたキーをリストに追加します。
  8. プライマリへの接続を確認し、リポジトリ キャッシュに対してレプリカ モードを有効にするには、ghe-repl-setup をもう一度実行します。

    $ ghe-repl-setup PRIMARY-IP
  9. リポジトリ キャッシュを構成するには、ghe-repl-node コマンドを使用し、必要なパラメーターを含めます。

    • CACHE-LOCATION を、キャッシュがデプロイされているリージョンなどの英数字識別子に置き換えて、リポジトリ キャッシュに対して cache-location を設定します。 CACHE-LOCATION 値は、assetsmedia など、サブドメイン分離で使用するために予約されているサブドメインのいずれにもできません。 予約名の一覧については、「サブドメイン分離の有効化」を参照してください。
    • リポジトリ キャッシュに cache-domain を設定し、EXTERNAL-CACHE-DOMAIN を Git クライアントがリポジトリ キャッシュへのアクセスに使用するホスト名に置き換えます。 cache-domain を指定しない場合、GitHub Enterprise Server は、CACHE-LOCATION 値をサブドメインとして、インスタンス用に構成されたホスト名の前に付加します。 詳しくは、「ホスト名の設定」をご覧ください。
    • 新しいキャッシュでは、同じデータセンター内の別のキャッシュからシード処理を試みます。 リポジトリ キャッシュに datacenter を設定し、REPLICA-DC-NAME をノードをデプロイするデータセンターの名前に置き換えます。
    $ ghe-repl-node --cache CACHE-LOCATION --cache-domain EXTERNAL-CACHE-DOMAIN --datacenter REPLICA-DC-NAME
  10. データ ストアのレプリケーションを開始するには、ghe-repl-start コマンドを使います。

    $ ghe-repl-start

    警告: ghe-repl-start を実行すると、プライマリ サーバーを短時間使えなくなり、その間、ユーザーには内部サーバー エラーが表示されることがあります。 もっとわかりやすいメッセージを表示するには、ghe-repl-start をレプリカ ノードで実行する前にプライマリ ノード上で ghe-maintenance -s を実行し、アプライアンスをメンテナンス モードにします。 レプリケーションを開始したら、ghe-maintenance -u を使ってメンテナンス モードを無効にします。 プライマリ ノードがメンテナンス モードの間、Git レプリケーションは進行しません。

    11. 各データストアのレプリケーション チャネルの状態を確認するには、`ghe-repl-status` コマンドを使用します。
    $ ghe-repl-status
  11. リポジトリ キャッシュへのリポジトリ ネットワークのレプリケーションを有効にするには、データの場所ポリシーを設定します。 詳細については、「データの場所ポリシー」を参照してください。

データの場所ポリシー

spokesctl cache-policy コマンドでリポジトリのデータの場所ポリシーを構成して、データの局所性を制御できます。 データの場所ポリシーによって、どのリポジトリ ネットワークがどのリポジトリ キャッシュにレプリケートされているかが決まります。 既定では、データの場所ポリシーが構成されるまで、どのリポジトリ キャッシュにもリポジトリ ネットワークはレプリケートされません。

データの場所ポリシーは、Git コンテンツにのみ影響します。 Issue や pull request コメントなどのデータベース内のコンテンツは、ポリシーに関係なくすべてのノードにレプリケートされます。

注: データの場所ポリシーは、アクセス制御と同じではありません。 リポジトリにアクセスできるユーザーを制御するには、リポジトリ ロールを使用する必要があります。 リポジトリ ロールの詳細については、「Organization のリポジトリ ロール」を参照してください。

--default フラグを使用して、すべてのネットワークをレプリケートするようにポリシーを構成できます。 たとえば、次のコマンドでは、すべてのリポジトリ ネットワークの 1 つのコピーを、cache_location が "kansas" であるリポジトリ キャッシュのセットにレプリケートするポリシーが作成されます。

$ ghe-spokesctl cache-policy set --default 1 kansas

リポジトリ ネットワークのレプリケーションを構成するには、ネットワークのルートであるリポジトリを指定します。 リポジトリ ネットワークには、リポジトリとリポジトリのすべてのフォークが含まれます。 ネットワーク全体をレプリケートしないと、ネットワークの一部をレプリケートすることはできません。

$ ghe-spokesctl cache-policy set <owner/repository> 1 kansas

ネットワークのレプリカ数を 0 に指定すると、すべてのネットワークをレプリケートし、特定のネットワークを除外するポリシーをオーバーライドできます。 たとえば、次のコマンドでは、場所 "kansas" 内のリポジトリ キャッシュに、そのネットワークのコピーを含めることができないことが指定されます。

$ ghe-spokesctl cache-policy set <owner/repository> 0 kansas

特定のキャッシュの場所で、1 より大きいレプリカ数はサポートされていません。