Edited at

AnsibleでWordPressサーバ構築

More than 3 years have passed since last update.

やっとAnsibleを仕事で使い始めました。

といっても、開発環境として、ですが。

今まで、WordPress案件の依頼を受けるたびに、開発環境を手作業で構築していました。

ローカルPC上にLAMP環境とか、安いレンタルサーバにファイルアップ&MySQLデータベース構築などなど、、、

公開前のWebサイトをお客さんに確認してもらうために、Basic認証設定を追加したり、

毎回必要な作業、煩わしいですね。

そのような作業を楽にするため、

Ansibleを使って、GCE(GoogleComputeEngine)のクラウドサーバ上に構築するように実装しました。

GCEでプロジェクトを作成しておけば、いくつでもWordPress環境を追加できます。

お仕事が捗りますねw

そんなPlaybookをgithubにアップしておきました。

:octocat: ansible-gce



  • 動作確認環境


    • OS X 10.10.5

    • Python 2.7.10

    • Ansible 1.9.4

    • Apache libcloud 0.20.0



初期設定については、

AnsibleでGCEインスタンスを管理する - Qiita

を参考にしてください。

以下のコマンドでインスタンスが生成され、いつでもWordPressの環境が手に入ります。

$ 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: オススメ :thumbsup:

2つ目の環境が欲しいなら、/vars/target_wp.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)からは


gce_wordpress.yml

roles:

- wordpress

というセクションを記述することで呼び出すことができます。


2. dependenciesでWordPressに必要なroleを実行する

WordPressを使うには、ApacheやMySQL、PHPのインストールが必要になりますが、

Playbookで各々を指示する必要はありません。

roles/wordpress/meta/main.yml

というファイルを作成して、dependenciesセクションを記述することで

Ansibleが、WordPressのタスクを実行する前に、dependenciesセクションの各roleを実行してくれます。


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_namebasic_auth_passというセクションが続いています。

これらは apacheroleに渡す変数を記述しています。

今回作成したApacheインストール用role roles/apache/meta/main.yml には、

Basic認証を設定するタスクを記述しています。

そのために必要な ID/PW の値を渡しています。

もし、dependenciesの中でbasic_auth_namebasic_auth_passを指定せず

- {role: apache}

という記述だけにした場合、

純粋にApacheのインストールしか行わなず、Basic認証無しのWordPress環境が構築されます。

(Apacheインストール用role側で変数の指定有無をチェックしています)

同様にMySQLインストール用roleも、

変数に応じてWordPressに必要なデータベースを作成します。

(MySQL向けの変数を削除してしまうと、WordPressが動かないので注意!)


参考

あとは、

開発作業後に、本番へ移行する際もこんな調子でいきたいですね。