Implantar o Dify no PAI-EAS fornece um service gerenciado com dimensionamento elástico, o que elimina a manutenção de infraestrutura e acelera o desenvolvimento do protótipo à produção.
Como funciona
O PAI-EAS constrói um service completo executando os componentes do Dify em um ambiente de múltiplos contêineres e montando dependências externas, incluindo ApsaraDB RDS for PostgreSQL, ApsaraDB for Redis, Alibaba Cloud Elasticsearch e Object Storage Service (OSS). Todos os componentes se comunicam por meio de uma rede Virtual Private Cloud (VPC).
Os principais componentes da arquitetura incluem:
Service PAI-EAS: Como a plataforma de computação principal, o PAI-EAS executa todos os componentes de service do Dify em um ambiente de múltiplos contêineres, incluindo a interface web, o backend da API, os workers de tarefas assíncronas e um sandbox de plugins. O PAI-EAS gerencie o ciclo de vida do service, o agendamento de recursos e a configuração de rede.
ApsaraDB RDS for PostgreSQL: Armazena dados de usuários, conversas, bases de conhecimento, workflows e configurações de plugins. Separar o banco de dados do aplicativo garante a persistência e a independência dos dados.
ApsaraDB for Redis: Fornece cache de alto desempenho e funcionalidade de fila de mensagens. Armazena em cache dados acessados com frequência, gerencia estados de sessão e distribui tarefas assíncronas entre os componentes do Dify por meio do Celery Broker.
Alibaba Cloud Elasticsearch: Atua como um banco de dados vetorial e mecanismo de busca de texto completo. Em cenários de geração aumentada por recuperação (RAG), ele armazena, indexa e recupera documentos da base de conhecimento de forma eficiente.
Object Storage Service (OSS): Armazena dados persistentes, como arquivos de plugins e de bases de conhecimento, garantindo que os dados sobrevivam a atualizações e reinicializações do service.
Os usuários acessam a interface do Dify por meio da URL do service web fornecida pelo PAI-EAS. Todas as solicitações são roteadas inicialmente pelo contêiner Nginx para o contêiner Dify-Web ou Dify-API. Ao processar a lógica de negócios, o service da API interage com o backend ApsaraDB RDS for PostgreSQL, ApsaraDB for Redis e Alibaba Cloud Elasticsearch. Tarefas assíncronas, como a indexação de documentos, são enviadas ao contêiner worker para execução via Redis. Todos os arquivos que exigem persistência são lidos e gravados no caminho montado do OSS.
Etapa 1: Prepare os recursos dependentes
Antes de implantar o Dify, prepare os services externos necessários. Para evitar problemas de conectividade de rede, certifique-se de que todos esses recursos estejam na mesma região e Virtual Private Cloud (VPC) do service do PAI-EAS que você planeja implantar.
A VPC de uma instância do ApsaraDB RDS for PostgreSQL ou do Alibaba Cloud Elasticsearch não pode ser alterada após a criação. Portanto, crie essas instâncias na mesma VPC do seu service do PAI-EAS.
Planeje uma Virtual Private Cloud (VPC). Se você não tiver uma, create a VPC and a vSwitch.
-
Create an ApsaraDB RDS for PostgreSQL instance. Após a criação da instância, crie uma conta com privilégios elevados. Use esta conta para criar dois bancos de dados: um para os dados das funções principais do Dify e outro para os dados de seus plugins. Para mais informações, consulte Create accounts and databases.
ImportanteRecomendamos o PostgreSQL 16. A versão 18 pode causar um uuidv7 function conflict.
Create an ApsaraDB for Redis instance. Para permitir que os contêineres do PAI-EAS acessem a instância, adicione o intervalo de endereços IP do vSwitch do PAI-EAS à lista de permissões do Redis. Você pode obter essas informações na página de detalhes do vSwitch no console da VPC.
Create an Alibaba Cloud Elasticsearch instance. Esta instância atua como o banco de dados vetorial e o mecanismo de busca de texto completo para a base de conhecimento. Certifique-se de que ela esteja na mesma VPC do service do PAI-EAS.
Etapa 2: Implante o service do Dify
Acesse o PAI console. Selecione uma região na parte superior da página. Em seguida, selecione o workspace desejado e clique em Enter Elastic Algorithm Service (EAS).
Na aba Inference Service, clique em Deploy Service. Na seção Scenario-based Model Deployment, clique em Dify LLM platform.
-
Na página de implantação, configure os seguintes parâmetros.
OSS: Selecione um bucket do OSS e especifique um caminho para o armazenamento persistente de arquivos da base de conhecimento, dados de plugins e outros dados. Duas pastas, dify e dify_plugin, são criadas automaticamente no caminho especificado.
-
PostgreSQL configuration:
Host Address: Insira o endereço IP interno da instância do ApsaraDB RDS for PostgreSQL. Encontre esse endereço na página Database Connection da instância no console do ApsaraDB RDS for PostgreSQL.
Port: O padrão é 5432. Insira a porta real se for diferente.
Database - core data: Insira o nome do banco de dados criado para armazenar de forma persistente dados relacionados às funções principais, como aplicativos, usuários, conversas, bases de conhecimento, workflows e configurações de modelos.
Database plugins: Insira o nome do banco de dados criado para armazenar de forma persistente informações relacionadas ao status de execução, configuração e metadados dos plugins.
Account e Password: Insira a conta com privilégios elevados e a senha que você usou para criar os bancos de dados.
-
Redis config:
Host: Insira o endereço IP interno da instância do Redis. Acesse o console do ApsaraDB for Redis e obtenha o endereço na seção de informações de conexão na página de detalhes da instância.
Port: O padrão é 6379. Insira a porta real se for diferente.
Account e Password: Insira a conta e a senha da instância do Redis.
-
Elasticsearch configuration:
Host address: Insira o endereço IP interno da instância do Alibaba Cloud Elasticsearch. Acesse o console do Alibaba Cloud Elasticsearch, acesse a página de detalhes da instância e obtenha o endereço na seção de informações básicas.
Port: O padrão é 9200. Insira a porta real se for diferente.
Account e Password: Insira o nome de usuário (o padrão é elastic) e a senha da instância do Alibaba Cloud Elasticsearch. Se você esquecer a senha, poderá reset a senha.
Resource Specification: Selecione uma especificação de instância do PAI-EAS para o service. Uma especificação com pelo menos 8 CPUs e 16 GB de memória é recomendada para uma operação estável.
Depois de confirmar a configuração, clique em Deploy. Quando o status do service mudar para Running, a implantação será bem-sucedida.
Etapa 3: Verifique o status e o acesso do service
Após implantar o service com sucesso, verifique seu status e valide sua funcionalidade.
-
Visualize os logs do service
Se o service falhar ao iniciar ou apresentar comportamento anormal, acesse a página de detalhes do service. Na Instance List, encontre o componente de contêiner correspondente e clique no botão Logs ao lado dele. Verifique os logs de inicialização e execução para identificar a causa do erro.
-
Acesse a interface web do Dify
Na página de detalhes do service, clique em Web applications no canto superior direito para abrir a página de inicialização do Dify. Depois de criar uma conta de administrador, você pode começar a usar o aplicativo.
-
Chame a API
Depois de criar o aplicativo Dify, a URL base exibida na página de acesso à API será um endereço interno do service. No aplicativo Dify, clique em Access API no painel de navegação à esquerda para visualizar a Base URL. Para chamar a API do Dify a partir da internet pública, substitua a URL interna (por exemplo,
http://******.console.cn-hangzhou.eas.pai-ml.com) pelo endpoint público das informações de invocação do service do PAI-EAS. Na caixa de diálogo Invocation Info do service, alterne para a guia Shared Gateway para obter o Public Endpoint (a URL do service usada no comando curl), o VPC endpoint e o token.Para interagir com o aplicativo por meio da API, crie uma API Key. Clique em Access API no painel de navegação à esquerda. Em seguida, clique no botão API Keys no canto superior direito. Na caixa de diálogo que aparece, clique em + Create Key para gerar uma API Key para a autenticação
Authorization: Bearerem suas chamadas de API.O exemplo a seguir mostra como enviar uma mensagem para um aplicativo de chatbot usando uma chamada de API pública:
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" }'
Etapa 4: Implantação avançada com JSON
Para implantações automatizadas ou personalizadas, use um arquivo de configuração JSON. Na página de implantação do service do PAI-EAS, alterne para JSON Deployment e use o seguinte modelo. Este modelo define todos os contêineres, variáveis de ambiente, pontos de montagem de armazenamento e configurações de rede que o Dify exige.
Durante a implantação, substitua os placeholders (prefixados com $) no modelo JSON pelos seus valores reais. Para descrições detalhadas dos parâmetros, consulte JSON Deployment.
Na seção metadata, defina
"enable_webservice": truepara abrir a porta de acesso web.Na seção storage, substitua
$oss_pathpelo caminho real do OSS, por exemplo, "oss://your-bucket-name/dify-data/". Esse caminho é usado pela API e pelos plugins do Dify. Duas subpastas, dify e dify_plugin, são criadas nesse caminho.-
Na seção containers, as principais variáveis de ambiente que exigem a substituição de placeholders estão descritas abaixo. Para mais informações, consulte Dify Environment Variables.
Banco de dados PostgreSQL
db_host: O endpoint da instância do banco de dados PostgreSQL.
db_port: O padrão é 5432.
api_db: O banco de dados de funções principais do Dify. Armazena todos os dados relacionados às funções principais, como aplicativos, usuários, conversas, bases de conhecimento, workflows e configurações de modelos.
plugin_daemon_db: O banco de dados de plugins do Dify. Armazena informações relacionadas ao status de execução, configuração e metadados dos plugins.
db_username e db_password: Ambos os bancos de dados compartilham o mesmo nome de usuário e senha.
Redis
Quando os usuários interagem em tempo real com a IA, o Redis facilita o envio de mensagens e a comunicação em tempo real entre diferentes componentes do service.
redis_host: O endpoint da instância do Redis.
redis_port: O padrão é 6379.
redis_password: A senha definida ao criar a instância do Redis.
Elasticsearch
Usado para o banco de dados vetorial e mecanismo de busca de texto completo.
elasticsearch_host: O endpoint da instância do Elasticsearch.
elasticsearch_port: O padrão é 9200.
elasticsearch_username: O padrão é elastic.
elasticsearch_password: A senha configurada ao criar a instância do Elasticsearch. Se você esquecer a senha, poderá reset the instance access password.
Chaves de segurança
O Dify usa várias chaves para proteger a comunicação interna. Gere-as com o comando
openssl rand -base64 42.secret_key: A chave usada para assinar de forma segura os cookies de sessão e criptografar informações confidenciais no banco de dados.
api_key: A chave necessária para o acesso interno à API, a fim de evitar ataques externos maliciosos.
plugin_daemon_key: A chave necessária para o acesso interno ao daemon do plugin, a fim de evitar ataques externos maliciosos.
FAQ
Não é possível conectar à instância do banco de dados
[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)
Confirme se a instância do ApsaraDB RDS for PostgreSQL e o service do PAI-EAS estão na mesma VPC. O ApsaraDB RDS for PostgreSQL não oferece suporte à troca de VPCs. Recrie a instância na VPC correta.
Na página de detalhes da instância no console do ApsaraDB RDS for PostgreSQL, clique em Database Connection no painel de navegação à esquerda para visualizar o nome da VPC e o endereço IP interno da instância. A porta padrão é 5432.
Não é possível conectar ao Redis
Esse problema ocorre se o cliente Redis no contêiner dify-api não conseguir se conectar ao servidor 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
Possíveis causas:
-
Problema de rede VPC: Confirme se a instância do Redis e o service do PAI-EAS estão na mesma VPC.
Na página Instance Information da sua instância do ApsaraDB for Redis, verifique o campo Virtual Private Cloud na seção Basic Information para confirmar o ID da VPC.
-
Problema de configuração da lista de permissões: Confirme se uma lista de permissões está configurada para a instância do Redis. Adicione o intervalo de endereços IP do vSwitch onde o service do PAI-EAS está localizado. Encontre o intervalo de endereços IP na vSwitch page.
Por exemplo, na página Allowlist Settings, adicione o bloco CIDR do vSwitch, como
192.168.32.0/22, a um grupo de lista de permissões.
Não é possível conectar ao Alibaba Cloud Elasticsearch
Uma possível causa é um problema de rede VPC. Confirme se a instância do Alibaba Cloud Elasticsearch e o service do PAI-EAS estão na mesma VPC.
Na página Basic Information da instância do Alibaba Cloud Elasticsearch, verifique o campo Virtual Private Cloud para obter o ID da VPC da instância.
Banco de dados ausente para o dify-api
Quando o Dify é iniciado, ele se conecta a dois bancos de dados: o banco de dados core data exigido pelo dify-api e o banco de dados plugin exigido pelo 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]:
No Dify Community Edition 1.7.1, que é usado nesta implantação, o banco de dados plugin é criado automaticamente, mas o banco de dados core data não. Crie o banco de dados core data manualmente.
Não é possível conectar ao marketplace.dify.ai
Esse problema ocorre porque os contêineres do PAI-EAS não têm acesso à internet pública por padrão. Para obter uma solução, consulte Enable a PAI-EAS service to access public or internal resources.
[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.