Guide de configuration Docker Compose Dify
Tout ce que vous devez savoir sur l'architecture Docker de Dify — de ce que fait chaque conteneur au durcissement de votre déploiement en production avec des configurations personnalisées.
Architecture Docker de Dify
Le fichier docker-compose.yaml de Dify démarre huit services. Comprendre ce que fait chacun vous aide à configurer, dépanner et mettre à l'échelle votre déploiement.
nginx Proxy inverse / serveur web Achemine les requêtes HTTP entrantes vers le service interne correct (UI web ou API). C'est le seul conteneur qui doit être accessible publiquement.
api Serveur API Dify Le backend Python/Flask principal. Gère toute la logique métier, les appels LLM, l'exécution du pipeline RAG et les endpoints REST API.
worker Worker Celery en arrière-plan Traite les tâches asynchrones : indexation de documents, imports de datasets, chaînes LLM longues. Partage le code avec le conteneur API.
web Frontend Next.js L'interface utilisateur basée sur React servie comme application Next.js. Communique avec le conteneur API.
db Base de données PostgreSQL Stocke toutes les données persistantes : apps, conversations, métadonnées de datasets, utilisateurs et clés API.
redis Cache & courtier de messages Met en cache les requêtes fréquentes, stocke la file d'attente Celery pour le worker, et gère les données de limitation de débit.
weaviate Base de données vectorielle Stocke les embeddings de documents pour les bases de connaissances RAG. Le consommateur de mémoire le plus important. Peut être remplacé par pgvector ou Qdrant.
sandbox Sandbox d'exécution de code Conteneur isolé pour exécuter les nœuds de code définis par l'utilisateur dans les workflows Dify. S'exécute avec des permissions restreintes.
RAM totale de base : ~1,5 Go rien que pour les conteneurs inactifs. Sur un serveur 4 Go, cela laisse ~2,5 Go pour le système d'exploitation et les charges de travail réelles. Pour la production, 8 Go de RAM est recommandé.
Guide des variables d'environnement
Toute la configuration Dify se trouve dans dify/docker/.env. Copiez depuis .env.example et personnalisez ces paramètres clés :
Sécurité (Requis)
# Générez avec : openssl rand -base64 42
SECRET_KEY=votre-très-longue-clé-secrète-aléatoire
# Clé de chiffrement pour les données sensibles stockées
# Générez avec : openssl rand -hex 16
ENCRYPT_IV=votre-valeur-hex-16-chars Paramètres de base de données
# Paramètres PostgreSQL (réseau Docker interne)
DB_USERNAME=postgres
DB_PASSWORD=changez-ce-mot-de-passe-fort
DB_HOST=db
DB_PORT=5432
DB_DATABASE=dify
# Paramètres Redis
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=changez-ce-mot-de-passe-redis
REDIS_DB=0 Paramètres URL & CORS
# Votre domaine (sans barre oblique finale)
CONSOLE_URL=https://votre-domaine.com
APP_URL=https://votre-domaine.com
SERVICE_API_URL=https://votre-domaine.com
# Origines CORS (séparées par des virgules)
CONSOLE_CORS_ALLOW_ORIGINS=https://votre-domaine.com
WEB_API_CORS_ALLOW_ORIGINS=https://votre-domaine.com Stockage de fichiers
# Par défaut : système de fichiers local (stocké dans ./volumes/app/storage)
STORAGE_TYPE=local
# Pour le stockage compatible S3 (recommandé pour la production)
# STORAGE_TYPE=s3
# S3_ENDPOINT=https://s3.amazonaws.com
# S3_BUCKET_NAME=mon-bucket-dify
# S3_ACCESS_KEY=votre-clé-accès
# S3_SECRET_KEY=votre-clé-secrète
# S3_REGION=eu-west-1 Clés API LLM (optionnel à la configuration)
# Vous pouvez aussi configurer cela dans l'interface web Dify
# Ces paramètres .env pré-configurent les fournisseurs au premier démarrage
OPENAI_API_KEY=sk-votre-clé-openai
ANTHROPIC_API_KEY=sk-ant-votre-clé
GOOGLE_API_KEY=votre-clé-gemini
# Pour Ollama (LLM locaux)
# Configurez dans l'UI : Paramètres → Fournisseur de modèle → Ollama Configurations personnalisées
Mappage de ports personnalisé
Si le port 80 est occupé, changez le port hôte auquel le Nginx de Dify se lie en éditant .env :
# Changer le port hôte du conteneur Nginx
EXPOSE_NGINX_PORT=8080
EXPOSE_NGINX_SSL_PORT=8443 Désactiver Weaviate (utiliser pgvector à la place)
Weaviate utilise ~500 Mo de RAM. Sur les serveurs à mémoire limitée, basculez vers pgvector (déjà disponible dans le conteneur PostgreSQL) :
# Dans .env — basculer le stockage vectoriel vers pgvector
VECTOR_STORE=pgvector
# Puis redémarrer sans Weaviate
docker compose up -d --scale weaviate=0 Activer le support GPU
Pour passer un GPU NVIDIA (pour les modèles d'embedding locaux), ajoutez le runtime GPU à votre docker-compose.override.yaml :
services:
api:
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu] Consultez le guide d'hébergement GPU pour les instructions de configuration complètes.
Commandes courantes
docker compose up -d docker compose down docker compose restart api docker compose logs -f api worker docker compose exec api bash docker compose ps docker stats docker compose down --remove-orphans docker compose pull docker compose up -d --build api Dépannage
Le conteneur redémarre en boucle / CrashLoopBackOff
Vérifiez les logs : docker compose logs api. Causé généralement par un format SECRET_KEY incorrect ou une variable d'environnement requise manquante. Assurez-vous que SECRET_KEY fait au moins 32 caractères.
Manque de mémoire — conteneurs tués par OOM killer
Ajoutez de l'espace swap et/ou passez à un serveur plus grand. Exécutez dmesg | grep -i "killed process" pour confirmer les kills OOM. Le conteneur weaviate est généralement le coupable — envisagez de basculer vers pgvector.
Erreurs de connexion à la base de données
Assurez-vous que le conteneur DB est en bonne santé avant que l'API démarre : docker compose ps db. Essayez docker compose restart api si la DB n'a pas fini de s'initialiser à temps.
Erreurs de permission refusée sur ./volumes
Le répertoire de volumes de stockage nécessite des permissions correctes. Exécutez : sudo chown -R 1000:1000 ./volumes depuis le répertoire dify/docker.
Durcissement de production
Avant de mettre en ligne, appliquez ces mesures de sécurité :
1. Changer tous les mots de passe par défaut
Définissez des valeurs uniques et fortes pour DB_PASSWORD, REDIS_PASSWORD, et surtout SECRET_KEY. N'utilisez jamais les valeurs par défaut de .env.example en production.
2. Sécuriser votre fichier .env
chmod 600 dify/docker/.env
# Ne committez jamais .env dans le contrôle de version 3. Activer les sauvegardes automatisées
Ajoutez dans crontab (crontab -e) :
0 3 * * * cd ~/dify/docker && docker compose exec -T db pg_dump -U postgres dify > ~/backups/dify_$(date +\%Y\%m\%d).sql 4. Utiliser S3 pour le stockage de fichiers
Basculez STORAGE_TYPE=s3 pour que les documents uploadés soient stockés séparément de votre serveur et survivent aux reconstructions de conteneurs.