akiyoko blog

akiyoko の IT技術系ブログです

Ansibleで WordPress日本語版(3.9.1) を楽々インストール

Ansible で CentOS 6.5 に WordPress + Nginx + PHP-FPM 環境をさくっと構築(Vagrantバージョン & さくらのVPSバージョン)」の続きです。


前回は、
https://github.com/ansible/ansible-examples/tree/master/wordpress-nginx
の Ansible Playbook を使って、Vagrant で起動した仮想マシン (CentOS 6.5) に WordPress + Nginx + PHP-FPM の環境構築を試してみたわけですが、今回は、WordPress のバージョンを WordPress日本語版の最新版(2014年6月時点)に入れ替えてみたいと思います。


やりたいこと

Vagrant + VirtualBox で起動した仮想マシン(CentOS 6.5)に、Ansible を使って WordPress日本語版 3.9.1 + Nginx + PHP-FPM を自動構築

環境



改良したのは、以下の二点です。
二つ目は、前回「何でだろ?」と気になっていたのでついでに直してみました。

  1. WordPress のバージョンを、3.7 から 日本語版 3.9.1 に入れ替え
  2. SELinux が有効でないとエラーになっていた問題を解決


なお、改良バージョンの Playbook は GitHub にアップしておきました。
どうぞお使いくださいませ。
https://github.com/akiyoko/ansible-examples



やったこと

1. WordPress のバージョンを、3.7 から 日本語版 3.9.1 に入れ替え

diff --git a/wordpress-nginx/group_vars/all b/wordpress-nginx/group_vars/all
index 1d198eb..1920cf8 100644
--- a/wordpress-nginx/group_vars/all
+++ b/wordpress-nginx/group_vars/all
@@ -1,7 +1,7 @@
 ---
 # Which version of Wordpress to deploy
-wp_version: 3.7
-wp_sha256sum: 94b8b7a7241ec0817defa1c35f738d777f01ac17a4e45ee325c0f1778504fd94
+wp_version: 3.9.1
+wp_sha256sum: f08b4712b352fbf8d76697ff402f1edaefb3f310115343e1850c03ec97acd874
 
 # These are the Wordpress database settings
 wp_db_name: wordpress 
diff --git a/wordpress-nginx/roles/wordpress/tasks/main.yml b/wordpress-nginx/roles/wordpress/tasks/main.yml
index c3e1a95..59d6835 100644
--- a/wordpress-nginx/roles/wordpress/tasks/main.yml
+++ b/wordpress-nginx/roles/wordpress/tasks/main.yml
@@ -1,6 +1,6 @@
 ---
 - name: Download Wordpress
-  get_url: url=http://wordpress.org/wordpress-{{ wp_version }}.tar.gz dest=/srv/wordpress-{{ wp_version }}.tar.gz
+  get_url: url=http://ja.wordpress.org/wordpress-{{ wp_version }}-ja.tar.gz dest=/srv/wordpress-{{ wp_version }}.t
            sha256sum="{{ wp_sha256sum }}"
 
 - name: Extract archive
@@ -27,4 +27,4 @@
   template: src=wp-config.php dest=/srv/wordpress/
 
 - name: Change ownership of Wordpress installation
-  file: path=/srv/wordpress/ owner=wordpress group=wordpress state=directory recurse=yes
\ No newline at end of file
+  file: path=/srv/wordpress/ owner=wordpress group=wordpress state=directory recurse=yes
diff --git a/wordpress-nginx/roles/wordpress/templates/wp-config.php b/wordpress-nginx/roles/wordpress/templates/wp
index a570c72..ead9e45 100644
--- a/wordpress-nginx/roles/wordpress/templates/wp-config.php
+++ b/wordpress-nginx/roles/wordpress/templates/wp-config.php
@@ -63,7 +63,7 @@ $table_prefix  = 'wp_';
  * de_DE.mo to wp-content/languages and set WPLANG to 'de_DE' to enable German
  * language support.
  */

https://github.com/akiyoko/ansible-examples/commit/085cdbb7e2e6370c22ae6a9db7e923463872b380


WordPress の取得先を変更して、SHA256チェックサム(ファイルが正常にダウンロードできたかをチェックするためのもの)を調べて書き換えました。

$ curl -O http://ja.wordpress.org/wordpress-3.9.1-ja.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 6098k  100 6098k    0     0  1078k      0  0:00:05  0:00:05 --:--:-- 1348k

$ shasum -a 256 wordpress-3.9.1-ja.tar.gz 
f08b4712b352fbf8d76697ff402f1edaefb3f310115343e1850c03ec97acd874  wordpress-3.9.1-ja.tar.gz

参考




wp-config.phpWordPress日本語版の構築時に自動生成されるものに差し替えてしまおうと思ったのですが、比較してみたところ、

define('WPLANG', 'ja');

に変わっていたのと、以下の定義が無くなっていたのしか差分がありませんでした(コメントが日本語になっていたのを除いて)。

