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
- Prérequis
- Installation
- Configuration
- Démarrage
- Maintenance
- Résolution de problèmes
- Monitoring
- 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 servicestraefik-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
- Cloner le dépôt
git clone <repository-url>
cd agence66-nextcloud-docker
- Configurer l'environnement
cp .env.example .env
nano .env
- Générer des mots de passe sécurisés
# 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éesMYSQL_PASSWORD: Mot de passe de la base de donnéesMYSQL_ROOT_USER: Mot de passe root MariaDB (note: malgré le nom, c'est bien le mot de passe)REDIS_HOST_PASSWORD: Mot de passe RedisNEXTCLOUD_DOMAIN: Votre nom de domaineOVERWRITE_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_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)
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
# 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
make down
Redémarrer les services
make restart
🛠️ Maintenance
Backup pré-mise à jour
Créer une sauvegarde de sécurité avant une mise à jour:
make backup
Les sauvegardes incluent:
- Base de données MariaDB (dump SQL)
- Fichiers de données Nextcloud
- Configuration Nextcloud
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
# 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
Mise à jour
Important: Toujours créer un backup avant de mettre à jour:
# 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
make occ status
# 4. Vérifier que tout fonctionne
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.
Commandes OCC
OCC (occ = ownCloud Console) est l'interface en ligne de commande de Nextcloud:
# 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:
make occ files:cleanup
Performance lente
Optimisations recommandées:
# 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
# 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
# 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é
# 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
# 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
- Mots de passe forts: Utilisez
openssl rand -base64 32pour tous les secrets - HTTPS obligatoire: Configurez SSL/TLS avec Let's Encrypt ou certificats valides
- Mises à jour régulières: Exécutez
make backuppuismake updatemensuellement - Sauvegardes: Utilisez
make backupavant toute mise à jour (backup serveur quotidien géré au niveau système) - Monitoring: Vérifiez les logs régulièrement pour détecter les activités suspectes
Sécuriser l'accès
# 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 |
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 |
Support
Pour toute question ou problème:
- Consultez la documentation officielle Nextcloud
- Vérifiez les logs:
make logs - Consultez les issues du projet