Termuxネイティブ環境でWordPressのバックアップをどうするか考える。その1

じゃんくはっく
じゃんくはっく

今日も自宅サーバいじるよ〜!

ほんと、好きねぇ〜。今日は何するんですか〜?

ぴー
ぴー
じゃんくはっく
じゃんくはっく

好きというか、まだ設定いろいろあってw。とりあえず、バックアップをどうしようかなと。

プラグインとか便利なのあるでしょ?あれじゃだめ?

ぴー
ぴー

はい、ぴーちゃんの言う通り便利なプラグインがあります。

超有名なWordPressバックアッププラグイン

この2つが特に有名じゃないでしょうか?

UpdraftPlus WordPress Backup Plugin

あと、これ。

BackWPup – WordPress Backup Plugin

前者のUpdraftPlusは、一度使ったことがあります。通常ならこれでバックアップはOKじゃないでしょうか。でも、今回はちょっと自宅サーバ構成に難があって、自分のドメインに自分でアクセスできない問題があります。

自分のドメインに自分でアクセスできない問題!

これはつまり、https://hack.gpl.jp や、https://hack.gpl.jp で自分自身にアクセスできないということです。こういう場合、WordPressのcronやジェットパックなどいろんな部分で問題が発生します。これは、wp-cliで診断すると以下のようになります。

$ wp cron test
Error: WP-Cron spawn failed with error: cURL error 28: Connection timed out after 3000 milliseconds

この、cURL error 28 エラーはいろんなケースで出るのですが自分の場合は、登録されているURLに自分自身でアクセスできないことが原因です。この問題の根本は以下で紹介しています。まだ解消していません。

ポートフォワードの経路で、Uターン NATとかヘアピンNATが使えないルータの場合のあれこれ

https://hack.gpl.jp/2020/09/07/ポートフォワードの経路で、uターン-natとかヘアピ/

この解消はまた別の機会にやるとして、今回はこういう中途半端な環境で wp-cronが動作しない中、どうやってバックアップを行うかという感じです。

さて、どんな方法があるの?

王道としては、バックアップスクリプトを書いて、どこかクラウドストレージへコピーする方法です。データベースと、WordPress側で更新される画像など uploads以下にできるファイル、またカスタマイズするテーマなどもバックアップしておきたいです。それらをスクリプト中に記載してLinuxのcronで実行するという、めんどくさいやり方です。世の中、便利になりすぎてこういうスクリプト書くのが面倒になってきています。

バックアップ方針とTermux環境で使えそうなツール

バックアップ方針は、やってる最中に気が変わるとして、下調べしてみると必要なツールは以下となりそうです。

・クラウドへのバックアップ 
 → GoogleDriveにバックアップしたい
 → rcloneがある!
・uploadsは差分バックアップしたい
 → rsyncがある
 → Termuxもバイナリがある
・全部、スクリプトで書くと面倒
 → wp-cli を使って、プラグインと併用してみる
・DBは30日分保存、uploadsは差分保存

幸い、Termuxのバイナリにはこれらのツールが揃っていることがわかりました。rclone は、今回はじめて使います。

Rclone syncs your files to cloud storage

https://rclone.org/

まとめ

今回、なんとなくわかったのは以下となります。

・WordPressのcronは、自己のURLで自分自身をcurlで叩いている。
・それが出来ないと、cURL error 28のエラーが発生する。
・wp-cliで、wordpress の jobを linux の cron で叩けば動く
・クラウドへの保存ツールは、rcloneで解決

あとがき

まぁ、そもそもネットワーク構成をちゃんとやって自分自身をちゃんと参照できるようにしないとだめだよなーと。ただ、NATとポートフォワードをしていて内部LAN側に違うポートで提供している環境は他にもあると思うので、もしかすると誰かの参考になるかなとも。たぶん、その2へ続くと思います。