BackWPup – WordPress Backup Plugin | WordPress.org でファイルとデータベースのバックアップを Zip ファイルにして DropBox にアップロードすることを、日々自動実行しております。
このファイルをダウンロードして、これを元にサーバ環境も含めて復元する Ansible プレイブックを作成しました。
サーバに障害が起きたときや、サーバを引っ越ししたいときは、バックアップファイルとプレイブックを実行すれば復元できるようになります (正確には、SSL/TLS 証明書発行はできてませんのでまだ未完成ですけれども)。
その中で、気がついたことをメモいたします。
Ansible の unarchive モジュール
unarchive モジュールを使って次のようにしました。
- {{ bacwpup_zip_file }} は BackWPup で作成したバックアップファイル名。
- {{ wp_path }} は WordPress の配置ディレクトリ。/srv/wordpress/
- name: Extract BackWPup unarchive: src: "{{ bacwpup_zip_file }}" dest: "{{ wp_path }}"
最終的には上記のようになりましたけれども、本当は DropBox から直接ダウンロードして WordPress の配置ディレクトリへと展開したかった のです。
- name: Extract BackWPup unarchive: src: "{{ bacwpup_zip_file_url }}" dest: "{{ wp_path }}" remote_src: yes
こんな感じにすればよいはずのですけれども、エラーとなってしまいました。。。 ドキュメントを読みますとシンプルな URL の場合はこれで行けるそうです。DropBox で URL を共有してもダメでしたので、これはシンプルなパターンではないようですね。。。
If remote_src=yes and src contains ://, the remote machine will download the file from the URL first. (version_added 2.0). This is only for simple cases, for full download support use the get_url module.
念の為 Ansible バージョンを確認すると、問題なさそうです。
$ ansible --version ansible 2.5.5 config file = /home/vagrant/playbook/ansible.cfg configured module search path = [u'/home/vagrant/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python2.7/site-packages/ansible executable location = /usr/bin/ansible python version = 2.7.5 (default, Apr 11 2018, 07:36:10) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] $
WP-CLI で wp-config.php の内容を取得
できるんでしょうか、、、できるんですね!!!と驚いたのがこちらでした。特に、データベースのパスワードを普通に取得できました。
これで Ansible の引数ファイルにデータベースの情報を一切記述すること無く復元ができるようになりました♪大変嬉しく思います。
# wp config get DB_NAME wp_db_name # wp config get DB_USER wp_db_user # wp config get DB_PASSWORD chage_here #
Ansible プレイブックに記述するときは次のようになりました。
- WP-CLI
- wp コマンドを使用するときはフルパスで指定
--path
オプションをつけることで実行場所に依存しないようにした。
- register
- register で指定した値に wp config get で取得した内容が入る。
- register に入れた値は、オブジェクトのため、変数.stdout などで値を取得する。
- name: Get WordPress database name shell: /usr/local/bin/wp config get DB_NAME --path={{ wp_path }} register: wp_db_name changed_when: false failed_when: false ... 略 ... - name: Create WordPress database mysql_db: name: "{{ wp_db_name.stdout }}" state: present
WP-CLI でデータベースにインポート
を参考にしました。次のように Ansible プレイブックを作成しました。
- wp-config.php のデータベース接続情報を使用してインポートするため、別途指定する必要が無く、楽!
- Ansible プレイブックを 2 回目以降実行しても、エラーにはならず、バックアップの SQL ファイルでデータベースの内容を上書きする。
- name: Import WordPress DataBase shell: /usr/local/bin/wp db import {{ wp_path }}/{{ wp_db_name.stdout }}.sql --path={{ wp_path }}
できなかったこと
- WP-CLI でデータベースを作成しようとしたが、エラーとなってしまったため諦めた。
- wp-config.php のデータベース情報を元にデータベースを作成しようとするのだが、データベース情報のユーザはまだ未作成な状態なので当然の結果ではある。
- データベースの作成、ユーザ作成とそのパスワード設定は、Ansible の mysql_db、mysql_user モジュールで行った。
おわりに
残るは Certbot 系のプレイブックの作成となります。
Ansible role としてありそうですけれども、内容によってはコマンドに近い形になるかとも考えています。
気軽にサーバを移る事のできるように、早くなりたいものですね♪
以上です。