Help us understand the problem. What is going on with this article?

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が動かないので注意!)

参考

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

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away