Ansible を使用して、複数の Web サイト構成を持つ複数のサーバーを管理する方法を教えてください。

Ansible を使用して、複数の Web サイト構成を持つ複数のサーバーを管理する方法を教えてください。

新しいサーバーをプロビジョニングするために Ansible を研究しましたが、これはうまく機能します。私のプレイでは、MySQL、Nginx、その他すべてをインストールします。今、これを構成管理ツールとして使用する最適な方法は何か疑問に思っています。

私たちは各サーバーで複数の Web サイトを運営しています。私にとってこれは、各サーバーでの一般的な Nginx セットアップと、各サイト/ドメインに必要な特定の構成を意味します。必要な場合 (新しい洞察やセキュリティなど)、Ansible を使用して、一般的なセットアップと特定の構成の両方を個別に更新できることを念頭に置いています。

このような状況では何をする必要がありますか? すべてのサイトとそれらがどのサイトにあるかを保持する変数を保持する必要がありますか? または、より良い代替手段がありますか?

答え1

この目的に非常に役立つテンプレートの機能は、テンプレート作成機能です。

テンプレートモジュールを使用すると、各ホストに一意の値を持つファイルをデプロイできます。現在作業中のホストの名前は、inventory_hostname および inventory_hostname_short 変数に保存されます (後者はホスト名の最初のドット付きコンポーネントです)。

ホスト固有の変数を、group_vars/all 内の辞書に保存することができます。例:

www_sites: {
    host1: "www.mysite1.com",
    host2: "www.mysite2.com",
  }

次に、nginx conf ファイルのテンプレートに次のような内容を含めることができます。

server {
  listen       80;
  server_name  {{ www_sites[inventory_hostname_short] }};
  access_log   logs/{{ www_sites[inventory_hostname_short] }}.access.log  main;

Ansibleで使用されるJinja2テンプレート言語のドキュメントは以下にあります。ここ

答え2

問題のホストに対して特定の操作を実行するために、変数を使用します。ホストをできるだけグループ化し、グループ変数を使用することをお勧めします。Ansible プレイブックは、git または SVN でのバージョン管理に最適で、変更を追跡できることを覚えておいてください。

vars_prompt特に、cron でスケジュールされたプレイブックを実行しない場合は、を使用するとうまくいく可能性があります。

お役に立てれば!

関連情報