diff --git a/.env.example b/.env.example index b6be99d..e83947d 100644 --- a/.env.example +++ b/.env.example @@ -3,7 +3,6 @@ # ============================================ # Base de données MYSQL_DATABASE=nextcloud -MYSQL_ROOT_USER= MYSQL_ROOT_PASSWORD= MYSQL_USER= MYSQL_PASSWORD= diff --git a/Makefile b/Makefile index 15b13e0..38e0902 100644 --- a/Makefile +++ b/Makefile @@ -5,16 +5,36 @@ 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 "" + @echo "Services:" + @echo " make up - Démarrer tous les services Docker" + @echo " make down - Arrêter et supprimer les containers" + @echo " make restart - Redémarrer tous les services" + @echo " make ps - Lister les containers actifs" + @echo " make logs - Afficher les logs Nextcloud en temps réel" + @echo "" + @echo "Maintenance:" + @echo " make backup - Backup complet (DB + fichiers + config)" + @echo " → Active mode maintenance" + @echo " → Sauvegarde MariaDB, config, données, apps" + @echo " → Désactive mode maintenance" + @echo " → Archive dans ./backups/" + @echo "" + @echo " make update - Mise à jour Nextcloud (avec backup auto)" + @echo " → Backup de sécurité automatique" + @echo " → Pull nouvelle image Docker" + @echo " → Restart avec nouvelle version" + @echo " → Upgrade base de données" + @echo " → Optimisations post-update" + @echo "" + @echo " make restore - Restaurer depuis un backup" + @echo " → Arrêt des services" + @echo " → Restauration DB + fichiers" + @echo " → Redémarrage et réparation" + @echo "" + @echo "Outils:" + @echo " make occ - Exécuter une commande OCC Nextcloud" + @echo " make health - Vérifier l'état (Nextcloud + DB + config)" up: docker-compose up -d diff --git a/README.md b/README.md index 29d9a25..410543e 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ Variables importantes à configurer dans `.env`: - `MYSQL_DATABASE`: Nom de la base de données (défaut: nextcloud) - `MYSQL_USER`: Utilisateur de la base de données - `MYSQL_PASSWORD`: Mot de passe de la base de données -- `MYSQL_ROOT_USER`: Mot de passe root MariaDB (note: malgré le nom, c'est bien le mot de passe) +- `MYSQL_ROOT_PASSWORD`: Mot de passe root MariaDB - `REDIS_HOST_PASSWORD`: Mot de passe Redis - `NEXTCLOUD_DOMAIN`: Votre nom de domaine - `OVERWRITE_PROTOCOL`: Protocole (http/https) @@ -77,20 +77,18 @@ Variables importantes à configurer dans `.env`: Créez votre fichier `.env` basé sur `.env.example`: -| Variable | Description | Exemple | -| --------------------- | ------------------------------ | ------------------- | -| `MYSQL_DATABASE` | Nom de la base de données | `nextcloud` | -| `MYSQL_USER` | Utilisateur base de données | `nextcloud` | -| `MYSQL_PASSWORD` | Mot de passe utilisateur DB | `********` | -| `MYSQL_ROOT_USER` | Mot de passe root MariaDB (\*) | `********` | -| `REDIS_HOST_PASSWORD` | Mot de passe Redis | `********` | -| `NEXTCLOUD_DOMAIN` | Domaine de confiance | `cloud.example.com` | -| `OVERWRITE_PROTOCOL` | Protocole (http/https) | `https` | -| `OVERWRITE_HOST` | Hôte public | `cloud.example.com` | -| `TRUSTED_PROXIES` | Proxies de confiance | `172.18.0.0/16` | -| `OVERWRITE_CLI_URL` | URL pour CLI (optionnel) | `https://...` | - -(\*) Note: Malgré le nom `MYSQL_ROOT_USER`, cette variable contient le mot de passe root (utilisé pour `MYSQL_ROOT_PASSWORD` dans le container) +| Variable | Description | Exemple | +| ---------------------- | --------------------------- | ------------------- | +| `MYSQL_DATABASE` | Nom de la base de données | `nextcloud` | +| `MYSQL_USER` | Utilisateur base de données | `nextcloud` | +| `MYSQL_PASSWORD` | Mot de passe utilisateur DB | `********` | +| `MYSQL_ROOT_PASSWORD` | Mot de passe root MariaDB | `********` | +| `REDIS_HOST_PASSWORD` | Mot de passe Redis | `********` | +| `NEXTCLOUD_DOMAIN` | Domaine de confiance | `cloud.example.com` | +| `OVERWRITE_PROTOCOL` | Protocole (http/https) | `https` | +| `OVERWRITE_HOST` | Hôte public | `cloud.example.com` | +| `TRUSTED_PROXIES` | Proxies de confiance | `172.18.0.0/16` | +| `OVERWRITE_CLI_URL` | URL pour CLI (optionnel) | `https://...` | ### Volumes @@ -159,11 +157,21 @@ Créer une sauvegarde de sécurité avant une mise à jour: make backup ``` -Les sauvegardes incluent: +**Actions effectuées par le script:** -- Base de données MariaDB (dump SQL) -- Fichiers de données Nextcloud -- Configuration Nextcloud +1. ⏸️ Active le mode maintenance Nextcloud +2. 💾 Sauvegarde la base de données MariaDB (mysqldump avec transactions) +3. ⚙️ Sauvegarde la configuration (`/var/www/html/config`) +4. 📁 Sauvegarde les données utilisateurs (avec exclusions: previews, cache, thumbnails) +5. 📦 Sauvegarde les apps personnalisées (`custom_apps`) +6. ▶️ Désactive le mode maintenance +7. 🗜️ Compresse le tout en `.tar.gz` dans `./backups/` +8. 🧹 Nettoie les backups de plus de 7 jours + +**Sécurité:** +- Tous les tar s'exécutent dans le container en tant que `www-data` +- Mots de passe sécurisés via `MYSQL_PWD` (pas visible dans `ps`) +- Cleanup automatique en cas d'erreur avec trap handler **Note**: Un service cron intégré est déjà configuré dans docker-compose.yml pour les tâches planifiées Nextcloud (préviews, nettoyage, etc.) @@ -173,29 +181,87 @@ Les sauvegardes incluent: # Lister les backups disponibles ls -lh backups/ -# Restaurer depuis une sauvegarde (remplacer par le nom du fichier backup) -bash scripts/restore.sh backups/nextcloud_backup_YYYYMMDD_HHMMSS.tar.gz +# Restaurer depuis une sauvegarde +make restore backups/nextcloud_backup_YYYYMMDD_HHMMSS.tar.gz ``` +**Actions effectuées par le script:** + +1. ⚠️ Demande confirmation (opération destructive!) +2. 📂 Extrait l'archive dans un répertoire temporaire +3. ✅ Valide le contenu de l'archive (type MIME, fichiers requis) +4. ⏹️ Arrête tous les services Docker +5. 💾 Restaure la base de données MariaDB + - Démarre uniquement le container DB + - Attend que MariaDB soit prêt (health check) + - Importe le dump SQL +6. ▶️ Démarre tous les services +7. 📁 Restaure les fichiers (config, données, apps) via le container +8. 🔧 Exécute `maintenance:repair` pour corriger les éventuels problèmes +9. ▶️ Désactive le mode maintenance +10. 🔍 Scanne tous les fichiers avec `files:scan --all` +11. 🧹 Nettoie le répertoire temporaire + +**Sécurité:** +- Validation du chemin (protection path traversal) +- Vérification du type de fichier (gzip) +- Restauration via container en tant que `www-data` +- Cleanup garanti avec trap handler + ### Mise à jour -**Important**: Toujours créer un backup avant de mettre à jour: +Mettre à jour Nextcloud vers la dernière version: ```bash -# 1. Créer un backup de sécurité -make backup - -# 2. Mettre à jour Nextcloud et ses dépendances make update +``` -# 3. Vérifier la version après mise à jour +**Le script effectue automatiquement un backup avant la mise à jour!** + +**Actions effectuées par le script:** + +1. 💾 **Backup automatique de sécurité** + - Exécute `scripts/backup.sh` complet + - Archive créée dans `./backups/` +2. 📥 Télécharge la nouvelle image Docker Nextcloud +3. ⏸️ Active le mode maintenance +4. 🔄 Redémarre les containers avec `--force-recreate` +5. ⏳ Attend que Nextcloud soit prêt (health check jusqu'à 60s) +6. ▶️ Désactive temporairement le mode maintenance +7. ⬆️ Exécute `occ upgrade` (migrations base de données) +8. 🔍 Scanne tous les fichiers (`files:scan --all`) +9. 📊 Ajoute les indices manquants (`db:add-missing-indices`) +10. 🔧 Convertit les colonnes en bigint (`db:convert-filecache-bigint`) +11. ▶️ Désactive le mode maintenance +12. ✅ Affiche le statut final + +**Vérification post-update:** + +```bash +# Vérifier la version et l'état make occ status -# 4. Vérifier que tout fonctionne +# Vérifier la santé globale make health ``` -En cas de problème après la mise à jour, utilisez la commande de restauration avec la date du backup créé à l'étape 1. +**En cas de problème:** + +Si la mise à jour échoue, restaurez le backup automatique créé à l'étape 1: + +```bash +# Lister les backups (le plus récent est celui de l'update) +ls -lht backups/ | head + +# Restaurer +make restore backups/nextcloud_backup_YYYYMMDD_HHMMSS.tar.gz +``` + +**Sécurité:** +- Backup automatique avant toute modification +- Trap handler pour cleanup en cas d'erreur +- Mode maintenance automatiquement désactivé même en cas d'échec +- Instructions de rollback affichées en cas d'erreur ### Commandes OCC @@ -331,17 +397,34 @@ make occ app:enable bruteforcesettings ## Commandes Make disponibles -| Commande | Description | -| -------------- | ---------------------------- | -| `make up` | Démarrer tous les services | -| `make down` | Arrêter tous les services | -| `make restart` | Redémarrer tous les services | -| `make ps` | Lister les containers actifs | -| `make logs` | Afficher les logs | -| `make health` | Vérifier l'état de santé | -| `make backup` | Créer une sauvegarde | -| `make update` | Mettre à jour Nextcloud | -| `make occ` | Exécuter une commande OCC | +| Commande | Description | +| -------------------------- | ------------------------------------------------------------------------------------------------ | +| `make up` | Démarrer tous les services Docker (nextcloud, db, redis, cron) | +| `make down` | Arrêter et supprimer tous les containers | +| `make restart` | Redémarrer tous les services | +| `make ps` | Lister les containers actifs avec leur état | +| `make logs` | Afficher les logs Nextcloud en temps réel (tail -100) | +| `make health` | Vérifier l'état: statut Nextcloud + config système + connexion MariaDB | +| `make backup` | Backup complet: DB + config + données + apps (avec mode maintenance) | +| `make restore ` | Restaurer depuis un backup (destructif - demande confirmation) | +| `make update` | Mise à jour complète: backup auto + pull + upgrade + optimisations | +| `make occ ` | Exécuter une commande OCC Nextcloud (ex: `make occ user:list`) | + +**Exemples d'utilisation:** + +```bash +# Backup et update +make backup +make update + +# Restaurer un backup spécifique +make restore backups/nextcloud_backup_20251215_112450.tar.gz + +# Commandes OCC +make occ status +make occ user:list +make occ files:scan --all +``` ## Support diff --git a/docker-compose.yml b/docker-compose.yml index 469244e..3fa210e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -70,7 +70,7 @@ services: - ./db:/var/lib/mysql - ./db-config/my.cnf:/etc/mysql/conf.d/custom.cnf:ro environment: - - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_USER} + - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} - MYSQL_DATABASE=nextcloud - MYSQL_USER=${MYSQL_USER} - MYSQL_PASSWORD=${MYSQL_PASSWORD}