2016年9月8日木曜日

【備忘録】WP-CLIと BackWPUPプラグインを利用した WordPress の自動バックアップ&自動アップデート

WordPerssの wp-cron.php によるアップデートは
  1. 「いつ」実施されるかわからない
  2. バックアップをとってから、やってほしい
という要望を満たすことが出来ません。
ので、もしサーバーで WP-CLI、BackWPUPプラグイン、そして cronが利用できるなら、コマンドベースのバックアップもオススメですよ!

以下は備忘録を兼ねて、一例として書いておきます。

流れ


予め作成していたファイルより WordPressの情報を読み取り、それらに対して下記の作業を順次行っていく。つまり複数の WordPress,WordPressの言語にも対応。
  1. BackWPUPプラグインのジョブを実行し、ファイル・フォルダとデータベースのバックアップをとる
  2. WordPressのプラグインのうち、更新可能なものを更新する
  3. WordPressのシステムのアップデートを試み、成功したらDBのアップデートも行う
また、以上の作業ログについては標準出力とエラー出力を、日ごとにファイルわけして保存します。

利用するスクリプトは sh


cshが使えたらもうちょい簡単なのですけど、 sh しか使えないサーバーもあります。
ので sh でいきます。

前提条件


説明のために、下記の状況だとします。

WordPressのサイト


  1. http://example.com (英語版 WordPress)
       インストールフォルダ:/home/◯◯/△△/example.com
     BackWPUPのジョブID:1
       BackWPUPによる保存先:/home/××/backup/example.com
  2. http://hoge.example.com (日本語版 WordPress)
       インストールフォルダ:/home/◯◯/□□/hoge.example.com
       BackWPUPのジョブID:2
       BackWPUPによる保存先:/home/××/backup/hoge.example.com
※BackWPUPのジョブIDは、ジョブ編集画面を表示中に URLを見てください。
※BackWPUPによる保存先フォルダは、/home/××/backup/FQDN とします。
バックアップスクリプトが、BackWPUPによるジョブを起動する前に、本当にバックアップ先があるかどうかチェックするためです。

ログ保存先


  • /home/××/backup/logs
これ以下に、20160908.log のように年月日.log ごとにログを追記します。

環境設定ファイルの用意


/home/◯◯/bin/wp-targets.dat というファイルを作成したとします。


※ # が含まれる行は無視されます。
#  [backup folder name]:[backwpup job ID]:[WordPress folder]
example.com:1:en:/home/◯◯/△△/example.com/
hoge.example.com:2:ja:/home/◯◯/□□/hoge.example.com/

のように保存。

WP-CLIのファイルパス


  • /usr/local/bin/wp
と仮定。

WordPress の自動バックアップ&自動アップデートスクリプト


  • /home/◯◯/bin/wp-update.sh
とすると、
がサンプルプログラムになります。

WP-CLIは /usr/local/bin/wp と決め打ちしています。
/usr/bin/wp の場合には、$WP_CLI以外に、
awk  '{print "/usr/local/bin/wp plugin update "$1}'
の2箇所の /usr/local/bin/wp も変更しておいてください。

※WP-CLIは WordPress新バージョン対応など頻繁にアップデートします。

wp cli update 
にて自動アップデートできますので、毎日 cronに登録しておくとよいと思います。

これをサーバーに入れて、cron で毎日実行させれば
毎日 WP-CLIを介して、BackWPUPによるバックアップ、プラグイン更新、システム更新をしてくれます。

ちょっと複雑かもしれませんけど、全自動はなかなか楽ですよ〜。

2016年9月8日 @kimipooh


1 件のコメント:

  1. 出力について上書きにしていたので、追記に変更
    変更前
    } 1> $log_file 2>&1

    変更後
    } 1>> $log_file 2>&1

    返信削除