# 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 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_USER`: Mot de passe root MariaDB (note: malgré le nom, c'est bien le mot de passe) - `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_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 ```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 ``` 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 ```bash # 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: ```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 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: ```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 | | `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: 1. Consultez la [documentation officielle Nextcloud](https://docs.nextcloud.com/) 2. Vérifiez les logs: `make logs` 3. Consultez les issues du projet