/** Disable Automatic Updates Completely */
define( 'AUTOMATIC_UPDATER_DISABLED', {{auto_up_disable}} );

/** Define AUTOMATIC Updates for Components. */
define( 'WP_AUTO_UPDATE_CORE', {{core_update_level}} );

なので結局、元の英語版のものを活かして最低限の修正をすることにしました(「WPLANG」の部分だけ)。


「AUTOMATIC_UPDATER_DISABLED」「WP_AUTO_UPDATE_CORE」については、こちらのサイトが分かりやすかったです。
http://notnil-creative.com/blog/archives/2521

つまり、https://github.com/ansible/ansible-examples/tree/master/wordpress-nginx のデフォルトでは、

// 自動バックグラウンドアップデート機能をOFFにしない(=自動バッググラウンドアップデートを適用) 
define( 'AUTOMATIC_UPDATER_DISABLED', false ); 

// メジャーバージョンも自動アップデートを適用 
define( 'WP_AUTO_UPDATE_CORE', true ); 

という設定になっています。気になる方は、wordpress-nginx/group_vars/all の定義を修正して、設定を OFF にしてみてください。


2. SELinux が有効でないとエラーになっていた問題を解決

diff --git a/wordpress-nginx/roles/common/tasks/main.yml b/wordpress-nginx/roles/common/tasks/main.yml
index e2c4dee..137a8ff 100644
--- a/wordpress-nginx/roles/common/tasks/main.yml
+++ b/wordpress-nginx/roles/common/tasks/main.yml
@@ -1,4 +1,9 @@
 ---
+- name: Check if selinux is running
+  command: getenforce
+  register: sestatus
+  changed_when: false
+
 - name: Install libselinux-python
   yum: name=libselinux-python state=present
 
diff --git a/wordpress-nginx/roles/mysql/tasks/main.yml b/wordpress-nginx/roles/mysql/tasks/main.yml
index 8b97a3e..272328a 100644
--- a/wordpress-nginx/roles/mysql/tasks/main.yml
+++ b/wordpress-nginx/roles/mysql/tasks/main.yml
@@ -9,6 +9,7 @@
 
 - name: Configure SELinux to start mysql on any port
   seboolean: name=mysql_connect_any state=true persistent=yes
+  when: sestatus.stdout != "Disabled"
 
 - name: Create Mysql configuration file
   template: src=my.cnf.j2 dest=/etc/my.cnf

https://github.com/akiyoko/ansible-examples/commit/9a981839e1c81721466041ae8ae26f5431d4c73b



「Configure SELinux to start mysql on any port」のタスクが「SELinux が有効」という前提で記述しているようです。
mysql_connect_any」は「MySQLが全てのポートに接続できるようにする」ための SELinux の設定なので、そもそも SELinux が無効であればこの設定変更は必要ないと思います。


修正内容としては、「getenforce」の結果を「sestatus」という変数に入れておき、標準出力「stdout」が「Disabled」かどうかで処理をスキップさせるかどうかを判定させました。

ここで「changed_when」は、「changed_when: False」と書くと、タスクが「change」とならないというものです。特に意味はないのですが、
https://github.com/ansible/ansible-examples/blob/master/lamp_simple/roles/common/tasks/main.yml
でも同じように書いていたので、マネしてみました。

参考

検証

1) getenforce が Disabled(SELinux無効) の場合

$ ansible-playbook -u vagrant -k -c paramiko -i hosts site.yml
SSH password: (vagrant)

PLAY [Install Wordpress, MySQL, Nginx, and PHP-FPM] ***************************

GATHERING FACTS ***************************************************************
ok: [192.168.33.10]

TASK: [Check if selinux is running] *******************************************
ok: [192.168.33.10]

TASK: [Install libselinux-python] *********************************************
changed: [192.168.33.10]

TASK: [Copy the EPEL repository definition] ***********************************
ok: [192.168.33.10]

TASK: [Create the GPG key for EPEL] *******************************************
ok: [192.168.33.10]

TASK: [Set up iptables rules] *************************************************
changed: [192.168.33.10]

TASK: [Install Mysql package] *************************************************
changed: [192.168.33.10] => (item=mysql-server,MySQL-python,libselinux-python,libsemanage-python)

TASK: [Configure SELinux to start mysql on any port] **************************
skipping: [192.168.33.10]

TASK: [Create Mysql configuration file] ***************************************
changed: [192.168.33.10]

TASK: [Start Mysql Service] ***************************************************
changed: [192.168.33.10]

TASK: [Install nginx] *********************************************************
changed: [192.168.33.10]

TASK: [Copy nginx configuration for wordpress] ********************************
changed: [192.168.33.10]

TASK: [Install php-fpm and deps] **********************************************
changed: [192.168.33.10] => (item=php,php-fpm,php-enchant,php-IDNA_Convert,php-mbstring,php-mysql,php-PHPMailer,php-process,php-simplepie,php-xml)

