Added comprehensive documentation about debug mode: In "Résolution de problèmes" section: - How to check debug mode status - How to disable debug mode (production) - How to enable temporarily (development only) - Security warnings and risks explained In "Sécurité" section: - Added to best practices checklist - Reminder to verify debug mode is disabled Key warnings included: - Security: exposes sensitive information - Performance: excessive logging slows down app - Disk space: fills up disk quickly - Compliance: may log personal data (GDPR) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
475 lines
15 KiB
Markdown
475 lines
15 KiB
Markdown
# Nextcloud Docker Deployment
|
||
|
||
Déploiement Nextcloud avec Docker Compose comprenant MariaDB 10.11, Redis (cache), service cron intégré et support Traefik pour le reverse proxy.
|
||
|
||
## Table des matières
|
||
|
||
- [Architecture](#architecture)
|
||
- [Prérequis](#prérequis)
|
||
- [Installation](#installation)
|
||
- [Configuration](#configuration)
|
||
- [Démarrage](#démarrage)
|
||
- [Maintenance](#️-maintenance)
|
||
- [Résolution de problèmes](#-résolution-de-problèmes)
|
||
- [Monitoring](#-monitoring)
|
||
- [Sécurité](#-sécurité)
|
||
|
||
## Architecture
|
||
|
||
Le déploiement comprend 4 services:
|
||
|
||
- **nextcloud**: Application Nextcloud (port 127.0.0.1:8888:80)
|
||
- **db**: MariaDB 10.11 avec healthcheck
|
||
- **redis**: Cache Redis avec politique LRU (512MB max)
|
||
- **cron**: Tâches planifiées Nextcloud (préviews, nettoyage, etc.)
|
||
|
||
**Réseaux**:
|
||
|
||
- `nextcloud-net`: Réseau interne pour la communication entre services
|
||
- `traefik-net`: Réseau externe pour Traefik (reverse proxy)
|
||
|
||
## Prérequis
|
||
|
||
- Docker >= 20.10
|
||
- Docker Compose >= 2.0
|
||
- Traefik configuré avec réseau `traefik-net` (pour exposition HTTPS)
|
||
- Nom de domaine configuré avec certificat SSL
|
||
- Minimum 2GB RAM recommandé
|
||
- Minimum 10GB d'espace disque
|
||
|
||
## Installation
|
||
|
||
1. **Cloner le dépôt**
|
||
|
||
```bash
|
||
git clone <repository-url>
|
||
cd agence66-nextcloud-docker
|
||
```
|
||
|
||
2. **Configurer l'environnement**
|
||
|
||
```bash
|
||
cp .env.example .env
|
||
nano .env
|
||
```
|
||
|
||
3. **Générer des mots de passe sécurisés**
|
||
|
||
```bash
|
||
# Génération pour chaque secret requis
|
||
openssl rand -base64 32
|
||
```
|
||
|
||
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_PASSWORD`: Mot de passe root MariaDB
|
||
- `REDIS_HOST_PASSWORD`: Mot de passe Redis
|
||
- `NEXTCLOUD_DOMAIN`: Votre nom de domaine
|
||
- `OVERWRITE_PROTOCOL`: Protocole (http/https)
|
||
- `OVERWRITE_HOST`: Hôte public (optionnel)
|
||
|
||
## Configuration
|
||
|
||
### Variables d'environnement
|
||
|
||
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_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
|
||
|
||
Les données persistantes sont stockées dans:
|
||
|
||
- `./data`: Fichiers Nextcloud et données utilisateurs
|
||
- `./db`: Base de données MariaDB
|
||
- `./db-config`: Configuration MariaDB personnalisée
|
||
|
||
### Configuration PHP
|
||
|
||
Les paramètres PHP sont préconfigurés dans docker-compose.yml:
|
||
|
||
| Paramètre | Valeur | Description |
|
||
| ------------------------- | ------ | ------------------------------- |
|
||
| `PHP_MEMORY_LIMIT` | 4096M | Mémoire allouée à PHP |
|
||
| `PHP_UPLOAD_MAX_FILESIZE` | 2G | Taille max d'upload |
|
||
| `PHP_POST_MAX_SIZE` | 2G | Taille max POST |
|
||
| `PHP_MAX_EXECUTION_TIME` | 1800s | Timeout d'exécution (30min) |
|
||
| `PHP_MAX_INPUT_TIME` | 1800s | Timeout lecture données (30min) |
|
||
| `APACHE_BODY_LIMIT` | 2GB | Limite Apache pour le body |
|
||
|
||
Ces valeurs permettent l'upload de fichiers jusqu'à 2GB.
|
||
|
||
## Démarrage
|
||
|
||
### Première installation
|
||
|
||
```bash
|
||
# Démarrer tous les services
|
||
make up
|
||
|
||
# Vérifier que tous les containers sont actifs
|
||
make ps
|
||
|
||
# Vérifier l'état de Nextcloud
|
||
make health
|
||
```
|
||
|
||
**Accès à l'instance**:
|
||
|
||
- **Via Traefik** (production): `https://votre-domaine.com` (recommandé)
|
||
- **Accès direct** (développement): `http://localhost:8888`
|
||
|
||
**Note**: En production, Traefik doit être configuré pour exposer Nextcloud via HTTPS. Le port 8888 n'écoute que sur 127.0.0.1 pour des raisons de sécurité.
|
||
|
||
### Arrêter les services
|
||
|
||
```bash
|
||
make down
|
||
```
|
||
|
||
### Redémarrer les services
|
||
|
||
```bash
|
||
make restart
|
||
```
|
||
|
||
## 🛠️ Maintenance
|
||
|
||
### Backup pré-mise à jour
|
||
|
||
Créer une sauvegarde de sécurité avant une mise à jour:
|
||
|
||
```bash
|
||
make backup
|
||
```
|
||
|
||
**Actions effectuées par le script:**
|
||
|
||
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.)
|
||
|
||
### Restauration
|
||
|
||
```bash
|
||
# Lister les backups disponibles
|
||
ls -lh backups/
|
||
|
||
# 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
|
||
|
||
Mettre à jour Nextcloud vers la dernière version:
|
||
|
||
```bash
|
||
make update
|
||
```
|
||
|
||
**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
|
||
|
||
# Vérifier la santé globale
|
||
make health
|
||
```
|
||
|
||
**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
|
||
|
||
OCC (occ = ownCloud Console) est l'interface en ligne de commande de Nextcloud:
|
||
|
||
```bash
|
||
# Vérifier le status de l'instance
|
||
make occ status
|
||
|
||
# Lister les utilisateurs
|
||
make occ user:list
|
||
|
||
# Scanner tous les fichiers
|
||
make occ files:scan --all
|
||
|
||
# Lister les applications installées
|
||
make occ app:list
|
||
|
||
# Activer/désactiver le mode maintenance
|
||
make occ maintenance:mode --on
|
||
make occ maintenance:mode --off
|
||
```
|
||
|
||
## 🔧 Résolution de problèmes
|
||
|
||
### Erreur 423 WebDAV Locked
|
||
|
||
Si vous rencontrez des erreurs de fichiers verrouillés:
|
||
|
||
```bash
|
||
make occ files:cleanup
|
||
```
|
||
|
||
### Performance lente
|
||
|
||
Optimisations recommandées:
|
||
|
||
```bash
|
||
# Ajouter les indices manquants en base de données
|
||
make occ db:add-missing-indices
|
||
|
||
# Convertir les colonnes en big int si nécessaire
|
||
make occ db:convert-filecache-bigint
|
||
|
||
# Nettoyer les fichiers supprimés
|
||
make occ files:cleanup
|
||
|
||
# Optimiser la génération des previews
|
||
make occ config:app:set previewgenerator squareSizes --value="256 512"
|
||
make occ config:app:set previewgenerator widthSizes --value="256 512 1024"
|
||
make occ config:app:set previewgenerator heightSizes --value="256 512 1024"
|
||
|
||
# Générer les previews
|
||
make occ preview:generate-all
|
||
```
|
||
|
||
### Problèmes de permissions
|
||
|
||
```bash
|
||
# Réparer les permissions des fichiers
|
||
docker compose exec -u www-data nextcloud chown -R www-data:www-data /var/www/html/data
|
||
```
|
||
|
||
### Espace disque insuffisant
|
||
|
||
```bash
|
||
# Nettoyer les anciennes versions de fichiers
|
||
make occ versions:cleanup
|
||
|
||
# Nettoyer la corbeille
|
||
make occ trashbin:cleanup --all-users
|
||
|
||
# Vérifier l'utilisation de l'espace
|
||
du -sh ./data # Données Nextcloud
|
||
du -sh ./db # Base de données MariaDB
|
||
```
|
||
|
||
### Mode débogage
|
||
|
||
⚠️ **IMPORTANT**: Le mode débogage ne doit **JAMAIS** être activé en production!
|
||
|
||
**Vérifier l'état du mode débogage:**
|
||
|
||
```bash
|
||
make occ config:system:get debug
|
||
```
|
||
|
||
**Désactiver le mode débogage (PRODUCTION):**
|
||
|
||
```bash
|
||
# Via OCC (recommandé)
|
||
make occ config:system:set debug --value=false --type=boolean
|
||
|
||
# OU éditer manuellement config.php
|
||
docker-compose exec nextcloud nano /var/www/html/config/config.php
|
||
# Chercher 'debug' => true, et changer en false ou supprimer la ligne
|
||
```
|
||
|
||
**Activer temporairement pour diagnostiquer un problème (DÉVELOPPEMENT UNIQUEMENT):**
|
||
|
||
```bash
|
||
# Activer
|
||
make occ config:system:set debug --value=true --type=boolean
|
||
|
||
# IMPORTANT: Désactiver immédiatement après le diagnostic!
|
||
make occ config:system:set debug --value=false --type=boolean
|
||
```
|
||
|
||
**Pourquoi c'est dangereux en production:**
|
||
|
||
- 🚨 **Sécurité**: Expose des informations sensibles (chemins, configuration, requêtes SQL)
|
||
- 🐌 **Performance**: Génère énormément de logs et ralentit l'application
|
||
- 💾 **Espace disque**: Remplit rapidement le disque avec des logs détaillés
|
||
- 📊 **Conformité**: Peut logger des données personnelles (RGPD)
|
||
|
||
## 📊 Monitoring
|
||
|
||
### Vérifications de santé
|
||
|
||
```bash
|
||
# Status général
|
||
make health
|
||
|
||
# Vérifier les containers actifs
|
||
make ps
|
||
|
||
# Voir les logs en temps réel
|
||
make logs
|
||
|
||
# Logs d'un service spécifique
|
||
docker compose logs -f nextcloud
|
||
docker compose logs -f db
|
||
docker compose logs -f redis
|
||
```
|
||
|
||
### Métriques de performance
|
||
|
||
```bash
|
||
# Statistiques système
|
||
make occ status
|
||
|
||
# Informations sur la base de données MariaDB
|
||
docker compose exec db mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD} -e "SELECT table_schema AS 'Database', ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size (MB)' FROM information_schema.TABLES WHERE table_schema = 'nextcloud';"
|
||
|
||
# Utilisation Redis
|
||
docker compose exec redis redis-cli -a ${REDIS_HOST_PASSWORD} INFO stats
|
||
```
|
||
|
||
## 🔒 Sécurité
|
||
|
||
### Bonnes pratiques
|
||
|
||
1. **Mots de passe forts**: Utilisez `openssl rand -base64 32` pour tous les secrets
|
||
2. **HTTPS obligatoire**: Configurez SSL/TLS avec Let's Encrypt ou certificats valides
|
||
3. **Mises à jour régulières**: Exécutez `make backup` puis `make update` mensuellement
|
||
4. **Sauvegardes**: Utilisez `make backup` avant toute mise à jour (backup serveur quotidien géré au niveau système)
|
||
5. **Monitoring**: Vérifiez les logs régulièrement pour détecter les activités suspectes
|
||
6. **Mode débogage désactivé**: Vérifiez avec `make occ config:system:get debug` (doit être `false` ou absent)
|
||
|
||
### Sécuriser l'accès
|
||
|
||
```bash
|
||
# Activer l'authentification à deux facteurs
|
||
make occ app:enable twofactor_totp
|
||
|
||
# Forcer HTTPS
|
||
make occ config:system:set overwriteprotocol --value="https"
|
||
|
||
# Limiter les tentatives de connexion
|
||
make occ app:enable bruteforcesettings
|
||
```
|
||
|
||
## Commandes Make disponibles
|
||
|
||
| 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 <file>` | Restaurer depuis un backup (destructif - demande confirmation) |
|
||
| `make update` | Mise à jour complète: backup auto + pull + upgrade + optimisations |
|
||
| `make occ <commande>` | 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
|
||
|
||
Pour toute question ou problème:
|
||
|
||
1. Consultez la [documentation officielle Nextcloud](https://docs.nextcloud.com/)
|
||
2. Vérifiez les logs: `make logs`
|
||
3. Consultez les issues du projet
|