Le déploiement de Dify sur PAI-EAS fournit un service géré avec mise à l'échelle élastique, ce qui supprime la maintenance de l'infrastructure et accélère le passage du prototype à la production.
Fonctionnement
PAI-EAS construit un service complet en exécutant les composants Dify dans un environnement multi-conteneurs et en montant des dépendances externes, notamment ApsaraDB RDS for PostgreSQL, ApsaraDB for Redis, Alibaba Cloud Elasticsearch et Object Storage Service (OSS). Tous les composants communiquent via un réseau Virtual Private Cloud (VPC).
Les principaux composants de l'architecture sont les suivants :
Service PAI-EAS : en tant que plateforme de calcul principale, PAI-EAS exécute tous les composants du service Dify dans un environnement multi-conteneurs, y compris l'interface web, le backend API, les workers de tâches asynchrones et un bac à sable (sandbox) pour les plugins. PAI-EAS gère le cycle de vie du service, la planification des ressources et la configuration réseau.
ApsaraDB RDS for PostgreSQL : stocke les données relatives aux utilisateurs, conversations, bases de connaissances, workflows et configurations de plugins. La séparation de la base de données de l'application garantit la persistance et l'indépendance des données.
ApsaraDB for Redis : fournit des fonctionnalités de mise en cache haute performance et de file d'attente de messages. Il sert à mettre en cache les données fréquemment consultées, gérer les états de session et distribuer les tâches asynchrones entre les composants Dify via le broker Celery.
Alibaba Cloud Elasticsearch : sert de base de données vectorielle et de moteur de recherche en texte intégral. Dans les scénarios de génération augmentée par récupération (RAG), il stocke, indexe et permet une récupération efficace des documents de la base de connaissances.
Object Storage Service (OSS) : stocke les données persistantes, telles que les fichiers de plugins et de bases de connaissances, garantissant leur conservation lors des mises à jour et redémarrages du service.
Les utilisateurs accèdent à l'interface Dify via l'URL du service web fournie par PAI-EAS. Le conteneur Nginx route d'abord toutes les requêtes vers le conteneur Dify-Web ou Dify-API. Lors du traitement de la logique métier, le service API interagit avec les services backend ApsaraDB RDS for PostgreSQL, ApsaraDB for Redis et Alibaba Cloud Elasticsearch. Les tâches asynchrones, telles que l'indexation de documents, sont transmises au conteneur worker pour exécution via Redis. Tous les fichiers nécessitant une persistance sont lus et écrits dans le chemin OSS monté.
Étape 1 : Préparer les ressources dépendantes
Avant de déployer Dify, préparez les services externes requis. Pour éviter les problèmes de connectivité réseau, assurez-vous que toutes ces ressources se trouvent dans la même région et le même Virtual Private Cloud (VPC) que le service PAI-EAS que vous prévoyez de déployer.
Le VPC d'une instance ApsaraDB RDS for PostgreSQL ou Alibaba Cloud Elasticsearch ne peut pas être modifié après sa création. Par conséquent, créez ces instances dans le même VPC que votre service PAI-EAS.
Planifiez un Virtual Private Cloud (VPC). Si vous n'en avez pas, créez un VPC et un vSwitch.
-
Créez une instance ApsaraDB RDS for PostgreSQL. Une fois l'instance créée, créez un compte à privilèges élevés. Utilisez ce compte pour créer deux bases de données : l'une pour les données des fonctions principales de Dify et l'autre pour ses données de plugins. Pour plus d'informations, consultez la rubrique Créer des comptes et des bases de données.
ImportantNous recommandons PostgreSQL 16. La version 18 peut provoquer un conflit de fonction uuidv7.
Créez une instance ApsaraDB for Redis. Pour permettre aux conteneurs PAI-EAS d'accéder à l'instance, ajoutez la plage d'adresses IP du vSwitch PAI-EAS à la liste d'autorisation Redis. Vous pouvez obtenir cette information depuis la page des détails du vSwitch dans la console VPC.
Créez une instance Alibaba Cloud Elasticsearch. Cette instance sert de base de données vectorielle et de moteur de recherche en texte intégral pour la base de connaissances. Assurez-vous qu'elle se trouve dans le même VPC que le service PAI-EAS.
Étape 2 : Déployer le service Dify
Connectez-vous à la console PAI. Sélectionnez une région en haut de la page. Ensuite, sélectionnez l'espace de travail souhaité et cliquez sur Elastic Algorithm Service (EAS).
Dans l'onglet Inference Service, cliquez sur Deploy Service. Dans la section Scenario-based Model Deployment, cliquez sur Dify LLM platform.
-
Sur la page de déploiement, configurez les paramètres suivants.
OSS : sélectionnez un bucket OSS et spécifiez un chemin pour le stockage persistant des fichiers de base de connaissances, des données de plugins et d'autres données. Deux dossiers, dify et dify_plugin, sont automatiquement créés dans le chemin spécifié.
-
PostgreSQL configuration :
Host Address : saisissez l'adresse IP interne de l'instance ApsaraDB RDS for PostgreSQL. Vous la trouverez sur la page Database Connection de l'instance dans la console ApsaraDB RDS for PostgreSQL.
Port : la valeur par défaut est 5432. Saisissez le port réel s'il diffère.
Database - core data : saisissez le nom de la base de données créée pour stocker de manière persistante les données liées aux fonctions principales, telles que les applications, les utilisateurs, les conversations, les bases de connaissances, les workflows et les configurations de modèles.
Database plugins : saisissez le nom de la base de données créée pour stocker de manière persistante les informations relatives à l'état d'exécution, à la configuration et aux métadonnées des plugins.
Account et Password : saisissez le compte à privilèges élevés et le mot de passe que vous avez utilisés pour créer les bases de données.
-
Redis config :
Host : saisissez l'adresse IP interne de l'instance Redis. Accédez à la console ApsaraDB for Redis et obtenez l'adresse à partir de la section des informations de connexion sur la page des détails de l'instance.
Port : la valeur par défaut est 6379. Saisissez le port réel s'il diffère.
Account et Password : saisissez le compte et le mot de passe de l'instance Redis.
-
Elasticsearch configuration :
Host address : saisissez l'adresse IP interne de l'instance Alibaba Cloud Elasticsearch. Accédez à la console Alibaba Cloud Elasticsearch, accédez à la page des détails de l'instance et obtenez l'adresse à partir de la section des informations de base.
Port : la valeur par défaut est 9200. Saisissez le port réel s'il diffère.
Account et Password : saisissez le nom d'utilisateur (par défaut : elastic) et le mot de passe de l'instance Alibaba Cloud Elasticsearch. Si vous avez oublié le mot de passe, réinitialisez-le.
Resource Specification : sélectionnez une spécification d'instance PAI-EAS pour le service. Une spécification avec au moins 8 CPU et 16 Go de mémoire est recommandée pour un fonctionnement stable.
Une fois la configuration confirmée, cliquez sur Deploy. Lorsque l'état du service passe à Running, le déploiement est réussi.
Étape 3 : Vérifier l'état du service et l'accès
Une fois le service déployé avec succès, vérifiez son état et validez son fonctionnement.
-
Afficher les journaux du service
Si le service ne démarre pas ou fonctionne anormalement, accédez à la page des détails du service. Dans la liste Instance List, localisez le composant de conteneur correspondant et cliquez sur le bouton Logs situé à côté. Consultez les journaux de démarrage et d'exécution pour identifier la cause de l'erreur.
-
Accéder à l'interface web Dify
Sur la page des détails du service, cliquez sur Web applications en haut à droite pour ouvrir la page d'initialisation Dify. Une fois le compte administrateur créé, commencez à utiliser l'application.
-
Appeler l'API
Une fois l'application Dify créée, l'URL de base affichée sur la page d'accès à l'API est une adresse de service interne. Dans l'application Dify, cliquez sur Access API dans le volet de navigation de gauche pour afficher l'Base URL. Pour appeler l'API Dify depuis Internet public, remplacez l'URL interne (par exemple,
http://******.console.cn-hangzhou.eas.pai-ml.com) par l'endpoint public issu des informations d'invocation du service PAI-EAS. Dans la boîte de dialogue Invocation Info du service, basculez vers l'onglet Shared Gateway pour obtenir l'Public Endpoint (l'URL du service utilisée dans la commande curl), l'VPC endpoint et le jeton (token).Pour interagir avec l'application via l'API, créez une clé API. Cliquez sur Access API dans le volet de navigation de gauche. Ensuite, cliquez sur le bouton API Keys en haut à droite. Dans la boîte de dialogue qui apparaît, cliquez sur + Create Key pour générer une clé API pour l'authentification
Authorization: Bearerdans vos appels API.L'exemple suivant montre comment envoyer un message à une application chatbot en utilisant un appel API public :
curl -X POST 'http://xxxx.your_aliyun_account_id.cn-hangzhou.pai-eas.aliyuncs.com/v1/chat-messages' \ --header 'Authorization: Bearer app-xxxxxxxxxxxxx' \ --header 'Content-Type: application/json' \ --data-raw '{ "inputs": {}, "query": "Describe the main features of Dify", "response_mode": "blocking", "user": "test-user-001" }'
Étape 4 : Déploiement avancé avec JSON
Pour les déploiements automatisés ou personnalisés, utilisez un fichier de configuration JSON. Sur la page de déploiement du service PAI-EAS, basculez vers JSON Deployment et utilisez le modèle suivant. Ce modèle définit tous les conteneurs, variables d'environnement, montages de stockage et configurations réseau requis par Dify.
Lors du déploiement, remplacez les espaces réservés (préfixés par $) dans le modèle JSON par vos valeurs réelles. Pour des descriptions détaillées des paramètres, consultez la rubrique Déploiement JSON.
Dans la section metadata, définissez
"enable_webservice": truepour ouvrir le port d'accès web.Dans la section storage, remplacez
$oss_pathpar le chemin OSS réel, par exemple « oss://your-bucket-name/dify-data/ ». Ce chemin est utilisé par l'API Dify et les plugins. Deux sous-dossiers, dify et dify_plugin, sont créés sous ce chemin.-
Dans la section containers, les variables d'environnement clés nécessitant le remplacement des espaces réservés sont décrites ci-dessous. Pour plus d'informations, consultez la page Variables d'environnement Dify.
Base de données PostgreSQL
db_host : l'endpoint de l'instance de base de données PostgreSQL.
db_port : la valeur par défaut est 5432.
api_db : la base de données des fonctions principales de Dify. Elle stocke toutes les données liées aux fonctions principales telles que les applications, les utilisateurs, les conversations, les bases de connaissances, les workflows et les configurations de modèles.
plugin_daemon_db : la base de données des plugins Dify. Elle stocke les informations relatives à l'état d'exécution, à la configuration et aux métadonnées des plugins.
db_username et db_password : les deux bases de données partagent un seul nom d'utilisateur et mot de passe.
Redis
Lorsque les utilisateurs ont des conversations en temps réel avec l'IA, Redis facilite la messagerie en temps réel et la communication entre les différents composants du service.
redis_host : l'endpoint de l'instance Redis.
redis_port : la valeur par défaut est 6379.
redis_password : le mot de passe défini lors de la création de l'instance Redis.
Elasticsearch
Utilisé comme base de données vectorielle et moteur de recherche en texte intégral.
elasticsearch_host : l'endpoint de l'instance Elasticsearch.
elasticsearch_port : la valeur par défaut est 9200.
elasticsearch_username : la valeur par défaut est elastic.
elasticsearch_password : le mot de passe configuré lors de la création de l'instance Elasticsearch. Si vous avez oublié le mot de passe, réinitialisez le mot de passe d'accès à l'instance.
Clés de sécurité
Dify utilise plusieurs clés pour sécuriser la communication interne. Générez-les avec la commande
openssl rand -base64 42.secret_key : la clé utilisée pour signer de manière sécurisée les cookies de session et chiffrer les informations sensibles dans la base de données.
api_key : la clé requise pour l'accès à l'API interne afin de prévenir les attaques externes malveillantes.
plugin_daemon_key : la clé requise pour l'accès interne au démon de plugin afin de prévenir les attaques externes malveillantes.
FAQ
Impossible de se connecter à l'instance de base de données
[2025-09-13 00:46:28] [/bin/sh]: 2025/09/12 16:46:28 /app/internal/db/pg/pg.go:34
[2025-09-13 00:46:28] [/bin/sh]: [error] failed to initialize database, got error failed to connect to `host=pgm-xxxxxxxxxx.pg.rds.aliyuncs.com user=dify database=postgres`: dial error (timeout: dial tcp 10.0.0.230:5432: connect: connection timed out)
[2025-09-13 00:46:28] [/bin/sh]: 2025/09/12 16:46:28 init.go:95: [PANIC]failed to init dify plugin db: failed to connect to `host=pgm-xxxxxxxxxx.pg.rds.aliyuncs.com user=dify database=postgres`: dial error (timeout: dial tcp 10.0.0.230:5432: connect: connection timed out)
[2025-09-13 00:46:28] [/bin/sh]: panic: [PANIC]failed to init dify plugin db: failed to connect to `host=pgm-xxxxxxxxxx.pg.rds.aliyuncs.com user=dify database=postgres`: dial error (timeout: dial tcp 10.0.0.230:5432: connect: connection timed out)
Confirmez que l'instance ApsaraDB RDS for PostgreSQL et le service PAI-EAS se trouvent dans le même VPC. ApsaraDB RDS for PostgreSQL ne prend pas en charge le changement de VPC. Recréez l'instance dans le VPC correct.
Sur la page des détails de l'instance dans la console ApsaraDB RDS for PostgreSQL, cliquez sur Database Connection dans le volet de navigation de gauche pour afficher le nom du VPC et l'adresse IP interne de l'instance. Le port par défaut est 5432.
Impossible de se connecter à Redis
Ce problème survient si le client Redis dans le conteneur dify-api ne parvient pas à se connecter au serveur Redis.
[2025-09-13 00:28:21] [/bin/sh]: File "/app/api/.venv/lib/python3.12/site-packages/redis/utils.py", line 188, in wrapper
[2025-09-13 00:28:21] [/bin/sh]: return func(*args, **kwargs)
[2025-09-13 00:28:21] [/bin/sh]: ^^^^^^^^^^^^^^^^^^^^^
[2025-09-13 00:28:21] [/bin/sh]: File "/app/api/.venv/lib/python3.12/site-packages/redis/connection.py", line 1530, in get_connection
[2025-09-13 00:28:21] [/bin/sh]: connection.connect()
[2025-09-13 00:28:21] [/bin/sh]: File "/app/api/.venv/lib/python3.12/site-packages/redis/connection.py", line 379, in connect
[2025-09-13 00:28:21] [/bin/sh]: self.connect_check_health(check_health=True)
[2025-09-13 00:28:21] [/bin/sh]: File "/app/api/.venv/lib/python3.12/site-packages/redis/connection.py", line 389, in connect_check_health
[2025-09-13 00:28:21] [/bin/sh]: raise TimeoutError("Timeout connecting to server")
[2025-09-13 00:28:21] [/bin/sh]: redis.exceptions.TimeoutError: Timeout connecting to server
[2025-09-13 00:28:22] time="2025-09-12T16:28:22Z" level=info msg="program stopped with status:exit status 1" program=/bin/sh
Causes possibles :
-
Problème de réseau VPC : confirmez que l'instance Redis et le service PAI-EAS se trouvent dans le même VPC.
Sur la page Instance Information de votre instance ApsaraDB for Redis, vérifiez le champ Virtual Private Cloud dans la section Basic Information pour confirmer son ID VPC.
-
Problème de configuration de la liste d'autorisation : confirmez qu'une liste d'autorisation est configurée pour l'instance Redis. Ajoutez la plage d'adresses IP du vSwitch où se trouve le service PAI-EAS. Vous pouvez trouver la plage d'adresses IP sur la page vSwitch.
Par exemple, sur la page Allowlist Settings, ajoutez le bloc CIDR du vSwitch, tel que
192.168.32.0/22, à un groupe de liste d'autorisation.
Impossible de se connecter à Alibaba Cloud Elasticsearch
Une cause possible est un problème de réseau VPC. Confirmez que l'instance Alibaba Cloud Elasticsearch et le service PAI-EAS se trouvent dans le même VPC.
Sur la page Basic Information de l'instance Alibaba Cloud Elasticsearch, vérifiez le champ Virtual Private Cloud pour obtenir l'ID VPC de l'instance.
Base de données manquante pour dify-api
Lors du démarrage de Dify, il se connecte à deux bases de données : la base de données core data requise par dify-api et la base de données plugin requise par dify-plugin.
[2025-09-13 01:33:20] [/bin/sh]: File "/app/api/.venv/lib/python3.12/site-packages/sqlalchemy/engine/default.py", line 625, in connect
[2025-09-13 01:33:20] [/bin/sh]: return self.loaded_dbapi.connect(*cargs, **cparams) # type: ignore[no-any-return] # NOQA: E501
[2025-09-13 01:33:20] [/bin/sh]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[2025-09-13 01:33:20] [/bin/sh]: File "/app/api/.venv/lib/python3.12/site-packages/psycopg2/__init__.py", line 122, in connect
[2025-09-13 01:33:20] [/bin/sh]: conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
[2025-09-13 01:33:20] [/bin/sh]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[2025-09-13 01:33:20] [/bin/sh]: File "/app/api/.venv/lib/python3.12/site-packages/psycogreen/gevent.py", line 32, in gevent_wait_callback
[2025-09-13 01:33:20] [/bin/sh]: state = conn.poll()
[2025-09-13 01:33:20] [/bin/sh]: ^^^^^^^^^^^
[2025-09-13 01:33:20] [/bin/sh]: sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) FATAL: database "dify_core" does not exist
[2025-09-13 01:33:20] [/bin/sh]:
Dans Dify Community Edition 1.7.1, utilisée pour ce déploiement, la base de données plugin est créée automatiquement, mais la base de données core data ne l'est pas. Créez manuellement la base de données core data.
Impossible de se connecter à marketplace.dify.ai
Ce problème survient car les conteneurs PAI-EAS n'ont pas accès à Internet public par défaut. Pour une solution, consultez la rubrique Activer l'accès d'un service PAI-EAS aux ressources publiques ou internes.
[2025-09-13 00:00:00] [/bin/sh]: 2025-09-12 16:00:00,847.847 WARNING [Dummy-1] [ssrf_proxy.py:81] - Request to URL https://marketplace.dify.ai/api/v1/plugins/download?unique_identifier=langgenius/tongyi:0.0.46@8e73008929dbc3934936493d442fab4c34ef016ae817b144b45da278ba76580e failed on attempt 1: timed out
[2025-09-13 00:00:02] [/bin/sh]: 2025-09-12 16:00:02,046.046 WARNING [Dummy-2] [ssrf_proxy.py:81] - Request to URL https://marketplace.dify.ai/api/v1/plugins/download?unique_identifier=langgenius/tongyi:0.0.46@8e73008929dbc3934936493d442fab4c34ef016ae817b144b45da278ba76580e failed on attempt 1: timed out
[2025-09-13 00:00:06] [/bin/sh]: 2025-09-12 16:00:06,416.416 WARNING [Dummy-1] [ssrf_proxy.py:81] - Request to URL https://marketplace.dify.ai/api/v1/plugins/download?unique_identifier=langgenius/tongyi:0.0.46@8e73008929dbc3934936493d442fab4c34ef016ae817b144b45da278ba76580e failed on attempt 2: timed out
[2025-09-13 00:00:07] [/bin/sh]: 2025-09-12 16:00:07,614.614 WARNING [Dummy-2] [ssrf_proxy.py:81] - Request to URL https://marketplace.dify.ai/api/v1/plugins/download?unique_identifier=langgenius/tongyi:0.0.