サイトアイコン ayame.space

WordPressをwp-cliだけで自動バックアップ&アップデート

wp-cliとcrontabを使ってプラグインを一切使わず自動でバックアップとアップデートをする。
ApacheユーザーにWordpressファイルの書き込み権限を与えたくなかったので、cronからシェルスクリプトを走らせてWordpressのアップデートとついでにバックアップできるようにした。

プラグインを必要以上にたくさん入れると重くなるし脆弱性のリスクも上がるので、データベースのバックアップはwp-cliを使ってソースコードのバックアップはLinux標準ツールで単純にtar.gzアーカイブを作成する。

目次

前提

シェルスクリプト

バックアップとアップデート用にシェルスクリプト書いたので以下のコードをcrontabで1日おきぐらいに走らせればOK。
ただ、wp-cliは定期的にアップデートされて古いバージョンだと最新のWordpressでうまく動かなくなる場合があるので、以下のシェルスクリプトを走らせる30分ぐらい前に/usr/local/bin/wp cli updateをrootで走らせておく。


#!/bin/sh

# https://ayame.space/2017/05/update-and-backup-wordpress-by-wp-cli
# Copyright (c) 2017 ayame.space All rights reserved.
# 
# This software is released under the MIT License.
# http://opensource.org/licenses/mit-license.php

base_dir="[Wordpressのディレクトリ]"

backup_dir="[バックアップデータを保存するディレクトリ(最後に/はつけない)]"
log_dir="$backup_dir/log"
db_dir="$backup_dir/db"
html_dir="$backup_dir/html"

cd $base_dir
echo "Start backup and update."

{
echo "[`date '+%Y-%m-%d %H:%M:%S'`] Start backup..."

/usr/local/bin/wp db export $db_dir/`date +%Y-%m-%d`.sql
tar -zcvf $html_dir/`date +%Y-%m-%d`.tar.gz $base_dir

echo "[`date '+%Y-%m-%d %H:%M:%S'`] Start update..."

/usr/local/bin/wp core update
/usr/local/bin/wp plugin update --all
/usr/local/bin/wp theme update --all
/usr/local/bin/wp core language update

echo "[`date '+%Y-%m-%d %H:%M:%S'`] Delete old files..."
find $db_dir -mtime +30 | xargs rm -fv
find $html_dir -mtime +30 | xargs rm -fv

echo "[`date '+%Y-%m-%d %H:%M:%S'`] Success."
} 1>> $log_dir/`date +%Y-%m-%d`.log 2>&1

echo "Success."

参考

追記

モバイルバージョンを終了