← Volver al Generador Principal

Configuración de Docker Compose para n8n Workflow Automation + PostgreSQL

Cuándo usar esta combinación

Utiliza esta arquitectura cuando lleves n8n a entornos de producción o staging con flujos de trabajo críticos. Por defecto, n8n utiliza SQLite, lo que genera cuellos de botella por bloqueos de base de datos (database is locked) bajo concurrencia moderada. PostgreSQL desacopla la capa de persistencia, permitiendo alta concurrencia, retención masiva de logs de ejecución, escalabilidad horizontal (modo queue con Redis a futuro), transaccionalidad robusta y respaldos consistentes en caliente mediante herramientas estándar (pg_dump, WAL archiving).


Configuración docker-compose.yml

version: '3.8'

networks:
  n8n-internal:
    driver: bridge

volumes:
  postgres_data:
  n8n_data:

services:
  postgres:
    image: postgres:16-alpine
    container_name: n8n_postgres
    restart: unless-stopped
    environment:
      POSTGRES_USER: n8n_user
      POSTGRES_PASSWORD: ChangeMeSuperSecurePassword123!
      POSTGRES_DB: n8n_db
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - n8n-internal
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U n8n_user -d n8n_db"]
      interval: 5s
      timeout: 5s
      retries: 5

  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    container_name: n8n_app
    restart: unless-stopped
    ports:
      - "127.0.0.1:5678:5678"
    environment:
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_DATABASE=n8n_db
      - DB_POSTGRESDB_USER=n8n_user
      - DB_POSTGRESDB_PASSWORD=ChangeMeSuperSecurePassword123!
      - N8N_ENCRYPTION_KEY=CHANGE_ME_GENERATE_32_HEX_STRING
      - WEBHOOK_URL=https://n8n.tudominio.com/
      - EXECUTIONS_DATA_PRUNE=true
      - EXECUTIONS_DATA_MAX_AGE=168
      - N8N_DEFAULT_BINARY_DATA_MODE=filesystem
    volumes:
      - n8n_data:/home/node/.n8n
    networks:
      - n8n-internal
    depends_on:
      postgres:
        condition: service_healthy

Variables de Entorno Críticas para Producción

  1. N8N_ENCRYPTION_KEY: Clave criptográfica para cifrar todas las credenciales almacenadas (API Keys, OAuth tokens, passwords). Si se pierde o se altera tras el despliegue inicial, todas las credenciales guardadas serán irrecuperables.
  2. POSTGRES_PASSWORD / DB_POSTGRESDB_PASSWORD: Contraseña de acceso a la base de datos PostgreSQL. Debe ser robusta (mínimo 24 caracteres alfanuméricos y símbolos).
  3. WEBHOOK_URL: URL pública canónica bajo HTTPS (ej. https://n8n.example.com/). Si no se define correctamente, los webhooks y callbacks de autenticación OAuth2 fallarán al registrar endpoints internos o URLs con localhost.

Consejo de Seguridad y Rendimiento

Checklist de Seguridad antes de desplegar