在 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