SystemTce/dify-skills

Guia completo de segurança, implantação e operação da plataforma Dify, cobrindo proteção SSRF, sandbox de código, implantação Docker/Kubernetes, monitoramento, alertas e recuperação de falhas.

O que é dify-skills?

Este skill oferece um guia abrangente e prático para desenvolvedores e operadores de infraestrutura que utilizam a plataforma Dify, abordando desde a implantação inicial até a manutenção contínua em produção. Ele é especialmente útil para quem precisa configurar ambientes seguros e escaláveis, implementar proteções contra ataques SSRF, isolar a execução de códigos de usuários em sandboxes, e gerenciar a criptografia de dados e permissões. O skill cobre em detalhes a implantação usando Docker Compose e Kubernetes, incluindo arquiteturas de alta disponibilidade, balanceamento de carga e integração com serviços gerenciados em nuvem. Além disso, fornece orientações completas sobre monitoramento com OpenTelemetry e Sentry, gerenciamento de logs, estratégias de backup e recuperação de desastres, e um roteiro de diagnósticos para resolver problemas comuns de rede, desempenho e inicialização de contêineres. O conteúdo é aplicável a ambientes de desenvolvimento, teste e produção, e inclui modelos de configuração e listas de verificação de segurança para garantir uma operação robusta.

Funciona com✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/SystemTce/dify-skills/tree/main/04-security

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

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:

  1. 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_
    
  2. Serviço dependente não está pronto

    # Verificar configuração depends_on
    depends_on:
      db_postgres:
        condition: service_healthy
    
  3. 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

  1. Atualizar chaves regularmente

    • Rotacionar SECRET_KEY a cada 90 dias
    • Usar serviço de gerenciamento de chaves (AWS KMS, HashiCorp Vault)
  2. 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
  3. Isolamento de rede

    • Usar rede interna para isolar serviços sensíveis
    • Controlar o acesso externo através do Proxy SSRF
  4. Logs de auditoria

    • Habilitar registro detalhado de logs
    • Revisar regularmente logs de acesso e erros

6.2 Melhores Práticas de Implantação

  1. Separação de ambientes

    • Ambientes de desenvolvimento, teste e produção independentes
    • Usar configurações e chaves diferentes
  2. Implantação automatizada

    • Usar pipelines CI/CD
    • Testes e validação automatizados
  3. Controle de versão

    • Versionar arquivos de configuração (excluir informações sensíveis)
    • Usar Git para gerenciar código de infraestrutura
  4. Monitoramento e alertas

    • Configurar métricas de monitoramento abrangentes
    • Definir limites de alerta adequados

6.3 Melhores Práticas de Operação

  1. Estratégia de backup

    • Backup automático diário do banco de dados
    • Testar regularmente o processo de recuperação
  2. Planejamento de capacidade

    • Monitorar tendências de uso de recursos
    • Escalar antecipadamente para evitar problemas de desempenho
  3. Manutenção de documentação

    • Registrar alterações de configuração
    • Manter manual de operações
  4. 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


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

Individual skills in this repo

This repo contains 5 individual skills — each has its own dedicated page.

Habilidades Relacionadas