diff --git a/Makefile b/Makefile index 067f637..15b13e0 100644 --- a/Makefile +++ b/Makefile @@ -5,16 +5,16 @@ export help: @echo "Nextcloud Docker - Commandes disponibles:" - @echo " make up - Démarrer les services" - @echo " make down - Arrêter les services" - @echo " make restart - Redémarrer" - @echo " make logs - Voir les logs" - @echo " make ps - Status des containers" - @echo " make occ - Lancer une commande occ" - @echo " make backup - Backup complet" - @echo " make restore - Restaurer un backup" - @echo " make update - Mettre à jour Nextcloud" - @echo " make health - Vérifier la santé du système" + @echo " make up - Démarrer les services" + @echo " make down - Arrêter les services" + @echo " make restart - Redémarrer" + @echo " make logs - Voir les logs" + @echo " make ps - Status des containers" + @echo " make occ - Lancer une commande occ" + @echo " make backup - Backup complet" + @echo " make restore - Restaurer un backup" + @echo " make update - Mettre à jour Nextcloud" + @echo " make health - Vérifier la santé du système" up: docker-compose up -d @@ -38,7 +38,7 @@ backup: @bash scripts/backup.sh restore: - @bash scripts/restore.sh + @bash scripts/restore.sh $(filter-out $@,$(MAKECMDGOALS)) update: @bash scripts/update.sh @@ -47,3 +47,7 @@ health: @docker-compose exec nextcloud php occ status @docker-compose exec nextcloud php occ config:list system @docker-compose exec db mysql -u$(MYSQL_USER) -p$(MYSQL_PASSWORD) -e "SELECT 1" 2>/dev/null && echo "✅ Base de données accessible" || echo "❌ Erreur base de données" + +# Catch-all target pour permettre les arguments aux commandes occ et restore +%: + @: diff --git a/scripts/backup.sh b/scripts/backup.sh old mode 100644 new mode 100755 index b28c320..374f142 --- a/scripts/backup.sh +++ b/scripts/backup.sh @@ -22,6 +22,7 @@ DATE=$(date +%Y%m%d_%H%M%S) BACKUP_NAME="nextcloud_backup_$DATE" BACKUP_PATH="$BACKUP_DIR/$BACKUP_NAME" MAINTENANCE_ENABLED=false +BACKUP_RETENTION_DAYS=7 # Fonction de nettoyage en cas d'erreur cleanup() { @@ -69,36 +70,32 @@ if ! docker-compose exec -T db sh -c "MYSQL_PWD=\"\$MYSQL_PASSWORD\" mysqldump \ \"\$MYSQL_DATABASE\" \ --single-transaction \ --quick \ - --lock-tables=false" > "$BACKUP_PATH/database.sql"; then + --lock-tables=false" >"$BACKUP_PATH/database.sql"; then echo "❌ Erreur lors du backup de la base de données" exit 1 fi # 3. Backup des fichiers de config echo "⚙️ Backup de la configuration..." -tar -czf "$BACKUP_PATH/config.tar.gz" \ - -C ./data/config . +docker-compose exec -T -u www-data nextcloud tar -czf - -C /var/www/html/config . > "$BACKUP_PATH/config.tar.gz" -# 4. Backup des données utilisateurs (optionnel, peut être énorme) +# 4. Backup des données utilisateurs (peut être volumineux) echo "📁 Backup des données utilisateurs..." -# Pour un backup incrémental, utilisez rsync -rsync -a --info=progress2 \ - ./data/data/ \ - "$BACKUP_PATH/data/" \ - --exclude 'appdata_*/preview' \ - --exclude '*/cache' \ - --exclude '*/thumbnails' +# Utiliser tar avec compression et exclusions depuis le container +docker-compose exec -T -u www-data nextcloud tar -czf - \ + -C /var/www/html/data \ + --exclude='appdata_*/preview' \ + --exclude='*/cache' \ + --exclude='*/thumbnails' \ + . > "$BACKUP_PATH/data.tar.gz" -# Ou pour un tar compressé (long): -# tar -czf "$BACKUP_PATH/data.tar.gz" \ -# --exclude='appdata_*/preview' \ -# -C ./data/data . - -# 5. Backup des apps +# 5. Backup des apps personnalisées echo "📦 Backup des apps personnalisées..." -if [ -d "./data/custom_apps" ]; then - tar -czf "$BACKUP_PATH/apps.tar.gz" \ - -C ./data/custom_apps . +if docker-compose exec -T nextcloud [ -d /var/www/html/custom_apps ]; then + docker-compose exec -T -u www-data nextcloud tar -czf - \ + -C /var/www/html/custom_apps . > "$BACKUP_PATH/apps.tar.gz" +else + echo "ℹ️ Pas d'apps personnalisées à sauvegarder" fi # 6. Désactiver le mode maintenance diff --git a/scripts/occ.sh b/scripts/occ.sh old mode 100644 new mode 100755 diff --git a/scripts/restore.sh b/scripts/restore.sh old mode 100644 new mode 100755 index 99ca77b..3fcd118 --- a/scripts/restore.sh +++ b/scripts/restore.sh @@ -120,36 +120,8 @@ if ! docker-compose exec -T db sh -c "MYSQL_PWD=\"\$MYSQL_PASSWORD\" mysql \ exit 1 fi -# Restaurer les fichiers -echo "📁 Restauration des fichiers..." - -# Vérifier et créer les répertoires si nécessaire -mkdir -p ./data/config ./data/data - -if ! tar -xzf "$TEMP_DIR/$BACKUP_DIR/config.tar.gz" -C ./data/config; then - echo "❌ Erreur lors de la restauration de la configuration" - exit 1 -fi - -# Restaurer les données si elles existent dans l'archive -if [ -f "$TEMP_DIR/$BACKUP_DIR/data.tar.gz" ]; then - if ! tar -xzf "$TEMP_DIR/$BACKUP_DIR/data.tar.gz" -C ./data/data; then - echo "❌ Erreur lors de la restauration des données" - exit 1 - fi -elif [ -d "$TEMP_DIR/$BACKUP_DIR/data" ]; then - # Si les données sont dans un dossier (backup rsync) - rsync -a "$TEMP_DIR/$BACKUP_DIR/data/" ./data/data/ -fi - -# Restaurer les apps personnalisées si présentes -if [ -f "$TEMP_DIR/$BACKUP_DIR/apps.tar.gz" ]; then - mkdir -p ./data/custom_apps - tar -xzf "$TEMP_DIR/$BACKUP_DIR/apps.tar.gz" -C ./data/custom_apps -fi - -# Redémarrer -echo "▶️ Redémarrage des services..." +# Redémarrer tous les services d'abord +echo "▶️ Démarrage des services..." docker-compose up -d # Attendre que Nextcloud soit prêt @@ -160,15 +132,49 @@ for i in {1..60}; do break fi if [ "$i" -eq 60 ]; then - echo "⚠️ Warning: Nextcloud met du temps à démarrer, on continue..." - break + echo "❌ Timeout: Nextcloud n'est pas prêt" + exit 1 fi sleep 1 done -# Réparer et scanner +# Restaurer les fichiers via le container pour éviter les problèmes de permissions +echo "📁 Restauration des fichiers..." + +# Restaurer la configuration +if ! docker-compose exec -T -u www-data nextcloud tar -xzf - -C /var/www/html/config < "$TEMP_DIR/$BACKUP_DIR/config.tar.gz"; then + echo "❌ Erreur lors de la restauration de la configuration" + exit 1 +fi + +# Restaurer les données +if [ -f "$TEMP_DIR/$BACKUP_DIR/data.tar.gz" ]; then + echo "📦 Restauration des données utilisateurs..." + if ! docker-compose exec -T -u www-data nextcloud tar -xzf - -C /var/www/html/data < "$TEMP_DIR/$BACKUP_DIR/data.tar.gz"; then + echo "❌ Erreur lors de la restauration des données" + exit 1 + fi +elif [ -d "$TEMP_DIR/$BACKUP_DIR/data" ]; then + echo "⚠️ Format de backup rsync détecté, copie manuelle nécessaire" + echo " Utilisez: docker cp pour copier $TEMP_DIR/$BACKUP_DIR/data/ vers le container" +fi + +# Restaurer les apps personnalisées si présentes +if [ -f "$TEMP_DIR/$BACKUP_DIR/apps.tar.gz" ]; then + echo "📦 Restauration des apps personnalisées..." + docker-compose exec -T -u www-data nextcloud tar -xzf - -C /var/www/html/custom_apps < "$TEMP_DIR/$BACKUP_DIR/apps.tar.gz" || echo "ℹ️ Pas d'apps à restaurer" +fi + +# Réparer echo "🔧 Réparation..." -docker-compose exec -u www-data nextcloud php occ maintenance:repair || echo "⚠️ Erreur lors de la réparation" -docker-compose exec -u www-data nextcloud php occ files:scan --all || echo "⚠️ Erreur lors du scan" +docker-compose exec -T -u www-data nextcloud php occ maintenance:repair || echo "⚠️ Erreur lors de la réparation" + +# Désactiver le mode maintenance avant le scan +echo "▶️ Désactivation du mode maintenance..." +docker-compose exec -T -u www-data nextcloud php occ maintenance:mode --off || echo "⚠️ Impossible de désactiver le mode maintenance" + +# Scanner les fichiers +echo "🔍 Scan des fichiers..." +docker-compose exec -T -u www-data nextcloud php occ files:scan --all || echo "⚠️ Erreur lors du scan" echo "✅ Restauration terminée !" diff --git a/scripts/update.sh b/scripts/update.sh old mode 100644 new mode 100755 index 2efcb2a..394965a --- a/scripts/update.sh +++ b/scripts/update.sh @@ -34,7 +34,14 @@ if ! bash scripts/backup.sh; then exit 1 fi -# Mode maintenance +# 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 @@ -43,13 +50,6 @@ else 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 @@ -68,7 +68,12 @@ for i in {1..60}; do sleep 1 done -# Upgrade via OCC +# 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"