Files
BeauTroll 123f7b6a9c feat: add custom Docker image with ffmpeg for video previews
- Create Dockerfile extending nextcloud:latest with ffmpeg
- Add .dockerignore to optimize build context
- Update docker-compose.yml to use custom image build
- Modify update.sh to rebuild custom image on updates
- Document custom image setup in README
- Enable video preview generation for .mov, .mp4 files

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-20 13:51:19 +01:00

168 lines
5.8 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 de base et rebuild image custom
log "INFO" "Téléchargement de la nouvelle version de base..."
if ! docker pull nextcloud:latest 2>&1 | tee -a "$LOG_FILE"; then
log "ERROR" "Erreur lors du téléchargement de l'image de base"
exit 1
fi
log "INFO" "Rebuild de l'image personnalisée (avec ffmpeg)..."
if ! docker-compose build --no-cache nextcloud 2>&1 | tee -a "$LOG_FILE"; then
log "ERROR" "Erreur lors du rebuild de l'image personnalisée"
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