1. curious-eyes

    Posted

    curious-eyes
Changes in title
+AnsibleでWordPressサーバ構築
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,125 @@
+
+やっとAnsibleを仕事で使い始めました。
+といっても、開発環境として、ですが。
+
+今まで、WordPress案件の依頼を受けるたびに、開発環境を手作業で構築していました。
+ローカルPC上にLAMP環境とか、安いレンタルサーバにファイルアップ&MySQLデータベース構築などなど
+公開前のWebサイトをお客さんに確認してもらうために、Basic認証設定を追加したり、
+毎回必要な作業、煩わしいですね。
+
+そのような作業を楽にするため、
+Ansibleを使って、GCE(GoogleComputeEngine)のクラウドサーバ上に構築するように実装しました。
+GCEでプロジェクトを作成しておけば、いくつでもWordPress環境を追加できます。
+お仕事が捗りますねw
+
+そんなPlaybookをgithubにアップしておきました。
+github : [ansible-gce](https://github.com/curious-eyes/ansible-gce)
+
+初期設定については、
+[AnsibleでGCEインスタンスを管理する - Qiita](http://qiita.com/curious-eyes/items/c7feb3edbeb7c7c640e6)
+を参考にしてください。
+
+以下のコマンドでインスタンスが生成され、いつでもWordPressの環境が手に入ります。
+
+```bash
+$ gce_ansible.sh gce_wordpress.yml
+```
+
+あとは、ブラウザを起動して、生成したインスタンスのIPアドレスにアクセスすれば、いつものWordPress開始画面が表示されます。
+* Basic認証かかってます(初期設定は、ID:demo, PW:demopass)
+* ID/PWの変更は、`roles/wordpress/meta/main.yml` を編集してください(後述)
+
+ローカルPCで開発したソースコードをsftpでアップするもよし。
+Gitをインストールしているので、`git push`するもよし。<- :octocat: オススメ :+1:
+
+2つ目の環境が欲しいなら、`/vars/target_wp.yml`で新しいインスタンス名を指定しましょう。
+
+```yml:/vars/target_wp.yml
+names: www-wp <- インスタンス名
+```
+
+## このPlaybookで実行していること
+- 生成したインスタンスのTimeZone & Locale設定
+- Gitインストール
+- Apacheインストール
+- Basic認証設定
+- MySQLインストール
+- Create Database
+- PHPインストール
+- WordPress(ja)最新版ダウンロード
+- wp-config.php設定
+
+
+## 今回のポイント
+1. `role`を使った
+2. `dependencies`でWordPressに必要なroleを実行できるようにした
+3. role実行時に変数を渡すことで、roleの動作を制御してみた
+
+### 1. `role`を使った
+
+roleは、Playbookのタスクを別ファイルに切り出して、再利用性を高める仕組みです。
+`roles`ディレクトリを作成して、
+`roles/wordpress/tasks/main.yml`
+というファイルパスでタスクを記述していくと、
+メインのPlaybook(今回でいうところの`gce_wordpress.yml`)からは
+
+```yaml:gce_wordpress.yml
+roles:
+ - wordpress
+```
+というセクションを記述することで呼び出すことができます。
+
+
+### 2. `dependencies`でWordPressに必要なroleを実行できるようにした
+
+WordPressを使うには、ApacheやMySQL、PHPのインストールが必要になりますが、
+Playbookで各々を指示する必要はありません。
+
+`roles/wordpress/meta/main.yml`
+というファイルを作成して、`dependencies`セクションを記述することで
+Ansibleが、WordPressのタスクを実行する前に、`dependencies`セクションの各roleを実行してくれます。
+
+```yaml:roles/wordpress/meta/main.yml
+dependencies:
+ - { role: apache,
+ basic_auth_name: "demo",
+ basic_auth_pass: "demopass"
+ }
+ - { role: mysql,
+ mysql_db_name: "wordpress",
+ mysql_db_user: "wpuser",
+ mysql_db_password: "wppass1234"
+ }
+ - { role: php }
+```
+
+メインのPlaybook側はシンプルになりますし、別のPlaybookでも再利用しやすく、可搬性が高まりますね。
+
+### 3. role実行時に変数を渡すことで、roleの動作を制御してみた
+
+前述の`dependencies`セクションに必要なのは、`role`セクションだけですが、
+`role: apache` の後に `basic_auth_name`や`basic_auth_pass`というセクションが続いています。
+これらは `apache`roleに渡す変数を記述しています。
+
+今回作成したApacheインストール用role `roles/apache/meta/main.yml` には、
+Basic認証を設定するタスクを記述しています。
+そのために必要な ID/PW の値を渡しています。
+
+もし、`dependencies`の中で`basic_auth_name`や`basic_auth_pass`を指定せず
+`- {role: apache}`
+という記述だけにした場合、
+純粋にApacheのインストールしか行わなず、Basic認証無しのWordPress環境が構築されます。
+(Apacheインストール用role側で変数の指定有無をチェックしています)
+
+同様にMySQLインストール用roleも、
+変数に応じてWordPressに必要なデータベースを作成します。
+(MySQL向けの変数を削除してしまうと、WordPressが動かないので注意!)
+
+
+## 参考
+- [Ansibleのroleを使いこなす : Qiita](http://qiita.com/hnakamur/items/63f2d94badf89246e04a)
+- [Role Dependencies : Ansible Documentation](http://docs.ansible.com/playbooks_roles.html#role-dependencies)
+
+
+あとは、
+開発作業後に、本番へ移行する際もこんな調子でいきたいですね。