【自宅鯖】WordPressサーバーをGoogle Driveへ自動バックアップする方法

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: 空白のままEnter
    • scope: 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世代分保存されている状態に


    コメント

    コメントを残す

    メールアドレスが公開されることはありません。 が付いている欄は必須項目です