Passo 1
Antes de começarmos a configuração do Dify no Portainer.io no Docker Swarm, é essencial garantir um desempenho ótimo e tempo de resposta rápido. Recomendamos contratar um servidor VPS, de preferência localizado no Brasil, para otimizar a experiência. Abaixo, fornecemos um link para contratação, juntamente com nosso suporte para auxiliá-lo durante o processo.
Pré-requisitos:
Passo 2
Acesse seu terminal de comando e execute os comandos a seguir:
Este comando é para copiar o repositório oficial da Dify
git clone https://github.com/langgenius/dify.git
Já este comando é para mover a pasta do nginx para dentro do caminho correto, você pode verificar nos seus arquivos FTP.
sudo mv /root/dify/docker/nginx /root/nginx
Passo 3
Gerando Senha App com Gmail
Passo 1: Acesse suas Configurações de Conta do Google
- No seu navegador da web, acesse sua conta do Google visitando https://myaccount.google.com/.
Passo 2: Acesse a seção “Segurança”
- Depois de fazer login, vá para a seção “Segurança”. Você pode encontrar isso no menu à esquerda da página.
Passo 3: Encontre a opção “Senhas de app”
- Role para baixo até encontrar a opção “Senhas de app” e clique nela. Isso geralmente está sob a seção “Fazer login no Google”.
Passo 4: Selecione o aplicativo
- Você verá uma lista de aplicativos compatíveis com senhas de app. Escolha o aplicativo para o qual deseja gerar uma senha.
Passo 5: Crie a senha de app
- Selecione o tipo de dispositivo (por exemplo, “Outro (personalizado)”) e clique em “Gerar”. O Google irá gerar uma senha exclusiva para o aplicativo escolhido.
Passo 6: Use a senha de app
- Copie a senha gerada e cole-a no aplicativo onde está configurando a conta. Certifique-se de usar essa senha em vez da sua senha regular do Gmail.
Passo 7: Guarde sua senha de app em um local seguro
- Depois de usar a senha de app, é recomendável que você a armazene em um local seguro, como em um gerenciador de senhas, para referência futura.



