序章

Apache は、現在インターネットで使用されている最も人気のあるWebサーバーの1つです。 UbuntuやDebianなどのLinuxディストリビューションでは、パッケージリポジトリに含まれており、すぐに使用できるデフォルトの構成が含まれているため、セットアップと構成が簡単です。

Ansible は、システムをリモートで構成し、ソフトウェアをインストールし、多数のサーバーに手動でログインしなくても複雑なタスクを実行できる自動化ツールです。 他の方法とは異なり、Ansibleは単一のホストにインストールされます。これはローカルマシンでもかまいません。SSHを使用して各リモートホストと通信します。 これにより、新しいサーバーごとにインストールする前提条件のパッケージがないため、新しいサーバーの構成を非常に高速に行うことができます。 プレイブックを使用しているため、非常に使いやすく、理解しやすいです。 yaml 単純なモジュールベースの構文を使用したフォーマット。

前提条件

このチュートリアルでは、Ansibleを新しいUbuntu 14.04マスタードロップレットにインストールし、それを使用して2番目のドロップレットでApacheを構成します。 とはいえ、Ansibleの利点の1つは、ローカルマシンにインストールして、手動でsshを実行しなくても他のホストを管理できることです。

このチュートリアルでは、次のものが必要になります。

  • 2つのUbuntu14.04ドロップレット:1つはAnsibleを備えたマスタードロップレットで、もう1つはAnsibleを介して構成されたApacheを実行するセカンダリドロップレットです。
  • 両方のドロップレットのSudo非ルートユーザー
  • マスタードロップレットにインストールされたAnsible。 このチュートリアルに従ってください( SSHキーの設定セクションまで)。 そのチュートリアルはUbuntu12.04用に書かれていますが、それでもUbuntu14.04に関連しています。
  • マスタードロップレットのSSHキーを使用して、セカンダリドロップレットへのログインを承認します。これは、マスタードロップレットのこのチュートリアルに従って実行できます。
  • 構成される仮想ホストを設定して使用するために、アクティブDNSレコード、またはローカルマシンにローカルホストファイルを手動で設定します(セカンダリDropletのIPアドレスを使用)。

:このチュートリアルは、既存のチュートリアルで説明されている概念に従います:UbuntuまたはDebianVPSでApacheWebサーバーを構成する方法。 詳細情報が必要な場合、またはAnsibleプロセスと一緒に手動プロセスを確認したい場合は、そのチュートリアルを確認してください。

ステップ1—Ansibleの設定

このセクションでは、サーバーを管理できるようにAnsibleを構成します。

Ansibleがインストールされたら、最初のステップは、どのホストと通信するかをAnsibleに指示することです。 これを行うには、Ansiblehostsファイルを作成する必要があります。 Ansible hostsファイルには、Ansibleコマンドを実行するときに参照するホストのグループが含まれています。 デフォルトでは、これはにあります /etc/ansible/hosts. ただし、これはシステム全体にグローバルに適用され、多くの場合、管理者権限が必要です。 代わりに、物事を簡単にするために、ローカルホストファイルを使用するようにAnsibleに指示する必要があります。

Ansibleは常に ansible.cfg 実行元のローカルディレクトリにあるファイル。見つかった場合は、グローバル構成をローカル値で上書きします。 これを念頭に置いて、私たちがする必要があるのは、グローバルディレクトリではなくローカルディレクトリのhostsファイルを使用することをAnsibleに伝えることだけです。

新しいディレクトリを作成します(このチュートリアルの残りの部分で使用します)。

mkdir ansible-apache

新しいディレクトリに移動します。

cd ~/ansible-apache/

と呼ばれる新しいファイルを作成します ansible.cfg それを開いて編集します。

nano ansible.cfg

そのファイル内に、 hostfile の値を持つ構成オプション hosts、 以内 [defaults] グループ。 以下をにコピーします ansible.cfg ファイルを保存して閉じます。

