宮﨑悟氏の「WordPressのバックアップを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以外のクラウドストレージに対応していますので、ご自身の要件によって変更してください。では、次回をお楽しみに。

Post Author: 宮﨑悟

Avatar
国立函館高専を卒業後、NEC協力会社に入社。UNIX・Windowsアプリケーション開発、Solaris/Linuxでのシステム構築に20年以上従事した。SolarisとLinuxを専門とし、OSおよび仮想化技術を得意とする。日本OpenSolarisユーザグループのメンバとして、OSCなど勉強会での登壇多数。 ○得意分野 言語: C、C++、Perl、Python、PowerShell OS: Solaris、Linux 過去の発表資料:OSCおよびhbstudyなどでの登壇経験あり。 https://www.slideshare.net/satorumiyazaki 過去の執筆記事: https://www.cloudn-service.com/magazine/member/satoru_miyazaki.html