Dify Segurança e Implantação SKILL
Visão Geral
Este SKILL fornece um guia completo de segurança e operações de implantação para a plataforma Dify, ajudando desenvolvedores e profissionais de operações a construir ambientes de produção seguros, estáveis e de alta performance.
Cenários de Uso
Utilize este SKILL quando você precisar:
- 🚀 Implantar o Dify em produção (Docker / Kubernetes)
- 🔒 Configurar mecanismos de proteção de segurança (SSRF, sandbox, criptografia)
- 🔧 Resolver problemas de implantação (falha na inicialização do contêiner, configuração de rede, gargalos de desempenho)
- 📊 Otimizar o ambiente de produção (monitoramento e alertas, alta disponibilidade, recuperação de falhas)
- ✅ Realizar auditoria de segurança e validação de configuração
Capacidades Principais
- Proteção de segurança: Proteção SSRF, sandbox de código, criptografia de dados, gerenciamento de permissões
- Implantação Docker: Implantação rápida, configuração de produção, arquitetura de rede, otimização de recursos
- Implantação Kubernetes: Arquitetura de alta disponibilidade, escalonamento automático, implantação via Helm
- Monitoramento e alertas: OpenTelemetry, Sentry, agregação de logs, monitoramento de desempenho
- Recuperação de falhas: Diagnóstico de problemas, processos de recuperação, estratégias de backup
Início Rápido
Configuração Mínima de Implantação
# 1. Clone o repositório
git clone https://github.com/langgenius/dify.git
cd dify/docker
# 2. Copie as variáveis de ambiente
cp .env.example .env
# 3. Modifique as configurações críticas de segurança
# Edite o arquivo .env:
SECRET_KEY=$(openssl rand -base64 42)
DB_PASSWORD=your-strong-password
REDIS_PASSWORD=your-redis-password
SANDBOX_API_KEY=$(openssl rand -base64 32)
# 4. Inicie os serviços
docker compose up -d
# 5. Verifique a implantação
docker compose ps
curl http://localhost/health
Lista de Verificação de Segurança
Verificação Pré-implantação
- SECRET_KEY alterada para uma chave forte (use
openssl rand -base64 42) - Senha do banco de dados modificada do valor padrão
- Senha do Redis definida
- Proxy SSRF configurado e bloqueando acesso à rede interna
- Sandbox habilitado com proxy de rede
- Certificado HTTPS/TLS configurado (ambiente de produção)
- Mecanismo de gerenciamento de chaves de API habilitado
- Limite de upload de arquivos definido (UPLOAD_FILE_SIZE_LIMIT)
- Variáveis de ambiente sensíveis armazenadas criptografadas
Verificação em Tempo de Execução
- Permissões do contêiner executando como usuário não root
- Isolamento de rede ssrf_proxy_network funcionando corretamente
- Verificação de saúde todos os serviços com status saudável
- Registro de logs habilitado e gerando saída normalmente
- Monitoramento e alertas configurados (OpenTelemetry / Sentry)
- Estratégia de backup implementada (banco de dados, armazenamento de arquivos)
- Limites de recursos configurações de CPU / memória definidas
- Certificado SSL verificação de validade e renovação automática
Estrutura de Diretórios
04-security/
├── SKILL.md # Este arquivo - Visão geral de segurança e implantação
├── security/ # Práticas de segurança
│ ├── ssrf-protection.md # Configuração de proteção SSRF
│ ├── sandbox.md # Isolamento de sandbox de código
│ ├── encryption.md # Criptografia de dados e TLS
│ └── auth.md # Autenticação e gerenciamento de permissões
├── deployment/ # Guias de implantação
│ ├── docker-compose.md # Implantação com Docker Compose
│ ├── kubernetes.md # Implantação Kubernetes
│ ├── serverless.md # Implantação Serverless
│ └── high-availability.md # Arquitetura de alta disponibilidade
├── operations/ # Práticas de operação
│ ├── monitoring.md # Monitoramento e alertas
│ ├── logging.md # Gerenciamento de logs
│ ├── backup.md # Backup e recuperação
│ └── troubleshooting.md # Solução de problemas
└── best-practices.md # Resumo de melhores práticas
1. Mecanismos de Proteção de Segurança
1.1 Proteção SSRF
O Dify usa um proxy Squid para implementar a proteção SSRF (Server-Side Request Forgery), bloqueando o acesso a endereços de rede interna.
Configuração principal:
# squid.conf - Lista negra de endereços de rede interna
acl localnet src 10.0.0.0/8
acl localnet src 172.16.0.0/12
acl localnet src 192.168.0.0/16
acl localnet src 127.0.0.0/8
# Negar acesso à rede interna
http_access deny localnet
# Portas permitidas
acl Safe_ports port 80 443 1025-65535
http_access deny !Safe_ports
Método de verificação:
# Testar se o acesso à rede interna está bloqueado
docker compose exec api curl -x http://ssrf_proxy:3128 http://127.0.0.1
# Deve retornar 403 Forbidden
# Testar se o acesso externo está funcionando
docker compose exec api curl -x http://ssrf_proxy:3128 https://api.openai.com
# Deve retornar normalmente
📖 Documentação detalhada: security/ssrf-protection.md
1.2 Sandbox de Código
O serviço Sandbox fornece um ambiente seguro de execução de código, isolando o código do usuário.
Configuração principal:
# config.yaml
app:
key: dify-sandbox # Modificar para uma chave forte
max_workers: 4
worker_timeout: 15
enable_network: true # Acessar rede externa através do Proxy SSRF
proxy:
http: 'http://ssrf_proxy:3128'
https: 'http://ssrf_proxy:3128'
Recursos de segurança:
- ✅ Lista de permissões de chamadas de sistema
- ✅ Gerenciamento de cotas de recursos (CPU, memória, timeout)
- ✅ Acesso à rede via Proxy SSRF
- ✅ Isolamento do sistema de arquivos
📖 Documentação detalhada: security/sandbox.md
1.3 Criptografia de Dados
Criptografia em trânsito (TLS/HTTPS):
# Configuração .env
NGINX_HTTPS_ENABLED=true
NGINX_SSL_CERT_FILENAME=fullchain.pem
NGINX_SSL_CERT_KEY_FILENAME=privkey.pem
NGINX_SSL_PROTOCOLS=TLSv1.2 TLSv1.3
Criptografia de conexão com banco de dados:
# PostgreSQL SSL
DB_HOST=db_postgres
POSTGRES_SSL_MODE=require
# Redis SSL
REDIS_USE_SSL=true
REDIS_SSL_CERT_REQS=CERT_REQUIRED
📖 Documentação detalhada: security/encryption.md
1.4 Gerenciamento de Permissões
Gerenciamento de chaves de API:
# Gerar chaves fortes
SECRET_KEY=$(openssl rand -base64 42)
PLUGIN_DAEMON_KEY=$(openssl rand -base64 42)
PLUGIN_DIFY_INNER_API_KEY=$(openssl rand -base64 42)
Integração OAuth 2.0:
- Suporte a autorização de serviços de terceiros
- Atualização automática de tokens de acesso
- Controle de escopo de permissões
📖 Documentação detalhada: security/auth.md
2. Implantação Docker
2.1 Implantação Rápida
Iniciar com um comando:
cd dify/docker
cp .env.example .env
# Edite .env para modificar senhas e chaves
docker compose up -d
Arquitetura de serviços:
nginx (80/443)
├── web (3000) - UI Frontend
├── api (5001) - Lógica de negócios
├── worker - Tarefas em segundo plano
├── beat - Tarefas agendadas
├── plugin_daemon (5002) - Gerenciamento de plugins
└── sandbox (8194) - Execução de código
Serviços de infraestrutura:
├── db_postgres (5432) - Banco de dados principal
├── redis (6379) - Cache e filas
├── weaviate (8080) - Banco de dados vetorial
└── ssrf_proxy (3128) - Proteção SSRF
📖 Documentação detalhada: deployment/docker-compose.md
2.2 Configuração de Produção
Limites de recursos:
# docker-compose.yaml
services:
api:
deploy:
resources:
limits:
cpus: '2'
memory: 4G
reservations:
cpus: '1'
memory: 2G
Verificação de saúde:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:5001/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
Gerenciamento de logs:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
📖 Documentação detalhada: deployment/docker-compose.md
2.3 Arquitetura de Rede
Isolamento de rede:
networks:
# Rede interna - sem acesso externo
ssrf_proxy_network:
driver: bridge
internal: true
# Rede padrão - com acesso externo
default:
driver: bridge
Comunicação entre serviços:
- API/Worker/Sandbox → ssrf_proxy → API externa
- Nginx → API/Web (proxy reverso)
- API → Database/Redis (comunicação interna)
📖 Documentação detalhada: deployment/docker-compose.md
3. Implantação Kubernetes
3.1 Implantação Rápida com Helm
# Adicionar repositório Helm
helm repo add dify https://borispolonsky.github.io/dify-helm
helm repo update
# Instalar Dify
helm install my-dify dify/dify \
--set postgresql.enabled=true \
--set redis.enabled=true \
--set weaviate.enabled=true
# Verificar status
kubectl get pods -l app.kubernetes.io/name=dify
3.2 Arquitetura de Alta Disponibilidade
Implantação com múltiplas réplicas:
# values.yaml
api:
replicaCount: 3
resources:
limits:
cpu: 2000m
memory: 4Gi
requests:
cpu: 1000m
memory: 2Gi
worker:
replicaCount: 2
autoscaling:
enabled: true
minReplicas: 2
maxReplicas: 10
targetCPUUtilizationPercentage: 80
Anti-afinidade de Pods:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- dify-api
topologyKey: kubernetes.io/hostname
📖 Documentação detalhada: deployment/kubernetes.md
3.3 Integração com Serviços Gerenciados
Usar serviços gerenciados em nuvem:
# Usar RDS PostgreSQL
postgresql:
enabled: false
externalDatabase:
host: your-rds-endpoint.rds.amazonaws.com
port: 5432
database: dify
username: dify
password: your-password
# Usar ElastiCache Redis
redis:
enabled: false
externalRedis:
host: your-redis.cache.amazonaws.com
port: 6379
password: your-password
Vantagens:
- ✅ Backup e recuperação automáticos
- ✅ Alta disponibilidade e failover
- ✅ Monitoramento e otimização de desempenho
- ✅ Redução da carga operacional
📖 Documentação detalhada: deployment/high-availability.md
4. Monitoramento e Alertas
4.1 Configuração OpenTelemetry
# .env
ENABLE_OTEL=true
OTLP_BASE_ENDPOINT=http://otel-collector:4318
OTEL_SAMPLING_RATE=0.1
OTEL_BATCH_EXPORT_SCHEDULE_DELAY=5000
OTEL_MAX_QUEUE_SIZE=2048
OTEL_METRIC_EXPORT_INTERVAL=60000
Métricas monitoradas:
- Latência e throughput de requisições
- Taxa de erros e sucessos
- Uso de recursos (CPU, memória, disco)
- Status do pool de conexões do banco de dados
- Profundidade e velocidade de processamento da fila
4.2 Rastreamento de Erros com Sentry
# .env
API_SENTRY_DSN=https://[email protected]/project-id
API_SENTRY_TRACES_SAMPLE_RATE=1.0
WEB_SENTRY_DSN=https://[email protected]/project-id
PLUGIN_SENTRY_ENABLED=true
4.3 Agregação de Logs
# Configuração de logs
LOG_LEVEL=INFO
LOG_OUTPUT_FORMAT=json
LOG_FILE=/app/logs/server.log
LOG_FILE_MAX_SIZE=20
LOG_FILE_BACKUP_COUNT=5
Visualização de logs:
# Docker
docker compose logs -f api
docker compose logs --tail=100 worker
# Kubernetes
kubectl logs -f deployment/dify-api
kubectl logs -l app=dify-worker --tail=100
📖 Documentação detalhada: operations/monitoring.md
4.4 Monitoramento de Filas
# .env
QUEUE_MONITOR_THRESHOLD=200
[email protected],[email protected]
QUEUE_MONITOR_INTERVAL=30
ENABLE_DATASETS_QUEUE_MONITOR=true
5. Solução de Problemas
5.1 Problemas Comuns
Falha na Inicialização do Contêiner
Sintoma: O contêiner reinicia repetidamente ou não consegue iniciar
Diagnóstico:
# Verificar status do contêiner
docker compose ps
# Verificar logs
docker compose logs api
# Verificar estado de saúde
docker compose exec api curl http://localhost:5001/health
Causas comuns:
-
Falha na conexão com o banco de dados
# Verificar banco de dados docker compose exec db_postgres pg_isready # Verificar conexão docker compose exec api env | grep DB_ -
Serviço dependente não está pronto
# Verificar configuração depends_on depends_on: db_postgres: condition: service_healthy -
Erro de configuração de variável de ambiente
# Verificar variáveis obrigatórias docker compose config | grep -E "SECRET_KEY|DB_PASSWORD"
Problemas de Conexão de Rede
Sintoma: Incapacidade de acessar APIs externas ou serviços internos
Diagnóstico:
# Testar Proxy SSRF
docker compose exec api curl -x http://ssrf_proxy:3128 https://api.openai.com
# Testar serviços internos
docker compose exec api curl http://redis:6379
docker compose exec api curl http://db_postgres:5432
Problemas de Desempenho
Sintoma: Resposta lenta, timeout, esgotamento de recursos
Diagnóstico:
# Verificar uso de recursos
docker stats
# Verificar conexões do banco de dados
docker compose exec db_postgres psql -U postgres -d dify -c "SELECT count(*) FROM pg_stat_activity;"
# Verificar memória do Redis
docker compose exec redis redis-cli INFO memory
📖 Documentação detalhada: operations/troubleshooting.md
5.2 Processo de Recuperação de Falhas
Falha no Banco de Dados
# 1. Verificar status
docker compose ps db_postgres
# 2. Verificar logs
docker compose logs db_postgres
# 3. Reiniciar serviço
docker compose restart db_postgres
# 4. Verificar conexão
docker compose exec db_postgres pg_isready
# 5. Verificar integridade dos dados
docker compose exec db_postgres psql -U postgres -d dify -c "SELECT count(*) FROM accounts;"
Ordem de Reinicialização de Serviços
# 1. Serviços de infraestrutura
docker compose restart db_postgres redis
# 2. Serviços principais
docker compose restart api worker beat
# 3. Serviços de frontend
docker compose restart web nginx
# 4. Verificação
docker compose ps
curl http://localhost/health
📖 Documentação detalhada: operations/backup.md
6. Melhores Práticas
6.1 Melhores Práticas de Segurança
-
Atualizar chaves regularmente
- Rotacionar SECRET_KEY a cada 90 dias
- Usar serviço de gerenciamento de chaves (AWS KMS, HashiCorp Vault)
-
Princípio do menor privilégio
- Executar contêineres como usuário não root
- Conceder apenas as permissões necessárias ao usuário do banco de dados
-
Isolamento de rede
- Usar rede interna para isolar serviços sensíveis
- Controlar o acesso externo através do Proxy SSRF
-
Logs de auditoria
- Habilitar registro detalhado de logs
- Revisar regularmente logs de acesso e erros
6.2 Melhores Práticas de Implantação
-
Separação de ambientes
- Ambientes de desenvolvimento, teste e produção independentes
- Usar configurações e chaves diferentes
-
Implantação automatizada
- Usar pipelines CI/CD
- Testes e validação automatizados
-
Controle de versão
- Versionar arquivos de configuração (excluir informações sensíveis)
- Usar Git para gerenciar código de infraestrutura
-
Monitoramento e alertas
- Configurar métricas de monitoramento abrangentes
- Definir limites de alerta adequados
6.3 Melhores Práticas de Operação
-
Estratégia de backup
- Backup automático diário do banco de dados
- Testar regularmente o processo de recuperação
-
Planejamento de capacidade
- Monitorar tendências de uso de recursos
- Escalar antecipadamente para evitar problemas de desempenho
-
Manutenção de documentação
- Registrar alterações de configuração
- Manter manual de operações
-
Resposta a incidentes
- Estabelecer processo de resposta a falhas
- Realizar simulações de recuperação regularmente
📖 Documentação detalhada: best-practices.md
7. Modelos de Configuração
7.1 Modelo de Ambiente de Desenvolvimento
# .env.development
DEBUG=true
LOG_LEVEL=DEBUG
MIGRATION_ENABLED=true
# Usar senhas padrão (apenas para desenvolvimento)
DB_PASSWORD=difyai123456
REDIS_PASSWORD=difyai123456
# Desabilitar HTTPS
NGINX_HTTPS_ENABLED=false
7.2 Modelo de Ambiente de Produção
# .env.production
DEBUG=false
LOG_LEVEL=INFO
DEPLOY_ENV=PRODUCTION
# Chave forte (obrigatório modificar)
SECRET_KEY=$(openssl rand -base64 42)
DB_PASSWORD=<strong-password>
REDIS_PASSWORD=<strong-password>
# Habilitar HTTPS
NGINX_HTTPS_ENABLED=true
NGINX_SSL_CERT_FILENAME=fullchain.pem
NGINX_SSL_CERT_KEY_FILENAME=privkey.pem
# Habilitar monitoramento
ENABLE_OTEL=true
API_SENTRY_DSN=<your-sentry-dsn>
7.3 Modelo de Alta Disponibilidade
# docker-compose.ha.yaml
services:
api:
deploy:
replicas: 3
resources:
limits:
cpus: '2'
memory: 4G
restart_policy:
condition: on-failure
max_attempts: 3
worker:
deploy:
replicas: 2
resources:
limits:
cpus: '4'
memory: 8G
8. Referências
Documentação Oficial
Recursos da Comunidade
SKILLs Relacionados
- 01-workflow - Design de workflows
- 02-plugin - Desenvolvimento de plugins
- 03-performance - Otimização de desempenho
Referência Rápida de Comandos
# Implantação Docker
docker compose up -d # Iniciar todos os serviços
docker compose ps # Verificar status dos serviços
docker compose logs -f api # Visualizar logs da API
docker compose restart api # Reiniciar serviço da API
docker compose down # Parar todos os serviços
# Verificação de saúde
curl http://localhost/health # Verificar saúde do serviço
docker compose exec db_postgres pg_isready # Verificar banco de dados
docker compose exec redis redis-cli ping # Verificar Redis
# Visualização de logs
docker compose logs --tail=100 api # Visualizar últimas 100 linhas de logs
docker compose logs -f worker # Visualizar logs do worker em tempo real
# Operações de banco de dados
docker compose exec db_postgres psql -U postgres -d dify # Conectar ao banco de dados
docker compose exec db_postgres pg_dump -U postgres dify > backup.sql # Fazer backup
# Kubernetes
kubectl get pods -l app=dify # Verificar status dos Pods
kubectl logs -f deployment/dify-api # Visualizar logs
kubectl describe pod <pod-name> # Verificar detalhes do Pod
kubectl exec -it <pod-name> -- /bin/bash # Acessar o contêiner
Versão: 1.0.0 Última atualização: 2026-03-04 Mantido por: Equipe Dify SKILL