宮﨑悟氏の「WordPressのバックアップをrcloneでとってみよう」

宮﨑悟

KUSANAGIでWordPressのバックアップを効率化しませんか?今回ご紹介するのは、Cloud Storageへの同期ツール「rclone」を使用した方法です。Amazon S3やGoogle Driveなどの主要クラウドストレージや、OpenSourceのストレージにも対応。独自の設定でバックアップを簡単・便利に行えます。また、rcloneを一度設定すれば、差分だけのバックアップも可能。自動化するための手順も公開しています。これで安心してバックアップが取れますよ。

KUSANAGIで使用するWordPressには、いくつかのバックアッププラグインがあります。しかし、バックアップ先はそれほど自由に選べるわけではありません。 今回は、rcloneというツールを使用して、KUSANAGI標準の機能だけを使用して、WordPressのバックアップをしてみようと思います。

rcloneとは

rcloneは、cloud storageに対して同期を行うrsyncのようなツールです。対象となるcloud storageは、たくさんあり、Amazon S3、Dropbox、Google Drive、One Driveなどのメジャーなものや、OpenStack SwiftやCephといったOpenSourceのオブジェクトストレージにも対応しています。 使用方法もrsyncに似ていますが、rsyncより簡単かもしれません。

rcloneのインストール

KUSANAGIにrcloneを入れるには、https://rclone.org て提供している rpmを使用します。root権限で以下のコマンドを実行することでインストールできます。
yum install -y https://downloads.rclone.org/rclone-current-linux-amd64.rpm

対象ストレージの選択

rcloneで対応しているストレージはいくつかありますが、今回はAWS S3にバックアップしてみましょう。 rclone config で対象ストレージを登録します。詳細は公式ドキュメントのAWS S3登録方法を参照ください。AWS S3を使用するためには、IAMを使用して予めAWS S3アクセス権限のみを持ったユーザを作成し、そのクレデンシャルを取得しましょう。 その後、sudo su – kusanagi でkusanagiユーザになってから、rclone config を使用してconfigを作成します。「n」で新しいconfigを作成します。ストレージ名には、「s3」と入力しましたが、任意の名前を指定してください。
$ rclone config
Current remotes:

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> n
name> s3
その後、「Type of storage to configure.」を聞かれるので「s3」と入力し、「AWS」を指定します。予めAWSのクレデンシャルを入手しているので、1を入力おg、access_key_idとsecret_access_key を入力します。
Storage> s3
 (略)
provider> AWS
 (略)
env_auth> 1
AWS Access Key ID.
Leave blank for anonymous access or runtime credentials.
Enter a string value. Press Enter for the default ("").
access_key_id> XXXXXXXXXXXXXXXXXXXXXX
AWS Secret Access Key (password)
Leave blank for anonymous access or runtime credentials.
Enter a string value. Press Enter for the default ("").
secret_access_key> XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
その後、リージョンなど聞かれますが、迷ったらTokyoリージョン(ap-northeast-1)を指定してください。「Edit advanced config? (y/n)」を聞かれますが、迷ったら「n」を押して大丈夫だと思います。
Remote config
--------------------

[s3]

type = s3 provider = AWS env_auth = false access_key_id = XXXXXXXXXXXXXXXXXX secret_access_key = XXXXXXXXXXXXXXXXXXXXXXXXXX region = ap-northeast-1 location_constraint = ap-northeast-1 acl = private server_side_encryption = AES256 sse_kms_key_id = arn:aws:kms:us-east-1:*

storage_class = STANDARD

y) Yes this is OK e) Edit this remote d) Delete this remote y/e/d> y コンフィグ内容を確認するので、Y と答えましょう。 以下のコマンドで、接続できるか確認できます。何もファイルを作成していないので、空のディレクトリです。
$ rclone tree s3:
/

0 directories, 0 files

WordPressのバックアップ

kusanagiユーザで、プロビジョンしたWordPressのホームディレクトリDocumentRootに移動します。そこで、以下のコマンドを実行します。
$ cd $HOME/kusanagi/DocumentRoot
$ /usr/local/bin/wp db export ../db-$(date +%Y%m%d-%H%M%S%z).sql
Success: Exported to '../db-20190209-161649+0900.sql'.
$ rclone copy $HOME/kusanagi s3:kusanagi/ --delete-excluded --use-server-modtime
$ rm ../db-*.sql
最初のwp db exportコマンドでDBのバックアップファイルを作成し、rclone copyto で、s3にファイルをバックアップします。最後に、DBのバックアップファイルを削除します。 初回は全ファイルコピーすることになりますが、2回目以降は差分だけファイルコピーされます。このバックアップを定期的に行いたければ、一連のコマンドをkusangiユーザのcronに設定してください。下記の例では1時30分に実施していますが、任意の時間を指定してください。
30 1 * * * (cd $HOME/kusanagi/DocumentRoot && /usr/local/bin/wp db export ../db-$(date +%Y%m%d-%H%M%S%z).sql && rclone copy $HOME/kusanagi s3:kusanagi/ && rm ../db-*.sql )
最後に、バックアップできたことを確認します。
$ rclone lsd s3:kusanagi | head 
  1574675 db-20190209-161649+0900.sql
     3172 wp-config.php
     1539 tools/bcache.clear.php
      502 settings/kusanagi-default.ini
      584 DocumentRoot/.htaccess
      418 DocumentRoot/index.php
    19935 DocumentRoot/license.txt
    10305 DocumentRoot/readme.html
     6878 DocumentRoot/wp-activate.php
      364 DocumentRoot/wp-blog-header.php
これでWordPressのバックアップを定期的に行うことが出来ます。ただし、この方法ではDBの以外の古いファイルの内容を上書きしてしまいます。そのため、BackWPupプラグインなどを使用してuploads以下にバックアップファイルを作成することで、古いファイルの保管を行うことが出来ますので、うまく活用しましょう。 rcloneは、S3以外のクラウドストレージに対応していますので、ご自身の要件によって変更してください。 では、次回をお楽しみに。

関連記事

Webサイト運用の課題解決事例100選 プレゼント

Webサイト運用の課題を弊社プロダクトで解決したお客様にインタビュー取材を行い、100の事例を108ページに及ぶ事例集としてまとめました。

・100事例のWebサイト運用の課題と解決手法、解決後の直接、間接的効果がわかる

・情報通信、 IT、金融、メディア、官公庁、学校などの業種ごとに事例を確認できる

・特集では1社の事例を3ページに渡り背景からシステム構成まで詳解