CommunityProgramación y desarrollogithub.com

SystemTce/dify-skills

Guía completa de prácticas de seguridad y despliegue/operación de Dify, que cubre protección SSRF, sandbox de código, despliegue con Docker/Kubernetes, monitorización, alertas y recuperación de fallos.

¿Qué es dify-skills?

Este SKILL proporciona una guía integral y práctica para la seguridad, el despliegue y las operaciones de la plataforma Dify. Está diseñado para ayudar tanto a desarrolladores como a personal de operaciones a construir y mantener entornos de producción seguros, estables y de alto rendimiento. El SKILL cubre un amplio espectro de temas, que van desde la configuración de mecanismos de seguridad esenciales como la protección contra SSRF (Server-Side Request Forgery), un sandbox para la ejecución segura de código, cifrado de datos y gestión de permisos, hasta guías detalladas de despliegue en Docker Compose y Kubernetes (incluyendo alta disponibilidad y Helm). Además, incluye robustas prácticas de operación como la configuración de monitorización con OpenTelemetry y Sentry, gestión de logs, estrategias de backup y recuperación ante desastres, y un completo apartado de resolución de problemas. Es compatible con el ecosistema estándar de Dify y se aplica a cualquier entorno que utilice Docker o Kubernetes, ofreciendo plantillas de configuración tanto para desarrollo como para producción, y una lista de verificación de seguridad para la puesta en marcha.

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

Installed? Explore more Programación y desarrollo skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Habilidades de Seguridad y Despliegue de Dify SKILL

Resumen

Este SKILL proporciona una guía completa de prácticas de seguridad y operaciones de despliegue para la plataforma Dify, ayudando a desarrolladores y personal de operaciones a construir un entorno de producción seguro, estable y de alto rendimiento.

Escenarios de Activación

Utiliza este SKILL cuando necesites:

  • 🚀 Desplegar Dify en un entorno de producción (Docker/Kubernetes)
  • 🔒 Configurar mecanismos de protección de seguridad (SSRF, sandbox, cifrado)
  • 🔧 Resolver problemas de despliegue (fallos de inicio de contenedores, configuración de red, cuellos de botella de rendimiento)
  • 📊 Optimizar el entorno de producción (monitorización y alertas, alta disponibilidad, recuperación de fallos)
  • ✅ Realizar auditorías de seguridad y verificación de configuración

Capacidades Principales

  • Protección de seguridad: Protección SSRF, sandbox de código, cifrado de datos, gestión de permisos
  • Despliegue con Docker: Despliegue rápido, configuración de producción, arquitectura de red, optimización de recursos
  • Despliegue con Kubernetes: Arquitectura de alta disponibilidad, escalado automático, despliegue con Helm
  • Monitorización y Alertas: OpenTelemetry, Sentry, agregación de logs, monitorización de rendimiento
  • Recuperación de Fallos: Diagnóstico de problemas, procesos de recuperación, estrategias de backup

Inicio Rápido

Configuración Mínima de Despliegue

# 1. Clonar el repositorio
git clone https://github.com/langgenius/dify.git
cd dify/docker

# 2. Copiar variables de entorno
cp .env.example .env

# 3. Modificar configuraciones de seguridad clave
# Editar el archivo .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. Iniciar servicios
docker compose up -d

# 5. Verificar despliegue
docker compose ps
curl http://localhost/health

Lista de Verificación de Seguridad

Verificaciones Previas al Despliegue

  • SECRET_KEY ha sido cambiado a una clave segura (usa openssl rand -base64 42)
  • Contraseña de la base de datos ha sido modificada del valor por defecto
  • Contraseña de Redis ha sido configurada
  • Proxy SSRF está configurado y bloquea el acceso a la red interna
  • Sandbox tiene el proxy de red habilitado
  • Certificado HTTPS/TLS está configurado (entorno de producción)
  • Mecanismo de gestión de API Keys está habilitado
  • Límite de subida de archivos está configurado (UPLOAD_FILE_SIZE_LIMIT)
  • Variables de entorno sensibles están almacenadas cifradas

Verificaciones en Tiempo de Ejecución

  • Permisos del contenedor se ejecutan como usuario no root
  • Aislamiento de red ssrf_proxy_network funciona correctamente
  • Chequeo de salud todos los servicios tienen estado saludable
  • Registro de logs está habilitado y generando salida normalmente
  • Monitorización y alertas están configuradas (OpenTelemetry/Sentry)
  • Estrategia de backup está implementada (base de datos, almacenamiento de archivos)
  • Límites de recursos Límites de CPU/memoria están configurados
  • Certificado SSL comprobación de validez y renovación automática

Estructura de Directorios

