Mis à jour mars 2026 8 services expliqués

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.

~50 Mo
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.

~300 Mo
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.

~300 Mo
web Frontend Next.js

L'interface utilisateur basée sur React servie comme application Next.js. Communique avec le conteneur API.

~150 Mo
db Base de données PostgreSQL

Stocke toutes les données persistantes : apps, conversations, métadonnées de datasets, utilisateurs et clés API.

~100 Mo
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.

~30 Mo
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.

~500 Mo
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.

~100 Mo

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

Démarrer tous les services docker compose up -d
Arrêter tous les services docker compose down
Redémarrer un service docker compose restart api
Voir les logs (en direct) docker compose logs -f api worker
Ouvrir un shell dans le conteneur API docker compose exec api bash
Vérifier l'état des conteneurs docker compose ps
Utilisation des ressources par conteneur docker stats
Supprimer les conteneurs arrêtés docker compose down --remove-orphans
Mettre à jour les images docker compose pull
Reconstruire un service 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.