diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..20618a2 --- /dev/null +++ b/Makefile @@ -0,0 +1,46 @@ +.PHONY: help up down restart logs ps occ backup restore update health + +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" + +up: + docker-compose up -d + +down: + docker-compose down + +restart: + docker-compose restart + +logs: + docker-compose logs -f --tail=100 nextcloud + +ps: + docker-compose ps + +occ: + @bash scripts/occ.sh $(filter-out $@,$(MAKECMDGOALS)) + +backup: + @bash scripts/backup.sh + +restore: + @bash scripts/restore.sh + +update: + @bash scripts/update.sh + +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" diff --git a/scripts/backup.sh b/scripts/backup.sh new file mode 100644 index 0000000..467a3a0 --- /dev/null +++ b/scripts/backup.sh @@ -0,0 +1,75 @@ +#!/bin/bash +# scripts/backup.sh - Backup complet Nextcloud + +set -e + +source .env + +BACKUP_DIR="${BACKUP_DESTINATION:-./backups}" +DATE=$(date +%Y%m%d_%H%M%S) +BACKUP_NAME="nextcloud_backup_$DATE" +BACKUP_PATH="$BACKUP_DIR/$BACKUP_NAME" + +echo "🔧 Démarrage du backup: $BACKUP_NAME" + +# Créer le dossier de backup +mkdir -p "$BACKUP_PATH" + +# 1. Activer le mode maintenance +echo "⏸️ Activation du mode maintenance..." +docker-compose exec -T -u www-data nextcloud php occ maintenance:mode --on + +# 2. Backup de la base de données +echo "💾 Backup de la base de données..." +docker-compose exec -T db mysqldump \ + -u"$MYSQL_USER" \ + -p"$MYSQL_PASSWORD" \ + "$MYSQL_DATABASE" \ + --single-transaction \ + --quick \ + --lock-tables=false \ + > "$BACKUP_PATH/database.sql" + +# 3. Backup des fichiers de config +echo "⚙️ Backup de la configuration..." +tar -czf "$BACKUP_PATH/config.tar.gz" \ + -C ./data/config . + +# 4. Backup des données utilisateurs (optionnel, peut être énorme) +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' + +# Ou pour un tar compressé (long): +# tar -czf "$BACKUP_PATH/data.tar.gz" \ +# --exclude='appdata_*/preview' \ +# -C ./data/data . + +# 5. Backup des apps +echo "📦 Backup des apps personnalisées..." +if [ -d "./data/custom_apps" ]; then + tar -czf "$BACKUP_PATH/apps.tar.gz" \ + -C ./data/custom_apps . +fi + +# 6. Désactiver le mode maintenance +echo "▶️ Désactivation du mode maintenance..." +docker-compose exec -T -u www-data nextcloud php occ maintenance:mode --off + +# 7. Créer une archive complète +echo "🗜️ Compression finale..." +cd "$BACKUP_DIR" +tar -czf "$BACKUP_NAME.tar.gz" "$BACKUP_NAME/" +rm -rf "$BACKUP_NAME" + +# 8. Nettoyer les vieux backups +echo "🧹 Nettoyage des backups > ${BACKUP_RETENTION_DAYS:-30} jours..." +find "$BACKUP_DIR" -name "nextcloud_backup_*.tar.gz" -mtime +${BACKUP_RETENTION_DAYS:-30} -delete + +echo "✅ Backup terminé: $BACKUP_DIR/$BACKUP_NAME.tar.gz" +du -h "$BACKUP_DIR/$BACKUP_NAME.tar.gz" diff --git a/scripts/occ.sh b/scripts/occ.sh new file mode 100644 index 0000000..0177f92 --- /dev/null +++ b/scripts/occ.sh @@ -0,0 +1,6 @@ +#!/bin/bash +# scripts/occ.sh - Wrapper pour commandes OCC + +set -e + +docker-compose exec -u www-data nextcloud php occ "$@" diff --git a/scripts/restore.sh b/scripts/restore.sh new file mode 100644 index 0000000..cfa6c11 --- /dev/null +++ b/scripts/restore.sh @@ -0,0 +1,70 @@ +#!/bin/bash +# scripts/restore.sh - Restauration d'un backup + +set -e + +if [ -z "$1" ]; then + echo "Usage: $0 " + exit 1 +fi + +BACKUP_FILE="$1" + +if [ ! -f "$BACKUP_FILE" ]; then + echo "❌ Fichier introuvable: $BACKUP_FILE" + exit 1 +fi + +echo "⚠️ ATTENTION: Cette opération va écraser les données actuelles !" +read -p "Continuer? (yes/no): " confirm + +if [ "$confirm" != "yes" ]; then + echo "Annulé." + exit 0 +fi + +# Extraire le backup +TEMP_DIR=$(mktemp -d) +echo "📂 Extraction vers $TEMP_DIR..." +tar -xzf "$BACKUP_FILE" -C "$TEMP_DIR" + +BACKUP_DIR=$(ls -1 "$TEMP_DIR" | head -n1) + +# Arrêter les services +echo "⏹️ Arrêt des services..." +docker-compose down + +# Restaurer la base de données +echo "💾 Restauration de la base de données..." +docker-compose up -d db +sleep 10 + +docker-compose exec -T db mysql \ + -u"$MYSQL_USER" \ + -p"$MYSQL_PASSWORD" \ + "$MYSQL_DATABASE" \ + < "$TEMP_DIR/$BACKUP_DIR/database.sql" + +# Restaurer les fichiers +echo "📁 Restauration des fichiers..." +tar -xzf "$TEMP_DIR/$BACKUP_DIR/config.tar.gz" -C ./data/config +tar -xzf "$TEMP_DIR/$BACKUP_DIR/data.tar.gz" -C ./data/data + +if [ -f "$TEMP_DIR/$BACKUP_DIR/apps.tar.gz" ]; then + tar -xzf "$TEMP_DIR/$BACKUP_DIR/apps.tar.gz" -C ./data/custom_apps +fi + +# Redémarrer +echo "▶️ Redémarrage des services..." +docker-compose up -d + +# Réparer et scanner +echo "🔧 Réparation..." +sleep 30 +docker-compose exec -u www-data nextcloud php occ maintenance:repair +docker-compose exec -u www-data nextcloud php occ files:scan --all + +# Nettoyer +rm -rf "$TEMP_DIR" + +echo "✅ Restauration terminée !" diff --git a/scripts/update.sh b/scripts/update.sh new file mode 100644 index 0000000..7e5966e --- /dev/null +++ b/scripts/update.sh @@ -0,0 +1,47 @@ +#!/bin/bash +# scripts/update.sh - Mise à jour Nextcloud + +set -e + +echo "🔄 Mise à jour de Nextcloud" + +# Backup avant update +echo "💾 Backup de sécurité..." +bash scripts/backup.sh + +# Mode maintenance +echo "⏸️ Mode maintenance activé" +docker-compose exec -u www-data nextcloud php occ maintenance:mode --on + +# Pull nouvelle image +echo "📥 Téléchargement de la nouvelle version..." +docker-compose pull nextcloud + +# Restart +echo "🔄 Redémarrage..." +docker-compose up -d --force-recreate nextcloud cron + +# Attendre que Nextcloud soit prêt +echo "⏳ Attente du démarrage..." +sleep 30 + +# Upgrade via OCC +echo "⬆️ Lancement de l'upgrade..." +docker-compose exec -u www-data nextcloud php occ upgrade + +# Scan et indices +echo "🔍 Scan des fichiers..." +docker-compose exec -u www-data nextcloud php occ files:scan --all + +echo "📊 Ajout des indices manquants..." +docker-compose exec -u www-data nextcloud php occ db:add-missing-indices + +echo "🔧 Conversion des colonnes..." +docker-compose exec -u www-data nextcloud php occ db:convert-filecache-bigint --no-interaction + +# Désactiver maintenance +echo "▶️ Désactivation du mode maintenance" +docker-compose exec -u www-data nextcloud php occ maintenance:mode --off + +echo "✅ Mise à jour terminée !" +docker-compose exec -u www-data nextcloud php occ status