04-security/
├── SKILL.md                    # Este archivo - Resumen de seguridad y despliegue
├── security/                   # Prácticas de seguridad
│   ├── ssrf-protection.md     # Configuración de protección SSRF
│   ├── sandbox.md             # Aislamiento del sandbox de código
│   ├── encryption.md          # Cifrado de datos y TLS
│   └── auth.md                # Autenticación y gestión de permisos
├── deployment/                 # Guías de despliegue
│   ├── docker-compose.md      # Despliegue con Docker Compose
│   ├── kubernetes.md          # Despliegue con Kubernetes
│   ├── serverless.md          # Despliegue Serverless
│   └── high-availability.md   # Arquitectura de alta disponibilidad
├── operations/                 # Prácticas de operación
│   ├── monitoring.md          # Monitorización y alertas
│   ├── logging.md             # Gestión de logs
│   ├── backup.md              # Backup y recuperación
│   └── troubleshooting.md     # Resolución de problemas
└── best-practices.md           # Resumen de mejores prácticas

1. Mecanismos de Protección de Seguridad

1.1 Protección SSRF

Dify utiliza un proxy Squid para implementar la protección contra SSRF (Server-Side Request Forgery), bloqueando el acceso a direcciones de red interna.

Configuración Principal:

# squid.conf - Lista negra de direcciones internas
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

# Denegar acceso a la red interna
http_access deny localnet

# Puertos permitidos
acl Safe_ports port 80 443 1025-65535
http_access deny !Safe_ports

Método de Verificación:

# Probar que el acceso a la red interna está bloqueado
docker compose exec api curl -x http://ssrf_proxy:3128 http://127.0.0.1
# Debería devolver 403 Forbidden

# Probar que el acceso externo funciona
docker compose exec api curl -x http://ssrf_proxy:3128 https://api.openai.com
# Debería devolver una respuesta normal

📖 Documentación Detallada: security/ssrf-protection.md

1.2 Sandbox de Código

El servicio Sandbox proporciona un entorno seguro para la ejecución de código, aislando el código del usuario.

Configuración Principal:

# config.yaml
app:
  key: dify-sandbox  # Cambiar a una clave segura
max_workers: 4
worker_timeout: 15
enable_network: true  # Acceso externo a través del proxy SSRF
proxy:
  http: 'http://ssrf_proxy:3128'
  https: 'http://ssrf_proxy:3128'

Características de Seguridad:

  • ✅ Restricciones de lista blanca de llamadas al sistema
  • ✅ Gestión de cuotas de recursos (CPU, memoria, tiempo de espera)
  • ✅ Acceso a la red a través del proxy SSRF
  • ✅ Aislamiento del sistema de archivos

📖 Documentación Detallada: security/sandbox.md

1.3 Cifrado de Datos

Cifrado en Tránsito (TLS/HTTPS):

# Configuración .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

Cifrado de Conexión a la Base de Datos:

# PostgreSQL SSL
DB_HOST=db_postgres
POSTGRES_SSL_MODE=require

# Redis SSL
REDIS_USE_SSL=true
REDIS_SSL_CERT_REQS=CERT_REQUIRED

📖 Documentación Detallada: security/encryption.md

1.4 Gestión de Permisos

Gestión de API Keys:

# Generar claves seguras
SECRET_KEY=$(openssl rand -base64 42)
PLUGIN_DAEMON_KEY=$(openssl rand -base64 42)
PLUGIN_DIFY_INNER_API_KEY=$(openssl rand -base64 42)

Integración OAuth 2.0:

  • Soporta autorización de servicios de terceros
  • Actualización automática de tokens de acceso
  • Control de alcance de permisos

📖 Documentación Detallada: security/auth.md


2. Despliegue con Docker

2.1 Despliegue Rápido

Inicio con un solo comando:

cd dify/docker
cp .env.example .env
# Editar .env para modificar contraseñas y claves
docker compose up -d

Arquitectura de Servicios:

nginx (80/443)
  ├── web (3000) - Interfaz de usuario frontend
  ├── api (5001) - Lógica de negocio
  ├── worker - Tareas en segundo plano
  ├── beat - Tareas programadas
  ├── plugin_daemon (5002) - Gestión de plugins
  └── sandbox (8194) - Ejecución de código

Servicios base:
  ├── db_postgres (5432) - Base de datos principal
  ├── redis (6379) - Caché y colas
  ├── weaviate (8080) - Base de datos vectorial
  └── ssrf_proxy (3128) - Protección SSRF

📖 Documentación Detallada: deployment/docker-compose.md

2.2 Configuración de Producción

Límites de Recursos:

# docker-compose.yaml
services:
  api:
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 4G
        reservations:
          cpus: '1'
          memory: 2G

