Bei Discourse können Backups, die erstellt werden, während die S3-Upload-Funktion aktiviert ist, oft nicht erfolgreich zur Wiederherstellung der Website verwendet werden, wodurch automatische Backups effektiv ungültig werden. Um dieses Problem zu lösen, habe ich dieses Skript geschrieben, das S3-Uploads deaktiviert, bevor die Sicherung beginnt, wodurch sichergestellt wird, dass die Backup-Dateien vollständig und verwendbar sind. Nach Abschluss der Sicherung aktiviert das Skript S3-Uploads wieder, um den normalen Website-Betrieb und die Dateispeicherung aufrechtzuerhalten. Zusätzlich aktiviert das Skript während des Sicherungs- und Update-Prozesses den schreibgeschützten Modus, um Schreibvorgänge zu verhindern und die Konsistenz zu gewährleisten. Schließlich ruft es automatisch die neuesten Code-Updates ab und baut den Docker-Container neu auf, um den Wartungszyklus abzuschließen. Ich hoffe, dieses Skript kann anderen Discourse-Administratoren helfen. Feedback und Verbesserungsvorschläge sind willkommen!
#!/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
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