diff --git a/n8n/docker-compose.yml b/n8n/docker-compose.yml new file mode 100644 index 0000000..a09d27b --- /dev/null +++ b/n8n/docker-compose.yml @@ -0,0 +1,68 @@ +services: + n8n: + image: n8nio/n8n:latest + restart: unless-stopped + environment: + - DB_TYPE=${N8N_DB_TYPE} + - DB_POSTGRESDB_HOST=${N8N_DB_HOST} + - DB_POSTGRESDB_PORT=${N8N_DB_PORT} + - DB_POSTGRESDB_DATABASE=${N8N_DB_NAME} + - DB_POSTGRESDB_USER=${N8N_DB_USER} + - DB_POSTGRESDB_PASSWORD=${N8N_DB_PASSWORD} + + - N8N_HOST=${N8N_HOST} + - N8N_PORT=${N8N_PORT} + - N8N_PROTOCOL=${N8N_PROTOCOL} + - WEBHOOK_URL=${N8N_WEBHOOK_URL} + + - GENERIC_TIMEZONE=${N8N_TIMEZONE} + + # Clave para cifrar credenciales + - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY} + + - NODE_ENV=${N8N_NODE_ENV} + - N8N_DIAGNOSTICS_ENABLED=${N8N_DIAGNOSTICS_ENABLED} + + networks: + - proxy + - n8n + + labels: + traefik.enable: "true" + traefik.docker.network: "proxy" + + traefik.http.routers.n8n-ui.rule: "Host(`${N8N_DOMAIN}`)" + traefik.http.routers.n8n-ui.entrypoints: "${TRAEFIK_ENTRYPOINT_SECURE}" + traefik.http.routers.n8n-ui.tls: "true" + traefik.http.routers.n8n-ui.tls.certresolver: "${TRAEFIK_CERTRESOLVER}" + traefik.http.routers.n8n-ui.service: "n8n" + traefik.http.routers.n8n-ui.priority: "10" + traefik.http.routers.n8n-ui.middlewares: "${TRAEFIK_AUTH_MIDDLEWARE}" + + traefik.http.routers.n8n-webhook.rule: "Host(`${N8N_DOMAIN}`) && (PathPrefix(`/webhook`) || PathPrefix(`/webhook-test`))" + traefik.http.routers.n8n-webhook.entrypoints: "${TRAEFIK_ENTRYPOINT_SECURE}" + traefik.http.routers.n8n-webhook.tls: "true" + traefik.http.routers.n8n-webhook.tls.certresolver: "${TRAEFIK_CERTRESOLVER}" + traefik.http.routers.n8n-webhook.service: "n8n" + traefik.http.routers.n8n-webhook.priority: "20" + + traefik.http.services.n8n.loadbalancer.server.port: "${N8N_PORT}" + + n8n-db: + image: postgres:16 + restart: unless-stopped + environment: + - POSTGRES_USER=${POSTGRES_USER} + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} + - POSTGRES_DB=${POSTGRES_DB} + volumes: + - ${N8N_DB_DATA_PATH}:/var/lib/postgresql/data:Z + networks: + - n8n + +networks: + proxy: + external: true + n8n: + driver: bridge + diff --git a/n8n/stack.env b/n8n/stack.env new file mode 100644 index 0000000..e3738f9 --- /dev/null +++ b/n8n/stack.env @@ -0,0 +1,36 @@ +##### n8n - Base de datos ##### +N8N_DB_TYPE= +N8N_DB_HOST= +N8N_DB_PORT= +N8N_DB_NAME= +N8N_DB_USER= +N8N_DB_PASSWORD= + +##### n8n - Servidor / dominio ##### +N8N_HOST= +N8N_PORT= +N8N_PROTOCOL= +N8N_WEBHOOK_URL= + +N8N_TIMEZONE= + +# Genera una nueva con: openssl rand -hex 32 +N8N_ENCRYPTION_KEY= + +N8N_NODE_ENV= +N8N_DIAGNOSTICS_ENABLED= + +##### PostgreSQL interno ##### +POSTGRES_USER= +POSTGRES_PASSWORD= +POSTGRES_DB= + +# Ruta en el host para los datos de Postgres (relativa o absoluta) +N8N_DB_DATA_PATH= + +##### Traefik ##### +N8N_DOMAIN= +TRAEFIK_ENTRYPOINT_SECURE= +TRAEFIK_CERTRESOLVER= +TRAEFIK_AUTH_MIDDLEWARE= +