Chequeo de Salud:

healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost:5001/health"]
  interval: 30s
  timeout: 10s
  retries: 3
  start_period: 40s

Gestión de Logs:

logging:
  driver: "json-file"
  options:
    max-size: "10m"
    max-file: "3"

📖 Documentación Detallada: deployment/docker-compose.md

2.3 Arquitectura de Red

Aislamiento de Red:

networks:
  # Red interna - sin acceso externo
  ssrf_proxy_network:
    driver: bridge
    internal: true

  # Red por defecto - con acceso externo
  default:
    driver: bridge

Comunicación entre Servicios:

  • API/Worker/Sandbox → ssrf_proxy → API externa
  • Nginx → API/Web (proxy inverso)
  • API → Database/Redis (comunicación interna)

📖 Documentación Detallada: deployment/docker-compose.md


3. Despliegue con Kubernetes

3.1 Despliegue Rápido con Helm

# Añadir repositorio 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

# Ver estado
kubectl get pods -l app.kubernetes.io/name=dify

3.2 Arquitectura de Alta Disponibilidad

Despliegue con Múltiples 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-Afinitad de Pods:

affinity:
  podAntiAffinity:
    preferredDuringSchedulingIgnoredDuringExecution:
    - weight: 100
      podAffinityTerm:
        labelSelector:
          matchExpressions:
          - key: app
            operator: In
            values:
            - dify-api
        topologyKey: kubernetes.io/hostname

📖 Documentación Detallada: deployment/kubernetes.md

3.3 Integración con Servicios Gestionados

Usar servicios gestionados de proveedores cloud:

# 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

Ventajas:

  • ✅ Backup y recuperación automáticos
  • ✅ Alta disponibilidad y conmutación por error
  • ✅ Monitorización y optimización del rendimiento
  • ✅ Reducción de la carga operativa

📖 Documentación Detallada: deployment/high-availability.md


4. Monitorización y Alertas

4.1 Configuración de 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 de Monitorización:

  • Latencia y rendimiento de solicitudes
  • Tasa de errores y éxito
  • Uso de recursos (CPU, memoria, disco)
  • Estado del pool de conexiones de la base de datos
  • Profundidad de la cola y velocidad de procesamiento

4.2 Rastreo de Errores con 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 Agregación de Logs

# Configuración 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

Visualización 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

📖 Documentación Detallada: operations/monitoring.md

4.4 Monitorización de Colas

# .env
QUEUE_MONITOR_THRESHOLD=200
[email protected],[email protected]
QUEUE_MONITOR_INTERVAL=30
ENABLE_DATASETS_QUEUE_MONITOR=true

5. Resolución de Problemas

5.1 Problemas Comunes

Fallo al Iniciar el Contenedor

Síntoma: El contenedor se reinicia constantemente o no puede iniciarse.

Diagnóstico:

# Ver estado del contenedor
docker compose ps

# Ver logs
docker compose logs api

# Comprobar estado de salud
docker compose exec api curl http://localhost:5001/health

Causas Comunes:

  1. Fallo de conexión a la base de datos

    # Comprobar base de datos
    docker compose exec db_postgres pg_isready
    # Verificar conexión
    docker compose exec api env | grep DB_
    
  2. Servicio dependiente no listo

    # Comprobar la configuración depends_on
    depends_on:
      db_postgres:
        condition: service_healthy
    
  3. Error de configuración de variables de entorno

    # Verificar variables obligatorias
    docker compose config | grep -E "SECRET_KEY|DB_PASSWORD"
    

Problemas de Conexión de Red

Síntoma: No se puede acceder a la API externa o a los servicios internos.

Diagnóstico:

# Probar Proxy SSRF
docker compose exec api curl -x http://ssrf_proxy:3128 https://api.openai.com

# Probar servicios internos
docker compose exec api curl http://redis:6379
docker compose exec api curl http://db_postgres:5432

Problemas de Rendimiento

Síntoma: Respuesta lenta, timeouts, agotamiento de recursos.

Diagnóstico:

# Ver uso de recursos
docker stats

# Ver conexiones a la base de datos
docker compose exec db_postgres psql -U postgres -d dify -c "SELECT count(*) FROM pg_stat_activity;"

# Ver memoria de Redis
docker compose exec redis redis-cli INFO memory

📖 Documentación Detallada: operations/troubleshooting.md

5.2 Proceso de Recuperación de Fallos

Fallo de la Base de Datos

# 1. Verificar estado
docker compose ps db_postgres

# 2. Ver logs
docker compose logs db_postgres

# 3. Reiniciar servicio
docker compose restart db_postgres

# 4. Verificar conexión
docker compose exec db_postgres pg_isready

