Files
agence66-nextcloud-docker/scripts/update.sh
2025-12-15 11:35:24 +01:00

104 lines
3.2 KiB
Bash
Executable File

#!/bin/bash
# scripts/update.sh - Mise à jour Nextcloud
set -euo pipefail
MAINTENANCE_ENABLED=false
# Fonction de nettoyage en cas d'erreur
cleanup() {
local exit_code=$?
if [ "$exit_code" -ne 0 ]; then
echo "❌ Erreur détectée lors de la mise à jour (code: $exit_code)"
echo "⚠️ IMPORTANT: Vérifiez les logs et considérez une restauration si nécessaire"
fi
# Désactiver le mode maintenance si activé
if [ "$MAINTENANCE_ENABLED" = true ]; then
echo "▶️ Tentative de désactivation du mode maintenance..."
docker-compose exec -T -u www-data nextcloud php occ maintenance:mode --off 2>/dev/null || true
fi
exit "$exit_code"
}
trap cleanup EXIT INT TERM
echo "🔄 Mise à jour de Nextcloud"
# Backup avant update
echo "💾 Backup de sécurité..."
if ! bash scripts/backup.sh; then
echo "❌ Erreur lors du backup, abandon de la mise à jour"
exit 1
fi
# Pull nouvelle image
echo "📥 Téléchargement de la nouvelle version..."
if ! docker-compose pull nextcloud; then
echo "❌ Erreur lors du téléchargement de l'image"
exit 1
fi
# Mode maintenance avant le restart
echo "⏸️ Mode maintenance activé"
if docker-compose exec -T -u www-data nextcloud php occ maintenance:mode --on; then
MAINTENANCE_ENABLED=true
else
echo "❌ Impossible d'activer le mode maintenance"
exit 1
fi
# Restart
echo "🔄 Redémarrage..."
docker-compose up -d --force-recreate nextcloud cron
# Attendre que Nextcloud soit prêt
echo "⏳ Attente du démarrage de Nextcloud..."
for i in {1..60}; do
if docker-compose exec -T nextcloud curl -f http://localhost/status.php >/dev/null 2>&1; then
echo "✅ Nextcloud prêt"
break
fi
if [ "$i" -eq 60 ]; then
echo "❌ Timeout: Nextcloud n'est pas prêt"
exit 1
fi
sleep 1
done
# Désactiver temporairement le mode maintenance pour permettre l'upgrade
echo "▶️ Préparation de l'upgrade..."
docker-compose exec -T -u www-data nextcloud php occ maintenance:mode --off || true
MAINTENANCE_ENABLED=false
# Upgrade via OCC (qui activera son propre mode maintenance)
echo "⬆️ Lancement de l'upgrade..."
if ! docker-compose exec -T -u www-data nextcloud php occ upgrade; then
echo "❌ Erreur lors de l'upgrade"
exit 1
fi
# Scan et indices (non bloquant)
echo "🔍 Scan des fichiers..."
docker-compose exec -T -u www-data nextcloud php occ files:scan --all || echo "⚠️ Avertissement: Erreur lors du scan"
echo "📊 Ajout des indices manquants..."
docker-compose exec -T -u www-data nextcloud php occ db:add-missing-indices || echo "⚠️ Avertissement: Erreur lors de l'ajout des indices"
echo "🔧 Conversion des colonnes..."
docker-compose exec -T -u www-data nextcloud php occ db:convert-filecache-bigint --no-interaction || echo "⚠️ Avertissement: Erreur lors de la conversion"
# Désactiver maintenance
echo "▶️ Désactivation du mode maintenance"
if docker-compose exec -T -u www-data nextcloud php occ maintenance:mode --off; then
MAINTENANCE_ENABLED=false
echo "✅ Mise à jour terminée !"
else
echo "⚠️ Attention: Impossible de désactiver le mode maintenance"
echo " Exécutez manuellement: make occ maintenance:mode --off"
fi
docker-compose exec -T -u www-data nextcloud php occ status