1. curious-eyes

    No comment

    curious-eyes
Changes in body
Source | HTML | Preview
@@ -1,126 +1,133 @@
やっとAnsibleを仕事で使い始めました。
といっても、開発環境として、ですが。
今まで、WordPress案件の依頼を受けるたびに、開発環境を手作業で構築していました。
ローカルPC上にLAMP環境とか、安いレンタルサーバにファイルアップ&MySQLデータベース構築などなど、、、
公開前のWebサイトをお客さんに確認してもらうために、Basic認証設定を追加したり、
毎回必要な作業、煩わしいですね。
そのような作業を楽にするため、
Ansibleを使って、GCE(GoogleComputeEngine)のクラウドサーバ上に構築するように実装しました。
GCEでプロジェクトを作成しておけば、いくつでもWordPress環境を追加できます。
お仕事が捗りますねw
そんなPlaybookをgithubにアップしておきました。
:octocat: [ansible-gce](https://github.com/curious-eyes/ansible-gce)
+* 動作確認環境
+
+ - OS X 10.10.5
+ - Python 2.7.10
+ - Ansible 1.9.4
+ - Apache libcloud 0.20.0
+
初期設定については、
[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)
あとは、
開発作業後に、本番へ移行する際もこんな調子でいきたいですね。