[defaults]
hostfile = hosts

次に、 hosts ファイルを書き込む必要があります。 hostsファイルには多くのオプションがあります。 ただし、非常に単純なものから始めることができます。

作成する hosts ファイルを開き、編集用に開きます。

nano hosts

以下をにコピーします hosts ファイル。

[apache]
secondary_server_ip ansible_ssh_user=username

これは、と呼ばれるホストグループを指定します apache 1つのホストが含まれています。 交換 secondary_server_ip セカンダリサーバーのホスト名またはIPアドレス、および username SSHユーザー名を使用します。 これで、Ansibleがサーバーに接続できるようになります。

ansible_ssh_user=username ターゲットホストと同じユーザーとしてAnsibleを実行している場合、コンポーネントはオプションです。

Ansibleが機能していてホストと通信できることをテストするには、基本を実行します ansible 指図。 Ansibleには多くのデフォルトモジュールが付属していますが、開始するのに適した場所はpingモジュールです。 各ホストに接続できるかどうかをチェックします。 hosts 簡単な正確さのためのファイル。

の基本的な使用法 ansible コマンドは、ホストグループとモジュール名を受け入れます。 ansible <group> -m <module>. を実行するには ping コマンドを入力するには、次のコマンドを入力します。

ansible apache -m ping

出力は次のようになります。

111.111.111.111 | success >> {
    "changed": false,
    "ping": "pong"
}

テストに役立つもう1つのAnsibleモジュールは、コマンドモジュールです。 ホスト上でカスタムコマンドを実行し、結果を返します。 を実行するには command コマンドを使用して echo、文字列を端末にエコーするUnixコマンドで、次のコマンドを入力します。

ansible apache -m command -a "/bin/echo hello sammy"

出力は次のようになります。

111.111.111.111 | success | rc=0 >>
hello sammy

これはAnsibleの基本的な使用法です。 真の力は、複数のAnsibleタスクを含むプレイブックを作成することから得られます。 次はそれらについて説明します。

ステップ2—プレイブックを作成する

このセクションでは、より複雑なモジュールを簡単に実行できるようにするための基本的なAnsibleプレイブックを作成します。

非常に基本的なAnsibleプレイブックは単一です yaml ホストグループと、指定されたグループ内のホストで実行される1つ以上のタスクを指定するファイル。 それらは非常にシンプルで読みやすいので、Ansibleが非常に強力である理由の1つです。

の基本的なプレイブックバージョンを作成しましょう hello sammy 上記のコマンド。

というファイルを作成します apache.yml それを開いて編集します。

nano apache.yml

次のテキストをファイルにコピーし、保存して閉じます。

---
- hosts: apache
  tasks:
    - name: run echo command
      command: /bin/echo hello sammy

The hosts: apache 宣言が一番上にあり、Ansibleに apache ホストグループ。 これは、 ansible 指図。 次に、タスクのリストがあります。 この例では、名前が1つのタスクがあります run echo command. これは、ユーザーがタスクの実行内容を理解することを目的とした単なる説明です。 最後に、 command: /bin/echo hello sammy ラインは command 引数を持つモジュール /bin/echo hello sammy.

The ansible-playbook コマンドはプレイブックを実行するために使用され、最も簡単な使用法は次のとおりです。 ansible-playbook your-playbook.yml. 次のコマンドで、作成したばかりのプレイブックを実行できます。

ansible-playbook apache.yml

出力は次のようになります。

PLAY [apache] *****************************************************************

GATHERING FACTS ***************************************************************
ok: [111.111.111.111]

TASK: [run echo command] ******************************************************
changed: [111.111.111.111]

PLAY RECAP ********************************************************************
111.111.111.111            : ok=2    changed=1    unreachable=0    failed=0

