> For the complete documentation index, see [llms.txt](https://docs.clore.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.clore.ai/guides/guides_v2-fr/plateformes-et-agents-ia/dify.md).

# Plateforme de workflows Dify.ai

## Aperçu

[Dify.ai](https://github.com/langgenius/dify) est une plateforme de développement d'applications LLM open-source avec **114K+ étoiles sur GitHub**. Il combine un constructeur de flux de travail visuel, un pipeline RAG (récupération augmentée par génération), l'orchestration d'agents, la gestion des modèles et une couche de déploiement d'API en un clic dans une pile auto-hébergeable unique.

Sur **Clore.ai** vous pouvez exécuter la pile Dify complète — y compris sa base de données Postgres, le cache Redis, le magasin de vecteurs Weaviate, le proxy inverse Nginx, les workers d'API et le front-end web — sur un serveur GPU loué pour aussi peu que **0,20 $–0,35 $/h** (RTX 3090/4090). Le GPU est optionnel pour Dify lui-même, mais devient essentiel lorsque vous intégrez l'inférence de modèles locaux via les backends Ollama ou vLLM.

**Principales capacités :**

* 🔄 **Constructeur de flux visuel** — pipelines LLM par glisser-déposer avec branchements, boucles et logique conditionnelle
* 📚 **Pipeline RAG** — téléchargez des PDF, des URL, des pages Notion ; découpage + embedding + récupération gérés dans l'interface
* 🤖 **Mode agent** — agents ReAct et appel de fonctions avec utilisation d'outils (recherche web, interprète de code, API personnalisées)
* 🚀 **API-first** — chaque application génère instantanément un endpoint REST et des extraits SDK
* 🔌 **Plus de 100 intégrations de modèles** — OpenAI, Anthropic, Mistral, Cohere, plus des modèles locaux via Ollama/vLLM
* 🏢 **Multi-tenant** — équipes, espaces de travail, RBAC, quotas d'utilisation

***

## Exigences

Dify fonctionne comme une pile Docker Compose multi-conteneurs. Le serveur viable minimum pour le développement est une instance CPU-only ; pour la production avec inférence locale de modèles, vous souhaiterez un nœud GPU.

| Configuration                      | GPU             | VRAM  | RAM système | Disque | Prix Clore.ai   |
| ---------------------------------- | --------------- | ----- | ----------- | ------ | --------------- |
| **Minimale** (clés API uniquement) | Aucun / CPU     | —     | 8 Go        | 30 Go  | ≈0,05 $/h (CPU) |
| **Standard**                       | RTX 3080        | 10 Go | 16 Go       | 50 Go  | ≈ 0,15 $/h      |
| **Recommandé**                     | RTX 3090 / 4090 | 24 Go | 32 Go       | 80 Go  | 0,20–0,35 $/h   |
| **Production + LLM local**         | A100 80 Go      | 80 Go | 64 Go       | 200 Go | \~1,10 $/h      |
| **Haut débit**                     | H100 SXM        | 80 Go | 128 Go      | 500 Go | ≈2,50 $/h       |

> **Conseil :** Si vous utilisez uniquement des fournisseurs d'API cloud (OpenAI, Anthropic, etc.), n'importe quelle instance CPU 2 cœurs avec 8 Go de RAM convient. Un GPU importe seulement lors de l'exécution de modèles locaux via Ollama ou vLLM — voir [Accélération GPU](#gpu-acceleration) ci-dessous.

### Remarque sur le disque

Weaviate et les données Postgres croissent rapidement avec les téléchargements de documents. Prévoir **au moins 50 Go** et monter un stockage persistant via les options de volume de Clore.ai.

***

## Démarrage rapide

### 1. Louez un serveur Clore.ai

Accédez à [clore.ai](https://clore.ai), filtrez par le GPU souhaité et déployez un serveur avec :

* **Docker** pré-installé (toutes les images Clore l'incluent)
* Ports exposés **80** et **443** (ajoutez des ports personnalisés dans les paramètres de l'offre si nécessaire)
* Accès SSH activé

### 2. Connecter et préparer le serveur

```bash
# SSH dans votre serveur Clore
ssh root@<ip-serveur-clore> -p <port-ssh>

# Mettre à jour les paquets système
apt-get update && apt-get upgrade -y

# Vérifier que Docker est disponible
docker --version
docker compose version   # Doit être v2.x
```

### 3. Cloner Dify et lancer

```bash
# Cloner le dépôt
git clone https://github.com/langgenius/dify.git
cd dify/docker

# Copier le fichier d'environnement exemple
cp .env.example .env

# (Optionnel) Éditer les paramètres avant le lancement
nano .env

# Puller toutes les images et démarrer tous les services en arrière-plan
docker compose up -d

# Surveiller les logs pendant le démarrage (prend 2-3 minutes au premier lancement)
docker compose logs -f
```

### 4. Vérifier que tous les services sont sains

```bash
# Vérifier le statut des conteneurs
docker compose ps

# Sortie attendue :
# NAME                    STATUS
# docker-api-1            Up (healthy)
# docker-web-1            Up (healthy)
# docker-worker-1         Up (healthy)
# docker-nginx-1          Up
# docker-db-1             Up (healthy)
# docker-redis-1          Up (healthy)
# docker-weaviate-1       Up (healthy)
# docker-sandbox-1        Up (healthy)
```

### 5. Accéder à l'interface web

Ouvrez votre navigateur et rendez-vous sur :

```
http://<clore-server-ip>:80
```

Au premier lancement, Dify vous redirigera vers l'assistant de configuration pour créer le compte administrateur. Complétez l'assistant, puis connectez-vous.

***

## Configuration

Toute la configuration se trouve dans `dify/docker/.env`. Voici les paramètres les plus importants :

### Variables d'environnement essentielles

```bash
# ── Clés secrètes (CHANGEZ-LES) ──────────────────────────────────────────────
SECRET_KEY=votre-cle-secrete-super-changez-la-immediatement
# Générer une clé forte :
# python3 -c "import secrets; print(secrets.token_hex(32))"

# ── URL de l'application ─────────────────────────────────────────────────────
# Définir sur l'IP publique ou le domaine de votre serveur
CONSOLE_WEB_URL=http://<clore-server-ip>
APP_WEB_URL=http://<clore-server-ip>

# ── Base de données (Postgres) ───────────────────────────────────────────────
DB_USERNAME=postgres
DB_PASSWORD=difyai123456          # Changez en production !
DB_HOST=db
DB_PORT=5432
DB_DATABASE=dify

# ── Redis ───────────────────────────────────────────────────────────────────
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=difyai123456       # Changez en production !

# ── Stockage (disque local par défaut) ───────────────────────────────────────
STORAGE_TYPE=local
# Ou utilisez un stockage compatible S3 :
# STORAGE_TYPE=s3
# S3_ENDPOINT=https://s3.amazonaws.com
# S3_BUCKET_NAME=your-dify-bucket
# S3_ACCESS_KEY=...
# S3_SECRET_KEY=...

# ── Fournisseur LLM par défaut ───────────────────────────────────────────────
# Définir dans l'UI après la connexion, ou préconfigurer ici :
# OPENAI_API_KEY=sk-...
```

### Changer le port exposé

Par défaut Nginx écoute sur le port **80**. Pour le changer :

```bash
# Dans docker-compose.yaml, éditez le service nginx :
# ports :
#   - "8080:80"   ← changez 8080 par le port hôte souhaité

# Puis redémarrez :
docker compose down && docker compose up -d
```

### Volumes de données persistants

Le fichier Compose de Dify monte ces volumes par défaut :

```yaml
volumes :
  oradata :          # Données Postgres
  redis_data :       # Redis AOF
  weaviate_data :    # Magasin de vecteurs
  app_storage :      # Documents téléchargés et fichiers générés
```

Pour sauvegarder :

```bash
# Arrêtez d'abord les services, puis archivez les volumes Docker
docker compose stop
docker run --rm \
  -v docker_oradata:/data \
  -v $(pwd)/backups:/backup \
  alpine tar czf /backup/postgres-$(date +%Y%m%d).tar.gz /data
docker compose start
```

***

## Accélération GPU

La plateforme principale de Dify est basée sur le CPU, mais vous débloquez l'inférence de modèles locaux en intégrant **composant Ollama** ou **vLLM** comme fournisseurs de modèles — les deux bénéficient énormément d'un GPU.

### Option A : sidecar Ollama (le plus simple)

Exécutez Ollama aux côtés de Dify sur le même serveur Clore :

```bash
# Installer Ollama
curl -fsSL https://ollama.com/install.sh | sh

# Puller un modèle (par ex. Llama 3 8B)
ollama pull llama3:8b

# Vérifier que le GPU est utilisé
ollama run llama3:8b "Hello!"
nvidia-smi   # Devrait montrer le processus ollama utilisant la VRAM
```

Puis dans l'UI Dify → **Paramètres → Fournisseurs de modèles → Ollama**:

* URL de base : `http://localhost:11434`
* Sélectionnez votre modèle et enregistrez

> Pour un guide complet sur Ollama, voir [language-models/ollama.md](/guides/guides_v2-fr/modeles-de-langage/ollama.md).

### Option B : sidecar vLLM (haut débit)

```bash
# Exécuter vLLM comme un conteneur séparé avec passthrough GPU
docker run -d \
  --name vllm \
  --gpus all \
  --runtime nvidia \
  -p 8000:8000 \
  -v ~/.cache/huggingface:/root/.cache/huggingface \
  -e HUGGING_FACE_HUB_TOKEN=<votre-token-hf> \
  vllm/vllm-openai:latest \
  --model mistralai/Mistral-7B-Instruct-v0.2 \
  --dtype auto \
  --max-model-len 4096

# Vérifier l'endpoint
curl http://localhost:8000/v1/models
```

Puis dans l'UI Dify → **Paramètres → Fournisseurs de modèles → Compatible OpenAI**:

* URL de base : `http://localhost:8000/v1`
* Clé API : `dummy`
* Nom du modèle : `mistralai/Mistral-7B-Instruct-v0.2`

> Pour l'installation complète de vLLM, voir [language-models/vllm.md](/guides/guides_v2-fr/modeles-de-langage/vllm.md).

### Recommandations de mémoire GPU pour les modèles locaux

| Modèle             | VRAM requise | GPU Clore recommandé |
| ------------------ | ------------ | -------------------- |
| Llama 3 8B (Q4)    | 6 Go         | RTX 3060             |
| Llama 3 8B (FP16)  | 16 Go        | RTX 3090 / 4090      |
| Mistral 7B (Q4)    | 5 Go         | RTX 3060             |
| Llama 3 70B (Q4)   | 40 Go        | A100 40GB            |
| Llama 3 70B (FP16) | 140 Go       | 2× H100              |

***

## Conseils et bonnes pratiques

### Optimisation des coûts sur Clore.ai

```bash
# Utilisez les prix spot — les bases de données de Dify conservent l'état dans les volumes
# vous pouvez donc arrêter/redémarrer l'instance à moindre coût

# Avant d'arrêter votre instance Clore, exportez la BD :
docker exec docker-db-1 pg_dump -U postgres dify > dify_backup_$(date +%Y%m%d).sql

# Compressez le volume de stockage pour le transfert
tar czf dify_storage_$(date +%Y%m%d).tar.gz \
  $(docker volume inspect docker_app_storage --format '{{.Mountpoint}}')
```

### Activez HTTPS avec Caddy (recommandé pour la production)

```bash
# Ajoutez Caddy à docker-compose.yaml ou exécutez-le en standalone
docker run -d \
  --name caddy \
  --network docker_default \
  -p 443:443 -p 80:80 \
  -v $PWD/Caddyfile:/etc/caddy/Caddyfile \
  -v caddy_data:/data \
  caddy:latest

# Contenu du Caddyfile :
# your-domain.com {
#     reverse_proxy nginx:80
# }
```

### Scalerez les workers pour des charges lourdes

```bash
# Exécutez 4 workers celery au lieu de 1
docker compose up -d --scale worker=4
```

### Surveillez l'utilisation des ressources

```bash
# Statistiques live des conteneurs
docker stats

# Utilisation GPU (si utilisation de modèles locaux)
watch -n1 nvidia-smi

# Logs de l'application Dify
docker compose logs -f api worker
```

### Optimisation des performances RAG

* Définir **taille des chunks** à 512–1024 tokens pour la plupart des types de documents
* Activez **récupération parent-enfant** pour les documents longs dans les paramètres du Dataset
* Utilisez **recherche hybride** (mot-clé + vecteur) pour une meilleure rappel sur le contenu technique
* Indexez les documents pendant les heures creuses pour éviter les limites de taux API

***

## Dépannage

### Les services redémarrent en boucle

```bash
# Vérifiez les logs du service défaillant
docker compose logs --tail=50 api
docker compose logs --tail=50 worker

# Cause fréquente : SECRET_KEY incorrect ou connexion DB
# Assurez-vous que SECRET_KEY dans .env est défini et unique
grep SECRET_KEY .env
```

### "Échec de la migration" au démarrage

```bash
# Exécutez les migrations DB manuellement
docker compose exec api flask db upgrade

# Si cela échoue, vérifiez d'abord que Postgres est sain
docker compose exec db pg_isready -U postgres
```

### Impossible de se connecter à Ollama depuis Dify

```bash
# Par défaut Ollama se lie à 127.0.0.1
# Changez-le pour écouter toutes les interfaces :
OLLAMA_HOST=0.0.0.0 ollama serve

# Ou éditez le service systemd :
systemctl edit ollama
# Ajoutez sous [Service] :
# Environment="OLLAMA_HOST=0.0.0.0"
systemctl restart ollama

# Testez depuis l'intérieur d'un conteneur Dify :
docker compose exec api curl http://host.docker.internal:11434/api/tags
```

### Espace disque insuffisant

```bash
# Vérifiez la taille des volumes
df -h
docker system df

# Supprimez les images inutilisées
docker image prune -a

# Les logs Weaviate peuvent devenir volumineux — faites-les pivoter
docker compose exec weaviate truncate -s 0 /tmp/weaviate.log
```

### Erreurs du magasin de vecteurs Weaviate

```bash
# Réinitialisez Weaviate (ATTENTION : supprime toutes les embeddings, ré-indexation nécessaire)
docker compose stop weaviate
docker volume rm docker_weaviate_data
docker compose up -d weaviate

# Puis réindexez vos datasets dans l'UI Dify → Datasets → [dataset] → Re-index
```

### Le port 80 est déjà utilisé

```bash
# Trouvez ce qui utilise le port 80
ss -tlnp | grep :80
# ou
lsof -i :80

# Arrêtez le service en conflit ou changez le port nginx de Dify dans docker-compose.yaml
```

***

## Lectures complémentaires

* [Documentation officielle de Dify](https://docs.dify.ai)
* [Dépôt GitHub de Dify](https://github.com/langgenius/dify)
* [Guide d'auto-hébergement de Dify](https://docs.dify.ai/getting-started/install-self-hosted/docker-compose)
* [Exécuter Ollama sur Clore.ai](/guides/guides_v2-fr/modeles-de-langage/ollama.md)
* [Exécuter vLLM sur Clore.ai](/guides/guides_v2-fr/modeles-de-langage/vllm.md)
* [Comparaison GPU Clore.ai](/guides/guides_v2-fr/prise-en-main/gpu-comparison.md)
* [Communauté Discord de Dify](https://discord.gg/FngNHpbcY7)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.clore.ai/guides/guides_v2-fr/plateformes-et-agents-ia/dify.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