TASK: [Disable default pool] **************************************************
changed: [192.168.33.10]

TASK: [Copy php-fpm configuration] ********************************************
changed: [192.168.33.10]

TASK: [Download Wordpress] ****************************************************
changed: [192.168.33.10]

TASK: [Extract archive] *******************************************************
changed: [192.168.33.10]

TASK: [Add group "wordpress"] *************************************************
changed: [192.168.33.10]

TASK: [Add user "wordpress"] **************************************************
changed: [192.168.33.10]

TASK: [Fetch random salts for Wordpress config] *******************************
changed: [192.168.33.10]

TASK: [Create Wordpress database] *********************************************
changed: [192.168.33.10]

TASK: [Create Wordpress database user] ****************************************
changed: [192.168.33.10]

TASK: [Copy Wordpress config file] ********************************************
changed: [192.168.33.10]

TASK: [Change ownership of Wordpress installation] ****************************
changed: [192.168.33.10]

NOTIFIED: [restart iptables] **************************************************
changed: [192.168.33.10]

NOTIFIED: [restart mysql] *****************************************************
changed: [192.168.33.10]

NOTIFIED: [restart nginx] *****************************************************
changed: [192.168.33.10]

NOTIFIED: [restart php-fpm] ***************************************************
changed: [192.168.33.10]

PLAY RECAP ********************************************************************
192.168.33.10              : ok=27   changed=23   unreachable=0    failed=0

getenforce が「Disabled」なので、「TASK: [Configure SELinux to start mysql on any port] 」が Skip されました。
想定通り。


2) getenforce が Enforcing(SELinux有効) の場合

$ ansible-playbook -u vagrant -k -c paramiko -i hosts site.yml
SSH password: (vagrant)

PLAY [Install Wordpress, MySQL, Nginx, and PHP-FPM] ***************************

GATHERING FACTS ***************************************************************
ok: [192.168.33.10]

TASK: [Check if selinux is running] *******************************************
ok: [192.168.33.10]

TASK: [Install libselinux-python] *********************************************
changed: [192.168.33.10]

TASK: [Copy the EPEL repository definition] ***********************************
ok: [192.168.33.10]

TASK: [Create the GPG key for EPEL] *******************************************
ok: [192.168.33.10]

TASK: [Set up iptables rules] *************************************************
changed: [192.168.33.10]

TASK: [Install Mysql package] *************************************************
changed: [192.168.33.10] => (item=mysql-server,MySQL-python,libselinux-python,libsemanage-python)

TASK: [Configure SELinux to start mysql on any port] **************************
changed: [192.168.33.10]

TASK: [Create Mysql configuration file] ***************************************
changed: [192.168.33.10]

TASK: [Start Mysql Service] ***************************************************
changed: [192.168.33.10]

TASK: [Install nginx] *********************************************************
changed: [192.168.33.10]

TASK: [Copy nginx configuration for wordpress] ********************************
changed: [192.168.33.10]

TASK: [Install php-fpm and deps] **********************************************
changed: [192.168.33.10] => (item=php,php-fpm,php-enchant,php-IDNA_Convert,php-mbstring,php-mysql,php-PHPMailer,php-process,php-simplepie,php-xml)

TASK: [Disable default pool] **************************************************
changed: [192.168.33.10]

TASK: [Copy php-fpm configuration] ********************************************
changed: [192.168.33.10]

TASK: [Download Wordpress] ****************************************************
changed: [192.168.33.10]

TASK: [Extract archive] *******************************************************
changed: [192.168.33.10]

TASK: [Add group "wordpress"] *************************************************
changed: [192.168.33.10]

TASK: [Add user "wordpress"] **************************************************
changed: [192.168.33.10]

TASK: [Fetch random salts for Wordpress config] *******************************
changed: [192.168.33.10]

TASK: [Create Wordpress database] *********************************************
changed: [192.168.33.10]

TASK: [Create Wordpress database user] ****************************************
changed: [192.168.33.10]

TASK: [Copy Wordpress config file] ********************************************
changed: [192.168.33.10]

TASK: [Change ownership of Wordpress installation] ****************************
changed: [192.168.33.10]

NOTIFIED: [restart iptables] **************************************************
changed: [192.168.33.10]

NOTIFIED: [restart mysql] *****************************************************
changed: [192.168.33.10]

NOTIFIED: [restart nginx] *****************************************************
changed: [192.168.33.10]

NOTIFIED: [restart php-fpm] ***************************************************
changed: [192.168.33.10]

PLAY RECAP ********************************************************************
192.168.33.10              : ok=28   changed=24   unreachable=0    failed=0


Skip されていません。
こちらもうまく行きました。


f:id:akiyoko:20140606003049p:plain



この Playbook の詳しい使い方については、「Ansible で CentOS 6.5 に WordPress + Nginx + PHP-FPM 環境をさくっと構築(Vagrantバージョン & さくらのVPSバージョン)」をどうぞ。