No Discourse, backups gerados enquanto a funcionalidade de upload S3 está habilitada frequentemente não podem ser usados com sucesso para restaurar o site, tornando os backups automáticos efetivamente inválidos. Para resolver este problema, escrevi este script que desabilita os uploads S3 antes de iniciar o backup, garantindo que os arquivos de backup estejam completos e utilizáveis. Após o término do backup, o script reabilita os uploads S3 para manter as operações normais do site e o armazenamento de arquivos.
Adicionalmente, o script habilita o Modo Somente Leitura durante o processo de backup e atualização para prevenir escritas de dados e garantir consistência. Finalmente, ele baixa automaticamente as últimas atualizações de código e reconstrói o contêiner Docker para completar o ciclo de manutenção.
Espero que este script possa ajudar outros administradores do Discourse. Feedback e sugestões de melhoria são bem-vindos!
#!/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