BeauTroll a1b51599c6 feat: expose Apache logs to host for fail2ban integration
- Mount Apache logs directory to ./logs/apache
- Configure JSON file logging driver with rotation
- Set max log size to 10MB with 3 files retention
- Enable fail2ban to monitor access logs directly
- Prevents need for systemd service to export logs

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-20 21:03:48 +01:00
2025-12-14 20:10:07 +01:00

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

Le déploiement comprend 5 services:

  • nextcloud: Application Nextcloud avec image personnalisée (inclut ffmpeg) - 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.)
  • backup-cron: Système de backup automatisé (quotidien)

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
git clone <repository-url>
cd agence66-nextcloud-docker
  1. Configurer l'environnement
cp .env.example .env
nano .env
  1. 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é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.

Image Docker personnalisée

Le projet utilise une image Docker personnalisée basée sur nextcloud:latest qui inclut ffmpeg pour la génération de previews vidéo (.mov, .mp4, etc.).

Dockerfile:

FROM nextcloud:latest

# Installer ffmpeg pour les previews vidéo
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
    ffmpeg \
    && rm -rf /var/lib/apt/lists/*

Builder l'image:

# Builder l'image custom
docker compose build nextcloud

# Ou forcer le rebuild
docker compose build --no-cache nextcloud

Vérifier ffmpeg:

docker compose exec nextcloud ffmpeg -version

Activer les previews vidéo:

Après le premier démarrage, activez les providers de preview pour les vidéos:

docker compose exec -u www-data nextcloud php occ config:system:set enabledPreviewProviders 0 --value="OC\\Preview\\Movie"
docker compose exec -u www-data nextcloud php occ config:system:set enabledPreviewProviders 1 --value="OC\\Preview\\PNG"
docker compose exec -u www-data nextcloud php occ config:system:set enabledPreviewProviders 2 --value="OC\\Preview\\JPEG"
docker compose exec -u www-data nextcloud php occ config:system:set enabledPreviewProviders 3 --value="OC\\Preview\\GIF"
docker compose exec -u www-data nextcloud php occ config:system:set enabledPreviewProviders 4 --value="OC\\Preview\\BMP"

# Générer les previews pour un utilisateur
docker compose exec -u www-data nextcloud php occ preview:generate-all nom_utilisateur

Note: L'image est buildée localement et taguée nextcloud-custom:latest. Lors des mises à jour Nextcloud, pensez à rebuild l'image.

Configuration Apache pour Traefik

Le fichier apache/nextcloud.conf configure Apache pour fonctionner correctement derrière le reverse proxy Traefik.

Configuration incluse:

  • RemoteIP: Récupération de l'IP réelle du client (pas celle de Traefik)
  • X-Forwarded-Proto: Détection automatique HTTPS depuis Traefik
  • Headers de sécurité: X-Frame-Options, X-Content-Type-Options, etc.
  • WebDAV désactivé: Évite les conflits (Nextcloud gère son propre WebDAV)

Activation des modules Apache:

Lors du premier déploiement, activez les modules nécessaires:

# Activer tous les modules en une commande
docker compose exec nextcloud bash -c "a2enmod headers rewrite dir mime remoteip env && apache2ctl graceful"

# Redémarrer Nextcloud pour appliquer les changements
docker compose restart nextcloud

Modules activés:

Module Utilité
headers Gestion des headers HTTP (sécurité)
rewrite URL rewriting (requis pour .htaccess)
dir DirectoryIndex (index.php, etc.)
mime Types MIME (CSS, JS, etc.)
remoteip Récupération IP client via X-Forwarded-For
env Variables d'environnement (détection HTTPS)

Note: Les modules headers, rewrite, dir, et mime sont normalement activés par défaut dans l'image nextcloud:latest. Seuls remoteip et env doivent être activés manuellement.

Vérification:

# Vérifier qu'Apache utilise bien la configuration
docker compose exec nextcloud apache2ctl -M | grep -E "(headers|rewrite|remoteip|env)"

# Vérifier les logs avec IP réelle
docker compose logs nextcloud --tail=20

Démarrage

Première installation

# Builder l'image personnalisée (inclut ffmpeg)
docker compose build nextcloud

# 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

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

# 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:

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. 🔨 Rebuild l'image personnalisée avec la nouvelle version 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:

# 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:

# 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:

# 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

Mode débogage

⚠️ IMPORTANT: Le mode débogage ne doit JAMAIS être activé en production!

Vérifier l'état du mode débogage:

make occ config:system:get debug

Désactiver le mode débogage (PRODUCTION):

# 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):

# 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)

Messages de debug dans la console navigateur

Si vous voyez des messages [DEBUG] dans la console JavaScript du navigateur (F12), même avec debug => false:

1. Vider tous les caches:

# Cache Nextcloud
make occ maintenance:repair --include-expensive

# Cache Redis
docker compose exec redis redis-cli -a VOTRE_PASSWORD_REDIS FLUSHALL

2. Vérifier le niveau de log:

# Niveau recommandé pour production: 2 (Warning)
make occ config:system:set loglevel --value=2 --type=integer

Niveaux de log disponibles:

  • 0 = Debug (tous les messages)
  • 1 = Info
  • 2 = Warning (recommandé production)
  • 3 = Error
  • 4 = Fatal

3. Hard refresh dans le navigateur:

# Firefox/Chrome: Ctrl + Shift + R
# Ou vider le cache du navigateur pour le domaine Nextcloud

4. Redémarrer les services:

docker compose restart nextcloud redis

Problèmes de synchronisation client

Si le client de synchronisation Nextcloud affiche "error transfering, server replied not found":

1. Scanner les fichiers pour mettre à jour l'index:

# Scanner tous les fichiers d'un utilisateur
make occ files:scan nom_utilisateur

# Scanner uniquement un dossier spécifique
make occ files:scan --path="/nom_utilisateur/files/Dossier"

2. Nettoyer les verrous de fichiers:

make occ files:cleanup

3. Vérifier les logs pour identifier le fichier problématique:

# Logs en temps réel
docker compose logs -f nextcloud --tail=50

# Rechercher les erreurs 404
docker compose logs nextcloud | grep "404"

4. En dernier recours, réinitialiser la synchronisation:

  • Dans le client Nextcloud: supprimer le compte et le re-configurer
  • Cela forcera une synchronisation complète

📊 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

  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

# 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:

# 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
  2. Vérifiez les logs: make logs
  3. Consultez les issues du projet
Description
No description provided
Readme 244 KiB
Languages
Shell 85.1%
Makefile 13.3%
Dockerfile 1.6%