In Discourse, i backup generati mentre la funzionalità di caricamento S3 è abilitata spesso non possono essere utilizzati con successo per ripristinare il sito, rendendo di fatto non validi i backup automatici. Per affrontare questo problema, ho scritto questo script che disabilita i caricamenti S3 prima di avviare il backup, garantendo che i file di backup siano completi e utilizzabili. Dopo che il backup è terminato, lo script riabilita i caricamenti S3 per mantenere le normali operazioni del sito e l’archiviazione dei file.
Inoltre, lo script abilita la Modalità di Sola Lettura durante il processo di backup e aggiornamento per prevenire scritture di dati e garantire la coerenza. Infine, recupera automaticamente gli ultimi aggiornamenti del codice e ricompila il container Docker per completare il ciclo di manutenzione.
Spero che questo script possa aiutare altri amministratori di Discourse. Feedback e suggerimenti per miglioramenti sono benvenuti!
#!/bin/bash
set -e
LOG_FILE="/var/discourse/scripts/weekly_update.log"
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"
}
log "=== Aggiornamento Settimanale Discourse Avviato ==="
cd /var/discourse || { log "Impossibile accedere a /var/discourse"; exit 1; }
log "Abilitazione Modalità di Sola Lettura..."
sudo docker exec app rails runner "SiteSetting.readonly_mode = true; puts 'Modalità di sola lettura abilitata'"
log "Disabilitazione caricamenti S3..."
sudo docker exec app rails runner "SiteSetting.enable_s3_uploads = false"
log "Avvio backup..."
if ! sudo docker exec app discourse backup
; then
log "Backup fallito"
exit 1
fi
log "Backup riuscito."
log "Abilitazione caricamenti S3..."
sudo docker exec app rails runner "SiteSetting.enable_s3_uploads = true"
log "Disabilitazione Modalità di Sola Lettura..."
sudo docker exec app rails runner "SiteSetting.readonly_mode = false; puts 'Modalità di sola lettura disabilitata'"
log "Recupero delle ultime modifiche git..."
git pull
log "Ricompilazione del container..."
./launcher rebuild app
log "Aggiornamento settimanale completato."
exit 0