Discourseでは、S3アップロード機能が有効な状態で生成されたバックアップは、サイトの復元に成功しないことが多く、自動バックアップが事実上無効になっています。この問題に対処するため、バックアップを開始する前にS3アップロードを無効にし、バックアップファイルが完全で利用可能であることを保証するこのスクリプトを作成しました。バックアップが完了した後、スクリプトは通常のサイト運用とファイルストレージを維持するためにS3アップロードを再度有効にします。
さらに、このスクリプトはバックアップとアップデートのプロセス中に読み取り専用モードを有効にし、データ書き込みを防ぎ、一貫性を確保します。最後に、最新のコードアップデートを自動的にプルし、Dockerコンテナを再構築してメンテナンスサイクルを完了します。
このスクリプトが他のDiscourse管理者の皆様のお役に立てば幸いです。フィードバックや改善提案を歓迎します!
#!/bin/bash
set -e
LOG_FILE="/var/discourse/scripts/weekly_update.log"
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"
}
log "=== Weekly Discourse Update Started ==="
cd /var/discourse || { log "Failed to cd /var/discourse"; exit 1; }
log "Enabling Read-Only Mode..."
sudo docker exec app rails runner "SiteSetting.readonly_mode = true; puts 'Readonly mode enabled'"
log "Disabling S3 uploads..."
sudo docker exec app rails runner "SiteSetting.enable_s3_uploads = false"
log "Starting backup..."
if ! sudo docker exec app discourse backup ; then
log "Backup failed"
exit 1
fi
log "Backup succeeded."
log "Enabling S3 uploads..."
sudo docker exec app rails runner "SiteSetting.enable_s3_uploads = true"
log "Disabling Read-Only Mode..."
sudo docker exec app rails runner "SiteSetting.readonly_mode = false; puts 'Readonly mode disabled'"
log "Pulling latest git changes..."
git pull
log "Rebuilding container..."
./launcher rebuild app
log "Weekly update complete."
exit 0