AnsibleとWP-CLIでWordPressテスト環境を作る


前回の続きで、AnsibleでWordPressの設定までできたらいいなーということで、いろいろ調べていました。(以下、Mac10.10環境で実行しています。)

WordPressのコマンドラインインタフェースとしてWP-CLIというものがあるようです。

WP-CLI

こちらを使うと、コマンドでWordPressの設定ができるようになります。テーマやプラグインの有効化などもできるということなので、これとAnsibleを一緒に使えば、テーマやプラグインのインストールも楽にできそうです。

今回は、AnsibleのサンプルにあるLEMP+WordPressのサンプルに、WP-CLIを入れて、このサイトでも使っているWordpressのテーマ、「twentyfourteen」を有効化してみようと思います。(Linux+Nginx+MariaDB(/MySQL)+PHPでLEMPっていうんですね。)

参考:Ansibleのサンプル

長くなったので見出し

作業ディレクトリに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-hostsupdater

インストール後、一応、vagrant haltして、upしましたが、reloadでも行けたのかな?

これで、Twenty Fourteenが適用された状態のWordPressが動いているLEMPサーバを作れました。

サーバ設定の部分を抜いて、WordPress設定の箇所だけ抜き出して、AnsibleでWordpress設定を行えるようにしても便利かもしれません。

ソース(Github)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です