Files
agence66-nextcloud-docker/README.md
2025-12-16 03:23:42 +01:00

436 lines
13 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
```
## 📊 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
### 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