#!/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 # Mode maintenance 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 # 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 # 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 # Upgrade via OCC 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