ここで注意すべき最も重要なことは、プレイブックはモジュールの出力を返さないため、手順1で使用した直接コマンドとは異なり、次のことを確認できないことです。 hello sammy 実際に印刷されました。 つまり、プレイブックは、出力を確認する必要がないタスクに適しています。 Ansibleは、モジュールの実行中にエラーが発生したかどうかを通知するため、通常は、何か問題が発生したかどうかを知るために、それに依存するだけで済みます。

ステップ3—Apacheをインストールする

プレイブックを紹介したので、ApacheWebサーバーをインストールするタスクを記述します。

通常、Ubuntuでは、Apacheのインストールは簡単なケースです。 apache2 パッケージ経由 apt-get. Ansibleを介してこれを行うには、Ansibleのaptモジュールを使用します。 The apt モジュールには、専門的なオプションがいくつか含まれています apt-get 機能。 私たちが興味を持っているオプションは次のとおりです。

  • name :インストールするパッケージの名前。単一のパッケージ名またはパッケージのリストのいずれかです。
  • 状態:いずれかを受け入れます latest, absent、 また present. 最新バージョンは最新バージョンがインストールされていることを確認し、存在は単にインストールされていることを確認し、存在しない場合はインストールされている場合は削除します。
  • update_cache :キャッシュを更新します(経由 apt-get update)有効になっている場合は、最新であることを確認します。

:以外のパッケージマネージャー apt モジュールもあります。 各モジュールページには、通常、すべての主要なユースケースをカバーする例があり、各モジュールの使用方法を非常に簡単に理解できます。 使用方法について他の場所を探す必要があることはめったにありません。

それでは、更新しましょう apache.yml とのプレイブック apt の代わりにモジュール command モジュール。 開く apache.yml 再度編集するためのファイル。

nano apache.yml

現在そこにあるテキストを削除し、次のテキストをコピーします。

---
- hosts: apache
  sudo: yes
  tasks:
    - name: install apache2
      apt: name=apache2 update_cache=yes state=latest

The apt 行はをインストールします apache2 パッケージ (name=apache2)そしてキャッシュを更新したことを確認します(update_cache=yes). オプションですが、 state=latest インストールする必要があることを明示することをお勧めします。

Playbookが次のように実行されていない限り root 各ホストで、 sudo 適切な特権を確保するために必要になります。 Ansibleのサポート sudo Playbook内の単純なオプションの一部として。 それはまた経由で適用することができます ansible-playbook コマンドおよびタスクごとのレベル。

次に、プレイブックを実行します。

ansible-playbook apache.yml --ask-sudo-pass

The --ask-sudo-pass フラグは、セカンダリドロップレットのsudoパスワードの入力を求めます。 インストールにはroot権限が必要なため、これが必要です。 これまでに実行した他のコマンドは実行しませんでした。

出力は次のようになります。

PLAY [apache] *****************************************************************

GATHERING FACTS ***************************************************************
ok: [111.111.111.111]

TASK: [install apache2] *******************************************************
changed: [111.111.111.111]

PLAY RECAP ********************************************************************
111.111.111.111            : ok=2    changed=1    unreachable=0    failed=0

ブラウザでセカンダリサーバーのホスト名またはIPアドレスにアクセスすると、Apache2Ubuntuデフォルトページが表示されます。 これは、サーバーにApacheがインストールされていて、コマンドを実行するために手動で接続していないことを意味します。

この時点で注意すべき重要な概念は、べき等です。これは、Ansibleモジュールの動作の基礎となるものです。 同じコマンドを繰り返し実行できるという考え方ですが、最初の実行ですべてが構成されている場合、それ以降のすべての実行では変更は行われません。 ほぼすべてのAnsibleモジュールがそれをサポートしています。 apt モジュール。

たとえば、同じプレイブックコマンドをもう一度実行します。

ansible-playbook apache.yml --ask-sudo-pass

出力は次のようになります。 に注意してください changed=0 セクション。

PLAY [apache] *****************************************************************

