Guía de Configuración Docker Compose de Dify
Todo lo que necesitas saber sobre la arquitectura Docker de Dify — desde qué hace cada contenedor hasta reforzar tu despliegue para producción con configuraciones personalizadas.
La Arquitectura Docker de Dify
El docker-compose.yaml de Dify lanza ocho servicios. Entender qué hace cada uno te ayuda a configurar, solucionar problemas y escalar tu despliegue.
nginx Proxy inverso / servidor web Enruta las peticiones HTTP entrantes al servicio interno correcto (UI web o API). Este es el único contenedor que necesita ser accesible públicamente.
api Servidor API de Dify El backend principal Python/Flask. Maneja toda la lógica de negocio, llamadas a LLM, ejecución del pipeline RAG y endpoints de la API REST.
worker Worker en segundo plano Celery Procesa tareas asíncronas: indexación de documentos, importaciones de datasets, cadenas LLM de larga duración. Comparte código con el contenedor API.
web Frontend Next.js La interfaz de usuario basada en React servida como app Next.js. Se comunica con el contenedor API.
db Base de datos PostgreSQL Almacena todos los datos persistentes: apps, conversaciones, metadatos de datasets, usuarios y claves API.
redis Caché y broker de mensajes Almacena en caché consultas frecuentes, almacena la cola de tareas Celery para el worker y maneja datos de limitación de tasa.
weaviate Base de datos vectorial Almacena embeddings de documentos para bases de conocimiento RAG. El mayor consumidor de memoria. Se puede reemplazar con pgvector o Qdrant.
sandbox Sandbox de ejecución de código Contenedor aislado para ejecutar nodos de código definidos por el usuario en flujos de trabajo de Dify. Se ejecuta con permisos restringidos.
RAM base total: ~1,5 GB solo para los contenedores en reposo. En un servidor de 4GB, esto deja ~2,5 GB para el SO y las cargas de trabajo reales. Para producción, se recomiendan 8GB RAM.
Guía de Variables de Entorno
Toda la configuración de Dify vive en dify/docker/.env. Copia desde .env.example y personaliza estas configuraciones clave:
Seguridad (Obligatorio)
# Generar con: openssl rand -base64 42
SECRET_KEY=tu-clave-secreta-aleatoria-muy-larga
# Clave de cifrado para datos sensibles almacenados
# Generar con: openssl rand -hex 16
ENCRYPT_IV=tu-valor-hex-de-16-caracteres Configuración de Base de Datos
# Configuración PostgreSQL (red interna Docker)
DB_USERNAME=postgres
DB_PASSWORD=cambia-esta-contraseña-fuerte
DB_HOST=db
DB_PORT=5432
DB_DATABASE=dify
# Configuración Redis
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=cambia-esta-contraseña-redis
REDIS_DB=0 Configuración de URL y CORS
# Tu dominio (sin barra diagonal al final)
CONSOLE_URL=https://tu-dominio.com
APP_URL=https://tu-dominio.com
SERVICE_API_URL=https://tu-dominio.com
# Orígenes CORS (separados por comas)
CONSOLE_CORS_ALLOW_ORIGINS=https://tu-dominio.com
WEB_API_CORS_ALLOW_ORIGINS=https://tu-dominio.com Claves API de LLM (opcional al configurar)
# También puedes configurarlas en la UI web de Dify
# Estas configuraciones .env pre-configuran proveedores en el primer lanzamiento
OPENAI_API_KEY=sk-tu-clave-openai
ANTHROPIC_API_KEY=sk-ant-tu-clave
GOOGLE_API_KEY=tu-clave-gemini
# Para Ollama (LLMs locales)
# Configurar en UI: Configuración → Proveedor de Modelos → Ollama Configuraciones Personalizadas
Mapeo de Puertos Personalizados
Si el puerto 80 está ocupado, cambia el puerto de host al que se enlaza el Nginx de Dify editando .env:
# Cambiar el puerto de host del contenedor Nginx
EXPOSE_NGINX_PORT=8080
EXPOSE_NGINX_SSL_PORT=8443 Deshabilitar Weaviate (usar pgvector en su lugar)
Weaviate usa ~500MB de RAM. En servidores con poca memoria, cambia a pgvector (ya disponible en el contenedor PostgreSQL):
# En .env — cambiar el almacén vectorial a pgvector
VECTOR_STORE=pgvector
# Luego reiniciar sin Weaviate
docker compose up -d --scale weaviate=0 Habilitar Soporte GPU
Para pasar una GPU NVIDIA (para modelos de embeddings locales), añade el runtime GPU a tu docker-compose.override.yaml:
services:
api:
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu] Consulta la guía de alojamiento GPU para las instrucciones de configuración completas.
Comandos Comunes
docker compose up -d docker compose down docker compose restart api docker compose logs -f api worker docker compose exec api bash docker compose ps docker stats docker compose down --remove-orphans docker compose pull docker compose up -d --build api Resolución de Problemas
El contenedor sigue reiniciándose
Comprueba los registros: docker compose logs api. Normalmente causado por un formato incorrecto de SECRET_KEY o una variable de entorno requerida faltante. Asegúrate de que SECRET_KEY tiene al menos 32 caracteres.
Sin memoria — contenedores eliminados por OOM killer
Añade espacio swap y/o actualiza a un servidor más grande. Ejecuta dmesg | grep -i "killed process" para confirmar fallos OOM. El contenedor weaviate suele ser el culpable — considera cambiar a pgvector.
El contenedor web no puede conectarse a la API
Comprueba que tus variables CONSOLE_URL y APP_URL en .env coinciden con tu dominio real. Los errores CORS son casi siempre causados por una configuración de URL incorrecta.