Dans Discourse, les sauvegardes générées lorsque la fonctionnalité de téléversement S3 est activée ne peuvent souvent pas être utilisées avec succès pour restaurer le site, rendant les sauvegardes automatiques effectivement invalides. Pour résoudre ce problème, j’ai écrit ce script qui désactive les téléversements S3 avant de commencer la sauvegarde, garantissant ainsi que les fichiers de sauvegarde sont complets et utilisables. Une fois la sauvegarde terminée, le script réactive les téléversements S3 pour maintenir les opérations normales du site et le stockage des fichiers.
De plus, le script active le mode lecture seule (Read-Only Mode) pendant le processus de sauvegarde et de mise à jour pour empêcher les écritures de données et assurer la cohérence. Enfin, il récupère automatiquement les dernières mises à jour du code et reconstruit le conteneur Docker pour compléter le cycle de maintenance.
J’espère que ce script pourra aider les administrateurs Discourse. Vos commentaires et suggestions d’amélioration sont les bienvenus !
#!/bin/bash
set -e
# Fichier de log
LOG_FILE="/var/discourse/scripts/weekly_update.log"
# Fonction pour logger les messages
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"
}
log "=== Mise à jour hebdomadaire de Discourse démarrée ==="
# Se déplacer dans le répertoire de Discourse
cd /var/discourse || { log "Échec du changement de répertoire vers /var/discourse"; exit 1; }
log "Activation du mode lecture seule..."
sudo docker exec app rails runner "SiteSetting.readonly_mode = true; puts 'Mode lecture seule activé'"
log "Désactivation des téléversements S3..."
sudo docker exec app rails runner "SiteSetting.enable_s3_uploads = false"
log "Démarrage de la sauvegarde..."
# Lancer la sauvegarde
if ! sudo docker exec app discourse backup ; then
log "Échec de la sauvegarde"
exit 1
fi
log "Sauvegarde réussie."
log "Réactivation des téléversements S3..."
sudo docker exec app rails runner "SiteSetting.enable_s3_uploads = true"
log "Désactivation du mode lecture seule..."
sudo docker exec app rails runner "SiteSetting.readonly_mode = false; puts 'Mode lecture seule désactivé'"
log "Récupération des derniers changements git..."
git pull
log "Reconstruction du conteneur..."
./launcher rebuild app
log "Mise à jour hebdomadaire terminée."
exit 0