前回の続きで、AnsibleでWordPressの設定までできたらいいなーということで、いろいろ調べていました。(以下、Mac10.10環境で実行しています。)
WordPressのコマンドラインインタフェースとしてWP-CLIというものがあるようです。
こちらを使うと、コマンドでWordPressの設定ができるようになります。テーマやプラグインの有効化などもできるということなので、これとAnsibleを一緒に使えば、テーマやプラグインのインストールも楽にできそうです。
今回は、AnsibleのサンプルにあるLEMP+WordPressのサンプルに、WP-CLIを入れて、このサイトでも使っているWordpressのテーマ、「twentyfourteen」を有効化してみようと思います。(Linux+Nginx+MariaDB(/MySQL)+PHPでLEMPっていうんですね。)
長くなったので見出し
作業ディレクトリにVagrantfileを作成
Vagrantfileは作る予定のサンプルと同じ環境になっていれば良いので、
Vagrant.configure(2) do |config| config.ssh.insert_key = false config.vm.provider :virtalbox do |provider, override| provider.name = "lempwptest" provider.memory = 1024 end config.vm.box = "bento/centos-7.1" config.vm.hostname = "lempwptest.dev" config.vm.network :private_network, ip: "192.168.10.13" config.vm.synced_folder ".", "/vagrant", mount_options:["dmode=777", "fmode=666"] end
という感じで、ほぼコピペで完成。(IPは任意)
vagrant up
で起動。
サンプルのコピーとhostsファイルの作成
サンプルはこちらにあるので、クローンするか、ダウンロードして、「wordpress-nginx」の中身を作業フォルダにコピーして使いました。
├── Vagrantfile ├── group_vars │ └── all ├── hosts ├── roles │ ├── common │ │ ├── files │ │ │ ├── RPM-GPG-KEY-EPEL-7 │ │ │ ├── RPM-GPG-KEY-NGINX │ │ │ ├── epel.repo │ │ │ └── nginx.repo │ │ └── tasks │ │ └── main.yml │ ├── mariadb │ │ ├── handlers │ │ │ └── main.yml │ │ ├── tasks │ │ │ └── main.yml │ │ └── templates │ │ └── my.cnf.j2 │ ├── nginx │ │ ├── handlers │ │ │ └── main.yml │ │ ├── tasks │ │ │ └── main.yml │ │ └── templates │ │ └── default.conf │ ├── php-fpm │ │ ├── handlers │ │ │ └── main.yml │ │ ├── tasks │ │ │ └── main.yml │ │ └── templates │ │ └── wordpress.conf │ ├── wordpress │ │ ├── tasks │ │ │ └── main.yml │ │ └── templates │ │ └── wp-config.php │ └── wp-setting │ └── tasks │ └── main.yml └── site.yml
(wp-settingは現時点ではないけれど…。)
hostsファイルはコピーして持ってくると、hosts.exampleというファイルがあるので、こちらをhostsという名前にして、内容を以下のように変更しました。
[wordpress-server] webserver2 ansible_ssh_host=192.168.10.13 [wordpress-server:vars] ansible_ssh_user=root ansible_ssh_pass=vagrant
WordPress4.5が入るように変更
サンプルのままだとWordPressが4.3になるので、せっかく4.5がリリースされたということで変更してみました。
group_varsフォルダにある「all」にwp_version, wp_sha256sumという変数が定義されているので、こちらを
wp_version: 4.5 wp_sha256sum: d99c9599d982c3e42e917e03628c2ced6b6b87b2a6fd05b38ebb724b4057faf0
に変更しました。チェックサムはサイトではわからなかったので、ダウンロードして取得しました。
curl -O https://wordpress.org/wordpress-4.5.tar.gz shasum -a 256 wordpress-4.5.tar.gz
その他、server_hostnameをvagrantの設定と合うように変更しています。
設定用のrole「wp-setting」を作成/設定
これだけで、実行すればWordPressサイトは立ち上がるんですが、テーマの設定などは手でやる必要が出てきます。1回やるくらいなら大した作業ではないですが、一度作ったはいいけどもう1回同じものを作りたい時に面倒です。
というわけで、WordPress設定用のタスクを作ります。
--- - name: Make directory for wp-cli file: path=/srv/php/wp-cli state=directory owner=wordpress group=wordpress mode=0755 recurse=yes tags: - wp-setting - name: Download wp-cli get_url: url=https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar dest=/srv/php/wp-cli tags: - wp-setting - name: Rename wp-cli shell: mv /srv/php/wp-cli/wp-cli.phar /srv/php/wp-cli/wp tags: - wp-setting - name: chmod wp-cli file: path=/srv/php/wp-cli/wp owner=wordpress group=wordpress mode=0755 tags: - wp-setting - name: WordPress Core Install become: yes become_user: wordpress shell: /srv/php/wp-cli/wp core install --url={{wp_url}} --title={{wp_site_title}} --admin_user={{wp_admin_user}} --admin_password={{wp_admin_pass}} --admin_email={{wp_admin_email}} tags: - wp-setting - name: Set Language become: yes become_user: wordpress shell: /srv/php/wp-cli/wp core language install ja --activate tags: - wp-setting - name: Worpress Theme Install become: yes become_user: wordpress shell: /srv/php/wp-cli/wp theme install twentyfourteen --activate tags: - wp-setting
becomeって毎回やらないとダメなの?等、いろいろやってみた結果、一応動くものになりました。タグはなくても動きますが、テストするときに、サーバの設定は完了しているので、ここだけテストするために設定しています。
やってる内容としては、ブロックごとに、
- wp-cliをインストールするディレクトリを作成
- ダウンロード
- リネーム
- 実行権限を付与
- 初期設定の反映
- 言語を日本語に
- テーマをインストール
という感じになります。
また、上記で使用している変数はgroup_vars/allの最下部に設定しました。
# WordPress settings wp_url: http://{{server_hostname}}/ wp_site_title: wordpressTest wp_admin_user: wp_admin wp_admin_pass: ******** wp_admin_email: admin@example.com
タイトルやパス等は適宜変更ください。
実行
あとは、vagrant upした状態で、
ansible-playbook -i hosts site.yml
とすれば勝手にLEMPサーバが立ち上がります。
と、ここで、設定したlempwptest.devでアクセスしたかったのですが、ホストマシンであるMacの/etc/hostsにIPの情報が無いためか、http://lempwptest.dev/では接続できません。
ローカルDNSサーバを立てる、等やり方はありそうですが、今回は、vagrantのプラグインである、vagrant-hostsupdaterを使いました。
インストール後、一応、vagrant haltして、upしましたが、reloadでも行けたのかな?
これで、Twenty Fourteenが適用された状態のWordPressが動いているLEMPサーバを作れました。
サーバ設定の部分を抜いて、WordPress設定の箇所だけ抜き出して、AnsibleでWordpress設定を行えるようにしても便利かもしれません。