Ubuntu14.04でAnsibleを使用してApacheを構成する方法
序章
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
. オプション insertbefore
と insertafter
必要に応じて、最後ではなく前または後に追加する行を指定できます。
からポートを更新するために必要なこと 80
に 8081
ポートを定義する既存の行を探します 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が他に何ができるかを確認できます。