Dockerで運用しているWordPressの「データベース」と「コンテンツファイル」をまとめ、Google Driveへ自動で転送・世代管理(古いファイルの削除)まで行う環境を構築したので備忘録に
■事前準備:コンテナとパスの確認
まず、バックアップ対象となるコンテナ名やマウントパスを確認
# 稼働中のコンテナ名を確認
docker ps --format "table {{.Names}}\t{{.Image}}"
# → DBコンテナ名(例: wordpress-db-1)をメモ
# ボリュームのマウントパスとDBパスワードを確認
cat ~/wordpress/docker-compose.yml
■rcloneの導入(クラウドストレージ連携)
インストール
sudo apt update && sudo apt install rclone -y
Google Driveとの紐付け
rclone config
n(New remote) を選択name:gdriveと入力Storage:Google Driveの番号を選択client_id/client_secret: 空白のままEnterscope:1(Full access) を選択Use auto config?:n(ヘッドレスサーバーの場合)
ここで認証キーが表示されるので、別のPC(ブラウザが使える環境)で以下を実行してトークンを取得
# ローカルPC側のターミナル(rcloneインストール済みの環境)で実行
rclone authorize "drive" "サーバーに表示されたキー"
ブラウザで認証後、表示された {"access_token":...} という長いコードをコピーし、サーバー側の設定画面に貼り付ければ完了
■バックアップスクリプトの作成
自動化の核となるシェルスクリプトを作成
nano ~/backup.sh
以下の内容を記載
#!/bin/bash
# --- 設定項目 ---
BACKUP_DIR="/home/$(whoami)/backups"
DATE=$(date +"%Y%m%d_%H%M%S")
ARCHIVE_NAME="wp_backup_$DATE.tar.gz"
DB_FILE="db_dump.sql"
RCLONE_REMOTE="gdrive:Your_Backup_Folder" # Google Drive上の保存先
# 変数(適宜書き換え)
DB_CONTAINER="wordpress-db-1"
DB_USER="root"
DB_PASS="YOUR_PASSWORD"
DB_NAME="wordpress"
WP_DATA_PATH="/var/lib/docker/volumes/wordpress_wp_data/_data"
# フォルダ準備
mkdir -p $BACKUP_DIR
cd $BACKUP_DIR
# 1. データベースをダンプ(無停止)
docker exec $DB_CONTAINER mariadb-dump -u $DB_USER -p$DB_PASS $DB_NAME > $DB_FILE
# 2. WebファイルとDBダンプを圧縮(root権限が必要なパスのためsudoを使用)
sudo tar -czf $ARCHIVE_NAME $DB_FILE -C $WP_DATA_PATH .
# 3. Google Driveへアップロード
rclone copy $ARCHIVE_NAME $RCLONE_REMOTE
# 4. 世代管理(古いバックアップを削除)
# ローカル:4日以上前のファイルを削除
find $BACKUP_DIR -name "wp_backup_*.tar.gz" -mtime +4 -delete
# Google Drive:5日以上前のファイルを削除
rclone delete $RCLONE_REMOTE --min-age 5d
# 一時ファイルの削除
rm $DB_FILE
実行権限の付与
chmod +x ~/backup.sh
■Cronによる自動実行設定
毎日決まった時間にバックアップが走るように設定
crontab -e
ファイルの末尾に以下の1行を追加(例:毎日午前3:00に実行)
0 3 * * * /bin/bash /home/your_username/backup.sh >> /home/your_username/backup_cron.log 2>&1
※your_username は実際のユーザー名に書き換え
■まとめ
これで、万が一サーバーが故障しても、Google Driveに最新のバックアップが5世代分保存されている状態に

コメントを残す