GATHERING FACTS ***************************************************************
ok: [111.111.111.111]

TASK: [install apache2] *******************************************************
ok: [111.111.111.111]

PLAY RECAP ********************************************************************
111.111.111.111            : ok=2    changed=0    unreachable=0    failed=0

これは、 apache2 パッケージはすでにインストールされているため、何も変更されていません。 多くのホストにまたがる複雑なプレイブックを扱う場合、異なるホストを識別できると非常に便利になります。 たとえば、ホスト常にが特定の構成を更新する必要があることに気付いた場合、そのホスト上にそれを変更しているユーザーまたはプロセスが存在する可能性があります。 べき等がなければ、これは決して気付かれないかもしれません。

ステップ4—Apacheモジュールの構成

Apacheがインストールされたので、モジュールをApacheで使用できるようにする必要があります。

確認しましょう mod_rewrite モジュールはApacheに対して有効になっています。 SSH経由で、これはを使用して簡単に行うことができます a2enmod Apacheを再起動します。 ただし、 apache2_module モジュールとタスクハンドラーを使用して再起動することで、Ansibleを使用して非常に簡単に実行することもできます。 apache2.

The apache2_module モジュールには2つのオプションがあります。

  • name –有効にするモジュールの名前(例: rewrite.
  • 状態–どちらか present また absent、モジュールを有効にする必要があるか無効にする必要があるかによって異なります。

開ける apache.yml 編集用。

nano apache.yml

このタスクを含めるようにファイルを更新します。 ファイルは次のようになります。

---
- hosts: apache
  sudo: yes
  tasks:
    - name: install apache2
      apt: name=apache2 update_cache=yes state=latest

    - name: enabled mod_rewrite
      apache2_module: name=rewrite state=present

ただし、再起動する必要があります apache2 モジュールが有効になった後。 1つのオプションは、再起動するタスクを追加することです apache2、ただし、プレイブックを適用するたびに実行する必要はありません。 これを回避するには、タスクハンドラーを使用する必要があります。 ハンドラーの動作方法は、タスクが変更されたときにハンドラーに通知するようにタスクに指示でき、ハンドラーはタスクが変更されたときにのみ実行されるというものです。

これを行うには、を追加する必要があります notify オプションを apache2_module タスクを実行すると、serviceモジュールを使用して再起動できます apache2 ハンドラーで。

その結果、次のようなプレイブックが作成されます。

---
- hosts: apache
  sudo: yes
  tasks:
    - name: install apache2
      apt: name=apache2 update_cache=yes state=latest

    - name: enabled mod_rewrite
      apache2_module: name=rewrite state=present
      notify:
        - restart apache2

  handlers:
    - name: restart apache2
      service: name=apache2 state=restarted

次に、プレイブックを再実行します。

ansible-playbook apache.yml --ask-sudo-pass

出力は次のようになります。

PLAY [apache] *****************************************************************

GATHERING FACTS ***************************************************************
ok: [111.111.111.111]

TASK: [install apache2] *******************************************************
ok: [111.111.111.111]

TASK: [enabled mod_rewrite] ***************************************************
changed: [111.111.111.111]

NOTIFIED: [restart apache2] ***************************************************
changed: [111.111.111.111]

PLAY RECAP ********************************************************************
111.111.111.111            : ok=4    changed=2    unreachable=0    failed=0

今のところ良さそうです。 ここで、コマンドを再度実行すると、変更はないはずであり、再起動タスクはリストされません。

ステップ5—Apacheオプションの構成

必要なモジュールがオンになっているApacheのインストールが機能しているので、Apacheを構成する必要があります。

デフォルトでは、ApacheはすべてのHTTPトラフィックをポート80でリッスンします。 チュートリアルのために、代わりにApacheがポート8081でリッスンするようにしたいとします。 Ubuntu 14.04 x64のデフォルトのApache構成では、更新が必要なファイルが2つあります。

/etc/apache2/ports.conf
    Listen 80

/etc/apache2/sites-available/000-default.conf
    <VirtualHost *:80>

これを行うには、lineinfileモジュールを使用できます。 このモジュールは非常に強力であり、さまざまな構成オプションを使用することで、ホスト上の既存のファイルに対してあらゆる種類の変更を実行できます。 この例では、次のオプションを使用します。

  • dest –コマンドの一部として更新されるファイル。
  • regexp –置換される既存の行を照合するために使用される正規表現。
  • line –ファイルに挿入される行。 regexp 行または最後の新しい行として。
  • 状態–どちらか present また absent.

lineinfile モジュールは、既存の行とファイルの行が一致しない場合、ファイルの最後に行を追加します regexp. オプション insertbeforeinsertafter 必要に応じて、最後ではなく前または後に追加する行を指定できます。

からポートを更新するために必要なこと 808081 ポートを定義する既存の行を探します 80、およびそれらを変更してポートを定義します 8081.

を開きます apache.yml 編集用のファイル。

nano apache.yml

ファイルが次のようになるように、追加の行を修正します。

---
- hosts: apache
  sudo: yes
  tasks:
    - name: install apache2
      apt: name=apache2 update_cache=yes state=latest

    - name: enabled mod_rewrite
      apache2_module: name=rewrite state=present
      notify:
        - restart apache2

    - name: apache2 listen on port 8081
      lineinfile: dest=/etc/apache2/ports.conf regexp="^Listen 80" line="Listen 8081" state=present
      notify:
        - restart apache2

    - name: apache2 virtualhost on port 8081
      lineinfile: dest=/etc/apache2/sites-available/000-default.conf regexp="^<VirtualHost \*:80>" line="<VirtualHost *:8081>" state=present
      notify:
        - restart apache2

  handlers:
    - name: restart apache2
      service: name=apache2 state=restarted

また、再起動する必要があることに注意することが重要です apache2 このプロセスの一部として、同じハンドラーを再利用できますが、複数のタスクが変更されたにもかかわらず、ハンドラーは1回だけトリガーされます。

次に、プレイブックを実行します。

ansible-playbook apache.yml --ask-sudo-pass

Ansibleが終了すると、ブラウザでホストにアクセスできるようになり、ポートで応答します。 8081、ポートではなく 80. ほとんどのWebブラウザーでは、これを追加することで簡単に実現できます。 :port URLの最後に: http://111.111.111.111:8081/.

The lineinfile モジュールは非常に強力であり、既存の構成を非常に簡単に操作できます。 唯一の落とし穴は、変更するファイルで何を期待するかを知る必要があるということですが、最も単純なユースケースをサポートするさまざまなオプションをサポートしています。

ステップ6—仮想ホストの構成

Ansibleは、ローカル(Ansibleに)テンプレートファイルをホストにコピーする機能を提供するいくつかのモジュールを備えています。 この目的で最も一般的に使用される2つのモジュールは、copyモジュールとtemplateモジュールです。 The copy モジュールはファイルをそのままコピーし、変更を加えませんが、より強力です template モジュールはテンプレート全体をコピーし、二重中括弧を使用して指定した領域に変数置換を適用します(つまり、 {{ variable }}).

このセクションでは、 template モジュールを使用して、サーバー上に新しい仮想ホストを構成します。 多くの変更があるので、それらを少しずつ説明し、更新された全体を含めます apache.yml このステップの最後にファイルします。

仮想ホスト構成の作成

最初のステップは、新しい仮想ホスト構成を作成することです。 マスタードロップレットに仮想ホスト構成ファイルを作成し、Ansibleを使用してセカンダリドロップレットにアップロードします。

これは、独自の構成の開始点として使用できる基本的な仮想ホスト構成の例です。 以下で強調表示されているポート番号とドメイン名の両方が構成にハードコードされていることに注意してください。

<VirtualHost *:8081>
    ServerAdmin webmaster@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

と呼ばれる新しいファイルを作成します virtualhost.conf.

nano virtualhost.conf

以下をに貼り付けます virtualhost.conf. テンプレートを使用しているため、将来変更しやすいように、上記のハードコードされた値を変数に変更することをお勧めします。

<VirtualHost *:{{ http_port }}>
    ServerAdmin webmaster@{{ domain }}
    ServerName {{ domain }}
    ServerAlias www.{{ domain }}
    DocumentRoot /var/www/{{ domain }}
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

テンプレート変数を使用する

次に、プレイブックを更新してテンプレートをプッシュし、変数を使用する必要があります。

最初のステップは、変数のプレイブックにセクションを追加することです。 いわゆる vars と同じレベルになります hosts, sudo, tasks、 と handlers. 上記のテンプレートで使用されている両方の変数を入力する必要があります。ポートをに戻します。 80 過程の中で。

---
- hosts: apache
  sudo: yes
  vars:
    http_port: 80
    domain: example.com
  tasks:
    - name: install apache2
...

変数はタスクとテンプレートで使用できるため、既存の変数を更新できます lineinfile 指定されたモジュールを使用する http_port、ハードコードされたものではなく 8081 前に指定しました。 変数を行に追加する必要があり、 regexp 特定のポートを検索しないように、オプションを更新する必要があります。 変更は次のようになります。

lineinfile: dest=/etc/apache2/ports.conf regexp="^Listen " line="Listen {{ http_port }}" state=present
lineinfile: dest=/etc/apache2/sites-available/000-default.conf regexp="^<VirtualHost \*:" line="<VirtualHost *:{{ http_port }}>"

テンプレートモジュールの追加

次のステップは、テンプレートモジュールを追加して、構成ファイルをホストにプッシュすることです。 これらのオプションを使用して、それを実現します。

  • dest –更新されたテンプレートをホストに保存するための宛先ファイルパス。 /etc/apache2/sites-available/{{ domain }}.conf.
  • src –ソーステンプレートファイル、つまり virtualhost.conf.

これらをプレイブックに適用すると、次のようなタスクになります。

- name: create virtual host file
  template: src=virtualhost.conf dest=/etc/apache2/sites-available/{{ domain }}.conf

仮想ホストを有効にする

ほぼ完了しました! ここで行う必要があるのは、Apache内で仮想ホストを有効にすることです。 これは、次の2つの方法で実行できます。 sudo a2ensite example.com コマンドを実行するか、構成ファイルを手動でシンボリックリンクします /etc/apache2/sites-enabled/. 前者のオプションは、Apacheがプロセスを制御できるため、より安全です。 このために、 command モジュールが再び使用されます。

上で発見したように、使用法は非常に簡単です。

- name: a2ensite {{ domain }}
  command: a2ensite {{ domain }}
  notify:
  - restart apache2

余分な作業を防ぐ

最後に、 command モジュールは、いつ実行すべきか、実行すべきでないかを知る必要があるため、プレイブックが複数回実行されても、モジュールが不必要に実行されることはありません。 私たちの場合、それは次の場合にのみ実行する必要があります .conf ファイルはまだホスト上に作成されていません。

これは、 creates オプション。これにより、モジュールの実行中に作成されているファイルをモジュールに通知できます。 ファイルが存在する場合、モジュールは実行されません。 サイトが有効になるとApacheはシンボリックリンクを作成するため、それをチェックすると問題が解決します。

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

- name: a2ensite {{ domain }}
  command: a2ensite {{ domain }}
  args:
    creates: /etc/apache2/sites-enabled/{{ domain }}.conf
  notify:
  - restart apache2

の使用に注意することが重要です args タスクのセクション。 これは、モジュールオプションを一覧表示するオプションの方法であり、この場合、モジュールオプションとコマンド自体の間の混乱を取り除きます。

最後の apache.yml プレイブック

次に、これらの変更を適用しましょう。 開ける apache.yml.

nano apache.yml

上記のすべての変更で、 apache.yml このように見えるプレイブック。

---
- hosts: apache
  sudo: yes
  vars:
    http_port: 80
    domain: example.com
  tasks:
    - name: install apache2
      apt: name=apache2 update_cache=yes state=latest

    - name: enabled mod_rewrite
      apache2_module: name=rewrite state=present
      notify:
        - restart apache2

    - name: apache2 listen on port {{ http_port }}
      lineinfile: dest=/etc/apache2/ports.conf regexp="^Listen " line="Listen {{ http_port }}" state=present
      notify:
        - restart apache2

    - name: apache2 virtualhost on port {{ http_port }}
      lineinfile: dest=/etc/apache2/sites-available/000-default.conf regexp="^<VirtualHost \*:" line="<VirtualHost *:{{ http_port }}>"
      notify:
        - restart apache2

    - name: create virtual host file
      template: src=virtualhost.conf dest=/etc/apache2/sites-available/{{ domain }}.conf

    - name: a2ensite {{ domain }}
      command: a2ensite {{ domain }}
      args:
        creates: /etc/apache2/sites-enabled/{{ domain }}.conf
      notify:
        - restart apache2

  handlers:
    - name: restart apache2
      service: name=apache2 state=restarted

ファイルを保存して閉じてから、プレイブックを実行します。

ansible-playbook apache.yml --ask-sudo-pass

ブラウザでセカンダリドロップレットのホスト名またはIPアドレスにアクセスすると、ポートで応答することがわかります。 80 繰り返しますが、ポートではありません 8081. 次に、ドメインにアクセスします(つまり、 example.com)新しい仮想ホストに指定しました。 まだファイルを追加していないため、Apacheが表示されます。 404 Apacheのウェルカムページではなくエラーページ。 その場合、仮想ホストは正しく機能していますが、単一のコマンドを実行するためにセカンダリドロップレットにSSHで接続していません。

ステップ7—WebサイトにGitリポジトリを使用する

このセクションでは、Ansibleを使用してGitリポジトリのクローンを作成し、Webサイトのコンテンツを設定します。

すべてのウェブサイトにはコンテンツが必要です。SSHで接続してGitリポジトリを手動で複製して新しいウェブサイトを設定するのが普通ですが、Ansibleはそれを自動的に行うために必要なツールを提供してくれます。 この例では、gitモジュールが必要な処理を実行します。

The git モジュールには多くのオプションがあり、このチュートリアルに関連するものは次のとおりです。

  • dest –リポジトリがチェックアウトされるホスト上のパス。
  • repo –クローンされるリポジトリのURL。 これは、ホストがアクセスできる必要があります。
  • update –に設定されている場合 no、これにより、Ansibleがリポジトリを既に存在している場合に更新できなくなります。
  • accept_hostkey –SSH経由で接続するときに不明なホストキーを受け入れるようにSSHに指示します。 これは、最初のログイン試行を受け入れるためにSSH経由でログインする必要がないため非常に便利ですが、ホストの署名を手動でチェックする機能が削除されます。 リポジトリによっては、このオプションが必要になる場合があります。

チュートリアルの目的のために、単一の単純なGitリポジトリがあります index.html ホストに複製できるページ。 同様のものを含む別の公開リポジトリがすでにある場合は、それを自由に置き換えてください。 それを念頭に置いて、 git タスクは次のようになります。

- name: clone basic html template
  git: repo=https://github.com/do-community/ansible-apache-tutorial.git dest=/var/www/example.com update=no

ただし、ここでPlaybookを実行すると、エラーが発生する可能性があります。 最初にインストールする必要があります git Ansibleがリポジトリのクローンを作成するために使用できるようにパッケージ化します。 The apt 両方をインストールするには、タスクを更新する必要があります apache2 パッケージと git パッケージ。 apt のドキュメントを確認すると、 name オプションは単一のパッケージしか受け取らないので、それは役に立ちません。 代わりに、アイテムのリストを使用する必要があります。

Ansibleは、ループするアイテムのリストを指定して、それぞれにタスクを適用する機能を提供します。 それらはを使用して指定されます with_items タスクの一部としてのオプション、および apt タスクは次のように更新されます。

- name: install packages
  apt: name={{ item }} update_cache=yes state=latest
  with_items:
    - apache2
    - git

アイテムのリストは item 変数であり、リスト内の各項目のタスクを実行します。

開ける apache.yml また。

nano apache.yml

以下に一致するようにプレイブックを更新します。

---
- hosts: apache
  sudo: yes

  vars:
    http_port: 80
    domain: example.com

  tasks:

    - name: install packages
      apt: name={{ item }} update_cache=yes state=latest
      with_items:
        - apache2
        - git

    - name: enabled mod_rewrite
      apache2_module: name=rewrite state=present
      notify:
        - restart apache2

    - name: apache2 listen on port {{ http_port }}
      lineinfile: dest=/etc/apache2/ports.conf regexp="^Listen " line="Listen {{ http_port }}" state=present
      notify:
        - restart apache2

    - name: apache2 virtualhost on port {{ http_port }}
      lineinfile: dest=/etc/apache2/sites-available/000-default.conf regexp="^<VirtualHost \*:" line="<VirtualHost *:{{ http_port }}>"
      notify:
        - restart apache2

    - name: create virtual host file
      template: src=virtualhost.conf dest=/etc/apache2/sites-available/{{ domain }}.conf

    - name: a2ensite {{ domain }}
      command: a2ensite {{ domain }}
      args:
        creates: /etc/apache2/sites-enabled/{{ domain }}.conf
      notify:
        - restart apache2

    - name: clone basic html template
      git: repo=https://github.com/do-community/ansible-apache-tutorial.git dest=/var/www/example.com update=no

  handlers:
    - name: restart apache2
      service: name=apache2 state=restarted

ファイルを保存して、プレイブックを実行します。

ansible-playbook apache.yml --ask-sudo-pass

インストールする必要があります git リポジトリのクローンを作成します。 手順6から仮想ホストにアクセスすると、404エラー以外のエラーが表示されるはずです。 非仮想ホストがまだデフォルトページを返していることを確認することを忘れないでください。

要約すると、これでGitがインストールされ、基本的なHTMLページがGitを介して新しい仮想ホストに複製されました。 手動のSSHコマンドはまだ必要ありません。 基本的なHTMLWebサイトを探していて、それがパブリックGitリポジトリにある場合は、これで完了です。

結論

Ansible Playbookを作成して、仮想ホストとGitリポジトリを使用してApacheWebサーバーを実行するようにホストを構成するプロセス全体を自動化しました。 これらはすべて、サーバーに直接ログインする必要なしに達成されました。最良の部分は、ほとんどのUbuntuサーバーに対して新しいPlaybookを実行して、同じ結果を達成できることです。

:ホストにすでにApacheがセットアップおよび変更されている場合、必要な状態に戻すには、ほとんどの場合、各変更を処理する必要があります。 良い面として、Ansibleはこれらの変更が存在する場合にのみ修正するため、メインのPlaybookにそれらを含めるのは安全です。

Ansibleは非常に強力で、学習曲線も非常に簡単です。 このチュートリアルで説明されている基本的な概念を使用して開始し、このレベルにとどまるか、非常に複雑な部分に到達するためにさらに多くを学ぶことができます。 どちらの方法でも、すべてではないにしてもほとんどのタスクに手動でログインしなくても、サーバーを構成および管理できます。

Ansibleモジュールリストを参照して、Ansibleが他に何ができるかを確認できます。