Actualizado Marzo 2026 8 Servicios Explicados

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.

~50 MB
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.

~300 MB
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.

~300 MB
web Frontend Next.js

La interfaz de usuario basada en React servida como app Next.js. Se comunica con el contenedor API.

~150 MB
db Base de datos PostgreSQL

Almacena todos los datos persistentes: apps, conversaciones, metadatos de datasets, usuarios y claves API.

~100 MB
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.

~30 MB
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.

~500 MB
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.

~100 MB

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

Iniciar todos los servicios docker compose up -d
Detener todos los servicios docker compose down
Reiniciar un servicio único docker compose restart api
Ver registros (seguimiento) docker compose logs -f api worker
Abrir shell en contenedor API docker compose exec api bash
Comprobar estado de contenedores docker compose ps
Uso de recursos por contenedor docker stats
Eliminar contenedores detenidos docker compose down --remove-orphans
Descargar últimas imágenes docker compose pull
Reconstruir un servicio 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.