# 5. Comprobar integridad de datos
docker compose exec db_postgres psql -U postgres -d dify -c "SELECT count(*) FROM accounts;"

Orden de Reinicio de Servicios

# 1. Servicios base
docker compose restart db_postgres redis

# 2. Servicios principales
docker compose restart api worker beat

# 3. Servicios frontend
docker compose restart web nginx

# 4. Verificar
docker compose ps
curl http://localhost/health

📖 Documentación Detallada: operations/backup.md


6. Mejores Prácticas

6.1 Mejores Prácticas de Seguridad

  1. Rotación periódica de claves

    • Rotar SECRET_KEY cada 90 días
    • Usar servicios de gestión de claves (AWS KMS, HashiCorp Vault)
  2. Principio de Mínimos Privilegios

    • Los contenedores se ejecutan como usuario no root
    • Los usuarios de la base de datos solo tienen los permisos necesarios
  3. Aislamiento de Red

    • Usar redes internas para aislar servicios sensibles
    • Controlar el acceso externo a través del proxy SSRF
  4. Registros de Auditoría

    • Habilitar el registro detallado de logs
    • Revisar periódicamente los logs de acceso y errores

6.2 Mejores Prácticas de Despliegue

  1. Separación de Entornos

    • Entornos de desarrollo, pruebas y producción independientes
    • Usar diferentes configuraciones y claves
  2. Despliegue Automatizado

    • Usar pipelines CI/CD
    • Pruebas y verificación automatizadas
  3. Control de Versiones

    • Versionar los archivos de configuración (excluyendo información sensible)
    • Usar Git para gestionar el código de infraestructura
  4. Monitorización y Alertas

    • Configurar métricas de monitorización completas
    • Establecer umbrales de alerta adecuados

6.3 Mejores Prácticas de Operaciones

  1. Estrategia de Backup

    • Backup automático diario de la base de datos
    • Probar periódicamente el proceso de recuperación
  2. Planificación de Capacidad

    • Monitorizar las tendencias de uso de recursos
    • Escalar preventivamente para evitar problemas de rendimiento
  3. Mantenimiento de Documentación

    • Registrar los cambios de configuración
    • Mantener un manual de operaciones
  4. Respuesta a Incidentes

    • Establecer un proceso de respuesta a fallos
    • Realizar simulacros periódicos de escenarios de recuperación

📖 Documentación Detallada: best-practices.md


7. Plantillas de Configuración

7.1 Plantilla para Entorno de Desarrollo

# .env.development
DEBUG=true
LOG_LEVEL=DEBUG
MIGRATION_ENABLED=true

# Usar contraseñas por defecto (solo para desarrollo)
DB_PASSWORD=difyai123456
REDIS_PASSWORD=difyai123456

# Deshabilitar HTTPS
NGINX_HTTPS_ENABLED=false

7.2 Plantilla para Entorno de Producción

# .env.production
DEBUG=false
LOG_LEVEL=INFO
DEPLOY_ENV=PRODUCTION

# Claves seguras (deben modificarse)
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 monitorización
ENABLE_OTEL=true
API_SENTRY_DSN=<your-sentry-dsn>

7.3 Plantilla de Alta Disponibilidad

# 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. Referencias

Documentación Oficial

Recursos de la Comunidad

SKILLs Relacionados


Referencia Rápida de Comandos

# Despliegue con Docker
docker compose up -d                    # Iniciar todos los servicios
docker compose ps                       # Ver estado de los servicios
docker compose logs -f api              # Ver logs de la API
docker compose restart api              # Reiniciar el servicio API
docker compose down                     # Detener todos los servicios

# Chequeo de Salud
curl http://localhost/health            # Comprobar salud del servicio
docker compose exec db_postgres pg_isready  # Comprobar base de datos
docker compose exec redis redis-cli ping    # Comprobar Redis

# Visualización de Logs
docker compose logs --tail=100 api      # Ver últimas 100 líneas de logs
docker compose logs -f worker           # Ver logs de worker en tiempo real

# Operaciones con la Base de Datos
docker compose exec db_postgres psql -U postgres -d dify  # Conectar a la base de datos
docker compose exec db_postgres pg_dump -U postgres dify > backup.sql  # Backup

# Kubernetes
kubectl get pods -l app=dify            # Ver estado de los Pods
kubectl logs -f deployment/dify-api     # Ver logs
kubectl describe pod <pod-name>         # Ver detalles del Pod
kubectl exec -it <pod-name> -- /bin/bash  # Acceder al contenedor

Versión: 1.0.0 Última actualización: 2026-03-04 Mantenedor: Dify SKILL Team

Individual skills in this repo

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

Skills relacionados