3.6.7. Git を使用した設定データの管理
JBoss EAP 7.3 より、Git を使用してサーバー設定データ、プロパティーファイル、およびデプロイメントを管理および永続化できるようになりました。これにより、これらのファイルのバージョン履歴を管理できるだけでなく、1 つ以上の Git リポジトリーを使用して複数のサーバーおよびノード全体でサーバーやアプリケーションの設定を共有することができます。この機能は、デフォルトの設定ディレクトリーレイアウトを使用するスタンドアロンサーバーでのみ動作します。
ローカル Git リポジトリー で設定データの使用を選択でき、remote Git repository からデータを取得することもできます。Git リポジトリーは、スタンドアロンサーバーコンテンツのベースディレクトリーである jboss.server.base.dir
ディレクトリーで設定されます。jboss.server.base.dir
ディレクトリーが Git を使用するよう設定されると、JBoss EAP は管理 CLI または管理コンソールを使用して設定へ加えられた各更新を自動的にコミットします。設定ファイルを手作業で編集してサーバー外部で追加された変更は、コミットおよび永続化されません。しかし、Git CLI を使用して手作業の変更を追加およびコミットすることができます。また、Git CLI を使用してコミット履歴の表示、ブランチの管理、およびコンテンツの管理を行うこともできます。
この機能を使用するには、サーバーの起動時に以下の引数を 1 つ以上コマンドラインに渡します。
表3.4 Git 設定管理のサーバー起動引数
引数 | 説明 |
---|---|
--git-repo |
サーバー設定データの管理および永続化に使用される Git リポジトリーの場所。これは、ローカルで保存する場合は |
--git-branch | 使用する Git リポジトリーのブランチまたはタグ名。ブランチまたはタグ名が存在しないと作成されないため、この引数には既存のブランチまたはタグ名を指定する必要があります。タグ名を使用する場合、リポジトリーを detached HEAD 状態にし、今後のコミットがブランチにアタッチされないようにします。タグ名は読み取り専用で、通常複数のノード全体で設定をレプリケートする必要があるときに使用されます。 |
--git-auth |
Elytron 設定ファイルへの URL には、リモート Git リポジトリーへの接続時に使用される認証情報が含まれています。この引数は、Git リポジトリーに認証が必要な場合に必要となります。この引数は |
ローカル Git リポジトリーの使用
ローカル Git リポジトリーを使用するには、--git-repo=local
引数を使用してサーバーを起動します。サーバーの起動時に --git-branch=GIT_BRANCH_NAME
引数を追加して、オプションのブランチまたはタグ名をリモートリポジトリーで指定することもできます。ブランチまたはタグ名が存在しないと作成されないため、この引数には既存のブランチまたはタグ名を指定する必要があります。タグ名を使用する場合、リポジトリーを detached HEAD 状態にし、今後のコミットがブランチにアタッチされないようにします。
以下のコマンド例は、local
リポジトリーの 1.0.x
ブランチを使用して、サーバーを起動します。
$ EAP_HOME/bin/standalone.sh --git-repo=local --git-branch=1.0.x
local
Git リポジトリーを使用する引数を使用してサーバーを起動した場合、JBoss EAP は jboss.server.base.dir
ディレクトリーがすでに Git に対して設定されているかどうかを確認します。設定されていない場合、JBoss EAP は既存の設定コンテンツを使用して jboss.server.base.dir
ディレクトリーに Git リポジトリーを作成し、初期化します。JBoss EAP は --git-branch
引数によって渡されたブランチ名をチェックアウトします。引数が渡されていない場合は master
ブランチをチェックアウトします。初期化後、スタンドアロンサーバーコンテンツのベースディレクトリーに .git/
ディレクトリーと .gitignore
ファイルがあることを確認できるはずです。
リモート Git リポジトリーの使用
Git リポジトリーを使用するには、--git-repo=REMOTE_REPO
引数を使用してサーバーを起動します。引数の値は、ローカル Git 設定に手作業で追加した URL またはリモートエイリアスになります。
サーバーの起動時に --git-branch=GIT_BRANCH_NAME
引数を追加して、オプションのブランチまたはタグ名をリモートリポジトリーで指定することもできます。ブランチまたはタグ名が存在しないと作成されないため、この引数には既存のブランチまたはタグ名を指定する必要があります。タグ名を使用する場合、リポジトリーを detached HEAD 状態にし、今後のコミットがブランチにアタッチされないようにします。
Git リポジトリーに認証が必要な場合は、サーバーの起動時に --git-auth=AUTH_FILE_URL
引数も追加する必要があります。この引数は、Git リポジトリーへの接続に必要な認証情報が含まれる Elytron 設定ファイルへの URL になります。以下は、認証に使用できる Elytron 設定ファイルの例になります。
<?xml version="1.0" encoding="UTF-8"?> <configuration> <authentication-client xmlns="urn:elytron:client:1.2"> <authentication-rules> <rule use-configuration="test-login"> </rule> </authentication-rules> <authentication-configurations> <configuration name="test-login"> <sasl-mechanism-selector selector="BASIC" /> <set-user-name name="eap-user" /> <credentials> <clear-password password="my_api_key" /> </credentials> <set-mechanism-realm name="testRealm" /> </configuration> </authentication-configurations> </authentication-client> </configuration>
以下は、リモート eap-configuration
リポジトリーの 1.0.x
ブランチを使用して認証情報が含まれる Elytron 設定ファイルに URL を渡し、フルプロファイルでサーバーを起動するコマンドの例になります。
$ EAP_HOME/bin/standalone.sh --git-repo=https://github.com/MY_GIT_ID/eap-configuration.git --git-branch=1.0.x --git-auth=file:///home/USER_NAME/github-wildfly-config.xml --server-config=standalone-full.xml
リモート Git リポジトリーを使用する引数を使用してサーバーを起動した場合、JBoss EAP は jboss.server.base.dir
ディレクトリーがすでに Git に対して設定されているかどうかを確認します。設定されていない場合、JBoss EAP は jboss.server.base.dir
ディレクトリーにある既存の設定ファイルを削除し、代わりにリモート Git 設定データを置きます。JBoss EAP は --git-branch
引数によって渡されたブランチ名をチェックアウトします。引数が渡されていない場合は master
ブランチをチェックアウトします。この処理の完了後、スタンドアロンサーバーコンテンツのベースディレクトリーに .git/
ディレクトリーと .gitignore
ファイルがあることを確認できるはずです。
この処理の完了後、当初使用したものとは異なる --git-repo
URL または --git-branch
名を渡して、サーバーを起動すると、サーバーの起動時にエラーメッセージ java.lang.RuntimeException: WFLYSRV0268: Failed to pull the repository GIT_REPO_NAME
が表示されます。これは、JBoss EAP が jboss.server.base.dir
ディレクトリーに現在設定されていないリポジトリーとブランチから設定データをプルしようとし、競合が発生するためです。
リモート Git SSH リポジトリーの使用
SSH 認証では、SSH 認証情報を指定して elytron 設定ファイルを指定できます。このファイルで SSH 認証情報を指定した後に、スタンドアロンサーバーインスタンスを起動し、リモートの Git SSH リポジトリーでサーバー設定ファイル履歴を管理できます。
また、elytron-tool.sh
スクリプトを使用してアクセスできる WildFly Elytron ツールを使用して SSH キーペアを生成し、クレデンシャルストアに保存することもできます。WildFly Elytron ツールは、サーバーに SSH 認証情報を指定していない場合に使用する場合に便利です。
elytron
設定ファイルに認証情報を追加すると、リモート Git SSH リポジトリーに接続できます。
前提条件
-
elytron
設定ファイルに認証情報を追加している。elytron 設定ファイル で保存されたキーペアの使用 を参照し、elytron
設定ファイル での OpenSSH キーの使用 を 参照してください。
手順
ターミナルで以下のコマンドを実行して、リモートの git SSH リポジトリーに接続します。
$ <eap_home_path>/bin/standalone.sh --git-repo=<git_repository_url> --git-auth=<elytron_configuration_file_url>
スタンドアロンサーバーが起動し、サーバーの設定ファイル履歴がリモート Git SSH リポジトリーで管理されるようになります。
関連情報
-
elytron-tool.sh
スクリプトで SSH キーペアを生成する方法は、サーバーのセキュリティーの設定方法 ガイドの WildFly Elytron ツールを使用したクレデンシャルストアでのキーペアの管理 を参照してください。 -
OpenSSH キーペアの生成および使用に関する詳細は、
elytron
設定ファイルでの OpenSSH keys 使用 を参照してください。
elytron
設定ファイルでの OpenSSH キーの使用
elytron
サブシステムは、OpenSSH コマンドラインツールを使用して生成された SSH キーペアをサポートします。このツールは、RSA アルゴリズム、DSA アルゴリズム、および ECDSA アルゴリズムを使用します。
ssh-keygen
コマンドを使用して、SSH 鍵ペアを生成できます。
さらに、3 つの要素タイプのいずれかを使用してパスワードを指定することもできます。
-
clear-password
-
masked-password
-
credential-store-reference
前提条件
SSH キーペアを生成している。以下の例は、サイズが
256
メガバイトの ECDSA 鍵の生成を示しています。パスフレーズはシークレット
として設定されている。[~/.ssh]$ ssh-keygen -t ecdsa -b 256 Generating public/private ecdsa key pair. Enter file in which to save the key (/home/user/.ssh/id_ecdsa): Enter passphrase (empty for no passphrase): secret Enter same passphrase again: secret Your identification has been saved in /home/user/.ssh/id_ecdsa. Your public key has been saved in /home/user/.ssh/id_ecdsa.pub.
手順
以下の 2 つの方法のいずれかを選択して、
elytron
設定ファイルでキーペアを指定します。キーペアの認証情報を使用して、設定ファイルでキーペアを指定します。以下に例を示します。
<authentication-configurations> <configuration name="example"> <credentials> <key-pair> <openssh-private-key pem="-----BEGIN OPENSSH PRIVATE KEY----- b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABDaZzGpGV 922xmrL+bMHioPAAAAEAAAAAEAAABoAAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlz dHAyNTYAAABBBIMTU1m6pmpnSTZ2k/cbKnxXkRpXUmWwqN1SSNLpRswGsUhmLG2H21br1Z lEHRiRn6zQmA4YCtCw2hLuz8M8WVoAAADAQk+bMNWFfaI4Ej1AQdlLl6v4RDa2HGjDS3V4 39h0pOx4Ix7YZKydTN4SPkYRt78CNK0AhhtKsWo2lVNwyfh8/6SeqowhgCG9MJYW8yRR1R 3DX/eQTx6MV/gSSRLDTpcVWUY0jrBGpMaEvylKoNcabiEo44flkIYlG6E/YtFXsmXsoBsj nFcjvmfE7Lzyin5Fowwpbqj9f0XOARu9wsUzeyJVAwT7+YCU3mWJ3dnO1bOxK4TuLsxD6j RB7bJemsfr -----END OPENSSH PRIVATE KEY-----"> <clear-password password="secret"/> </openssh-private-key> </key-pair> </credentials> </configuration> </authentication-configurations>
この例は、OpenSSH 形式のキーペアを示しています。
シークレット
のパスフレーズはclear-password
タイプとして設定されており、秘密鍵を復号化する必要があります。重要elytron
サブシステムは、PKCS8
形式のキーペアをサポートします。ただし、キーペアを元の形式に復号化する必要がある場合に問題が発生する可能性があるため、PKCS8
形式のキーペアをパスフレーズで暗号化しないでください。設定ファイルの
<ssh-credential>
要素に秘密鍵が含まれるファイルの場所を指定します。以下に例を示します。<authentication-configurations> <configuration name="example"> <credentials> <ssh-credential ssh-directory="/user/home/example/.ssh" private-key-file="id_test_ecdsa" known-hosts-file="known_hosts_test"> 1 2 3 <clear-password password="secret"/> </ssh-credential> </credentials> </configuration> </authentication-configurations>
関連情報
- OpenSSH とその機能の詳細は、OpenSSH のドキュメント を参照してください。
Git 使用時のリモート設定データの公開
管理 CLI の publish-configuration
操作を使用すると、Git リポジトリーの変更をリモートリポジトリーにプッシュすることができます。JBoss EAP は、サーバー起動時のブート処理中にリモート Git リポジトリーから設定をプルするため、複数のサーバー間で設定データを共有できます。この操作はリモートリポジトリーにのみ使用できます。ローカルリポジトリーでは動作しません。
以下の管理 CLI 操作は、設定データをリモート eap-configuration
リポジトリーに公開します。
:publish-configuration(location="=https://github.com/MY_GIT_ID/eap-configuration.git")
{"outcome" => "success"}
Git でのスナップショットの使用
Git のコミット履歴を使用して設定の変更を追跡する他に、スナップショットを作成して特定時の設定を保持することもできます。スナップショットを一覧表示し、削除することができます。
Git 使用時におけるスナップショットの作成
スナップショットは、Git にタグとして保存されます。take-snapshot
操作で、スナップショットタグ名とコミットメッセージを引数として指定します。
以下の管理 CLI 操作は、スナップショットを作成し、タグに snapshot-01 という名前を付けます。
:take-snapshot(name="snapshot-01", comment="1st snapshot") { "outcome" => "success", "result" => "1st snapshot" }
Git 使用時におけるスナップショットの一覧表示
list-snapshots
操作を使用すると、スナップショットタグをすべて一覧表示できます。
以下の管理 CLI 操作は、スナップショットタグを一覧表示します。
:list-snapshots { "outcome" => "success", "result" => { "directory" => "", "names" => [ "snapshot : 1st snapshot", "refs/tags/snapshot-01", "snapshot2 : 2nd snapshot", "refs/tags/snapshot-02" ] } }
Git 使用時におけるスナップショットの削除
delete-snapshot
操作にタグ名を渡すと特定のスナップショットを削除できます。
以下の管理 CLI 操作は、タグ名が snapshot-01 のスナップショットを削除します。
:delete-snapshot(name="snapshot-01") {"outcome" => "success"}