Files
agence66-nextcloud-docker/scripts/update.sh
BeauTroll a7c14f9000 fix: use absolute paths for log files in all scripts
Fixed issue where log file redirections would fail when scripts change
directories. All scripts now use $PROJECT_ROOT/logs/... instead of
relative paths ./logs/...

This prevents errors like "Aucun fichier ou dossier de ce nom" when
scripts execute commands in different directories (e.g., checksum
verification in restore.sh).

Affected files:
- scripts/backup.sh
- scripts/restore.sh
- scripts/update.sh
- scripts/recover.sh

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-17 20:24:48 +01:00

162 lines
5.5 KiB
Bash
Executable File

#!/bin/bash
# scripts/update.sh - Mise à jour Nextcloud
set -euo pipefail
# Variables globales
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
cd "$PROJECT_ROOT"
# Configuration des logs
LOG_DIR="./logs"
LOG_FILE="$PROJECT_ROOT/logs/update_$(date +%Y%m%d_%H%M%S).log"
MAINTENANCE_ENABLED=false
COMPOSE_BACKUP=""
mkdir -p "$LOG_DIR"
# Charger les fonctions communes (log avec couleurs)
# shellcheck disable=SC1091
source "$SCRIPT_DIR/common.sh"
# Fonction de nettoyage en cas d'erreur
cleanup() {
local exit_code=$?
if [ "$exit_code" -ne 0 ]; then
log "ERROR" "Erreur détectée lors de la mise à jour (code: $exit_code)"
log "WARN" "IMPORTANT: Vérifiez les logs et considérez une restauration si nécessaire"
# Restaurer le docker-compose.yml si backup existe
if [ -n "$COMPOSE_BACKUP" ] && [ -f "$COMPOSE_BACKUP" ]; then
log "INFO" "Restauration du docker-compose.yml..."
cp "$COMPOSE_BACKUP" docker-compose.yml || log "ERROR" "Impossible de restaurer docker-compose.yml"
fi
fi
# Désactiver le mode maintenance si activé
if [ "$MAINTENANCE_ENABLED" = true ]; then
log "INFO" "Tentative de désactivation du mode maintenance..."
docker-compose exec -T -u www-data nextcloud php occ maintenance:mode --off 2>>"$LOG_FILE" || true
fi
# Nettoyer le backup temporaire
if [ -n "$COMPOSE_BACKUP" ] && [ -f "$COMPOSE_BACKUP" ]; then
rm -f "$COMPOSE_BACKUP"
fi
if [ "$exit_code" -eq 0 ]; then
log "SUCCESS" "Mise à jour terminée avec succès"
else
log "ERROR" "Mise à jour échouée avec code: $exit_code"
fi
exit "$exit_code"
}
trap cleanup EXIT INT TERM
log "INFO" "=== Mise à jour de Nextcloud ==="
log "INFO" "Log file: $LOG_FILE"
# Afficher la version actuelle
log "INFO" "Version actuelle:"
docker-compose exec -T -u www-data nextcloud php occ status 2>&1 | tee -a "$LOG_FILE" || log "WARN" "Impossible d'obtenir le statut actuel"
# Backup avant update
log "INFO" "Création du backup de sécurité..."
if ! bash scripts/backup.sh 2>&1 | tee -a "$LOG_FILE"; then
log "ERROR" "Erreur lors du backup, abandon de la mise à jour"
exit 1
fi
# Sauvegarder le docker-compose.yml
log "INFO" "Sauvegarde de docker-compose.yml..."
COMPOSE_BACKUP="/tmp/docker-compose.yml.backup.$$"
cp docker-compose.yml "$COMPOSE_BACKUP" || {
log "ERROR" "Impossible de sauvegarder docker-compose.yml"
exit 1
}
log "INFO" "docker-compose.yml sauvegardé: $COMPOSE_BACKUP"
# Pull nouvelle image
log "INFO" "Téléchargement de la nouvelle version..."
if ! docker-compose pull nextcloud 2>&1 | tee -a "$LOG_FILE"; then
log "ERROR" "Erreur lors du téléchargement de l'image"
exit 1
fi
# Mode maintenance avant le restart
log "INFO" "Activation du mode maintenance..."
if docker-compose exec -T -u www-data nextcloud php occ maintenance:mode --on 2>>"$LOG_FILE"; then
MAINTENANCE_ENABLED=true
log "INFO" "Mode maintenance activé"
else
log "ERROR" "Impossible d'activer le mode maintenance"
exit 1
fi
# Restart
log "INFO" "Redémarrage des services..."
if ! docker-compose up -d --force-recreate nextcloud cron 2>&1 | tee -a "$LOG_FILE"; then
log "ERROR" "Erreur lors du redémarrage"
exit 1
fi
# Attendre que Nextcloud soit prêt
log "INFO" "Attente du démarrage de Nextcloud (max 2 minutes)..."
for i in {1..120}; do
if docker-compose exec -T nextcloud curl -f http://localhost/status.php >/dev/null 2>&1; then
log "INFO" "Nextcloud prêt (${i}s)"
break
fi
if [ "$i" -eq 120 ]; then
log "ERROR" "Timeout: Nextcloud n'est pas prêt après 2 minutes"
log "ERROR" "Vérifiez les logs: docker-compose logs nextcloud"
exit 1
fi
sleep 1
done
# Désactiver temporairement le mode maintenance pour permettre l'upgrade
log "INFO" "Préparation de l'upgrade..."
docker-compose exec -T -u www-data nextcloud php occ maintenance:mode --off 2>>"$LOG_FILE" || true
MAINTENANCE_ENABLED=false
# Upgrade via OCC
log "INFO" "Lancement de l'upgrade..."
if ! docker-compose exec -T -u www-data nextcloud php occ upgrade 2>&1 | tee -a "$LOG_FILE"; then
log "ERROR" "Erreur lors de l'upgrade"
exit 1
fi
# Afficher la nouvelle version
log "INFO" "Nouvelle version:"
docker-compose exec -T -u www-data nextcloud php occ status 2>&1 | tee -a "$LOG_FILE" || log "WARN" "Impossible d'obtenir le nouveau statut"
# Opérations de maintenance post-upgrade (non bloquantes)
log "INFO" "Scan des fichiers..."
docker-compose exec -T -u www-data nextcloud php occ files:scan --all 2>&1 | tee -a "$LOG_FILE" || log "WARN" "Erreur lors du scan"
log "INFO" "Ajout des indices manquants..."
docker-compose exec -T -u www-data nextcloud php occ db:add-missing-indices 2>&1 | tee -a "$LOG_FILE" || log "WARN" "Erreur lors de l'ajout des indices"
log "INFO" "Conversion des colonnes BigInt..."
docker-compose exec -T -u www-data nextcloud php occ db:convert-filecache-bigint --no-interaction 2>&1 | tee -a "$LOG_FILE" || log "WARN" "Erreur lors de la conversion"
# Désactiver le mode maintenance
log "INFO" "Désactivation du mode maintenance..."
if docker-compose exec -T -u www-data nextcloud php occ maintenance:mode --off 2>>"$LOG_FILE"; then
MAINTENANCE_ENABLED=false
log "INFO" "Mode maintenance désactivé"
else
log "WARN" "Impossible de désactiver le mode maintenance"
log "WARN" "Exécutez manuellement: make occ maintenance:mode --off"
fi
# Statut final
log "INFO" "=== Mise à jour terminée ==="
log "INFO" "Vérifiez que tout fonctionne: make health"
docker-compose exec -T -u www-data nextcloud php occ status 2>&1 | tee -a "$LOG_FILE" || true