Site para gerar Key: https://codebeautify.org/generate-random-hexadecimal-numbers
Passo 4
Configurando sua stack:
version: "3.8"
services:
api:
image: langgenius/dify-api:latest
volumes:
- storage_data:/app/api/storage
networks:
- traefik_public
- digital_network
environment:
- MODE=api
- LOG_LEVEL=INFO
- SECRET_KEY= #atenção
- CONSOLE_WEB_URL=
- INIT_PASSWORD=
- CONSOLE_API_URL=
- SERVICE_API_URL=
- FILES_URL=
## Url Dify
- APP_WEB_URL=https://seudominio.com.br #atenção
## Dados Postgres
- MIGRATION_ENABLED=true
- DB_USERNAME=postgres
- DB_PASSWORD= #atenção
- DB_HOST=postgres
- DB_PORT=5432
- DB_DATABASE=difydb
## Dados Redis
- REDIS_HOST=redis
- REDIS_PORT=6379
- REDIS_USE_SSL=false
- REDIS_DB=0
- CELERY_BROKER_URL=redis://redis:6379/1
## Liberar acesso a todos os ip
- WEB_API_CORS_ALLOW_ORIGINS=*
- CONSOLE_CORS_ALLOW_ORIGINS=*
## Dados sobre armazenamento s3
- STORAGE_TYPE=local
- STORAGE_LOCAL_PATH=storage
- S3_ENDPOINT=s3.seudominio.com.br #atenção
- S3_BUCKET_NAME=dify
- S3_ACCESS_KEY= #atenção
- S3_SECRET_KEY= #atenção
## Dados Weaviate
- VECTOR_STORE=weaviate
- WEAVIATE_ENDPOINT=http://weaviate:8080
- WEAVIATE_API_KEY= #atenção
- WEAVIATE_CLIENT_TIMEOUT=20
## Dados do Email
- MAIL_TYPE=smtp
- MAIL_DEFAULT_SEND_FROM=seuemail@gmail.com (eg=no-reply seuemail@gmail.com) #atenção
- SMTP_SERVER=smtp.gmail.com
- SMTP_PORT=587
- SMTP_USERNAME=seuemail@gmail.com #atenção
- SMTP_PASSWORD= #atenção
## Sentry
- SENTRY_DSN=
- SENTRY_TRACES_SAMPLE_RATE=1.0
- SENTRY_PROFILES_SAMPLE_RATE=1.0
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
worker:
image: langgenius/dify-api:latest ## Versão do Dify
volumes:
- storage_data:/app/api/storage
networks:
- traefik_public
- digital_network
environment:
- MODE=worker
- LOG_LEVEL=INFO
- SECRET_KEY= #atenção Igual a primeira
## Dados Postgres
- DB_USERNAME=postgres
- DB_PASSWORD= #atenção
- DB_HOST=postgres
- DB_PORT=5432
- DB_DATABASE=difydb
## Dados Redis
- REDIS_HOST=redis
- REDIS_PORT=6379
- REDIS_USE_SSL=false
- REDIS_DB=0
- CELERY_BROKER_URL=redis://redis:6379/1
## Dados Weaviate
- STORAGE_TYPE=local
- STORAGE_LOCAL_PATH=storage
- VECTOR_STORE=weaviate
- WEAVIATE_ENDPOINT=http://weaviate:8080
- WEAVIATE_API_KEY= #atenção
- WEAVIATE_CLIENT_TIMEOUT=20
## Dados do Email
- MAIL_TYPE=smtp
- MAIL_DEFAULT_SEND_FROM=seuemail@gmail.com (eg=no-reply seuemail@gmail.com) #atenção
- SMTP_SERVER=smtp.gmail.com
- SMTP_PORT=587
- SMTP_USERNAME=seuemail@gmail.com #atenção
- SMTP_PASSWORD= #atenção
depends_on:
- postgres
- redis
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "0.5"
memory: 1024M
web:
image: langgenius/dify-web:latest # Versão do Dify
networks:
- traefik_public
- digital_network
environment:
- EDITION=SELF_HOSTED
- CONSOLE_API_URL=
# Url Dify
- APP_API_URL=https://seudominio.com.br #atenção
- SENTRY_DSN=
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 1024M
nginx:
image: nginx:latest
entrypoint: ["sh", "-c", "chmod +x /docker-entrypoint.sh && /docker-entrypoint.sh"]
volumes:
- /root/nginx/nginx.conf.template:/etc/nginx/nginx.conf.template
- /root/nginx/proxy.conf.template:/etc/nginx/proxy.conf.template
- /root/nginx/conf.d:/etc/nginx/conf.d
- /root/nginx/docker-entrypoint.sh:/docker-entrypoint.sh
- /root/nginx/ssl:/etc/ssl
networks:
- traefik_public
- digital_network
environment:
- NGINX_SSL_CERT_FILENAME=dify.crt
- NGINX_SSL_CERT_KEY_FILENAME=dify.key
- NGINX_SSL_PROTOCOLS=TLSv1.1 TLSv1.2 TLSv1.3
- NGINX_WORKER_PROCESSES=auto
- NGINX_CLIENT_MAX_BODY_SIZE=15M
- NGINX_KEEPALIVE_TIMEOUT=65
- NGINX_PROXY_READ_TIMEOUT=3600s
- NGINX_PROXY_SEND_TIMEOUT=3600s
- NGINX_SERVER_NAME=_
- NGINX_PORT=80
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "0.5"
memory: 2048M
labels:
- traefik.enable=true
- traefik.http.routers.nginx.rule=Host(`seudominio.com.br`) # Url do Dify
- traefik.http.routers.nginx.entrypoints=websecure
- traefik.http.routers.nginx.tls.certresolver=le
- traefik.http.services.nginx.loadbalancer.server.port=80
- traefik.http.services.nginx.loadbalancer.passHostHeader=true
- traefik.http.routers.nginx.service=nginx
weaviate:
image: semitechnologies/weaviate:1.19.0
volumes:
- weaviate_data:/var/lib/weaviate
environment:
QUERY_DEFAULTS_LIMIT: 25
AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'false'
PERSISTENCE_DATA_PATH: /var/lib/weaviate
DEFAULT_VECTORIZER_MODULE: none
CLUSTER_HOSTNAME: node1
AUTHENTICATION_APIKEY_ENABLED: 'true'
AUTHENTICATION_APIKEY_ALLOWED_KEYS: #atenção
AUTHENTICATION_APIKEY_USERS: hello@dify.ai
AUTHORIZATION_ADMINLIST_ENABLED: 'true'
AUTHORIZATION_ADMINLIST_USERS: hello@dify.ai
networks:
- traefik_public
- digital_network
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 2048M
volumes:
storage_data:
external: true
name: storage_data
weaviate_data:
external: true
name: weaviate_data
networks:
traefik_public:
external: true
digital_network:
external: true
Passo 5 - Criando Banco de Dados no Postgres
2. Acesse o terminal do postgres:
- Em User: Em vez de “root” acesse com “postgres”
- Dentro do terminal digite os comandos abaixo:
psql
CREATE DATABASE difydb;

Após o Deploy - Aguarde de 5 à 10 min
Salve sua senha para efetuar o login após o primeiro cadastro, utilize o mesmo email cadastrado no SMTP da sua Stack.

Gostou do conteúdo? Quer apoiar nosso trabalho?
Você pode fazer uma doação e nos ajudar a continuar criando conteúdo de qualidade. Acesse o link para ver as formas de pagamento disponíveis: https://www.asaas.com/c/io73sms6maiim7ud
Chave Pix: (15) 99855-8323