diff --git a/n8n/README.md b/n8n/README.md index 8740c06..7eab9f8 100644 --- a/n8n/README.md +++ b/n8n/README.md @@ -28,12 +28,12 @@ Este stack despliega n8n con: - Repository URL: `` - Repository reference: `main` - Compose path: `n8n/docker-compose.yml` -5. Carga el archivo de variables de entorno: `n8n/stack.env` +5. Copia `n8n/stack.env` a `n8n/.env` y carga `n8n/.env` como archivo de variables de entorno 6. Haz clic en **Deploy the stack** ### Variables de Entorno Importantes -Edita el archivo `stack.env`: +Edita el archivo `.env`: ```env # Base de datos PostgreSQL @@ -235,7 +235,7 @@ Usa el nodo **Schedule Trigger**: docker logs n8n-pg ``` -3. Verifica las credenciales en `stack.env` +3. Verifica las credenciales en `.env` ### Workflows se ejecutan lentamente @@ -246,7 +246,7 @@ Usa el nodo **Schedule Trigger**: ### Error "Execution timed out" -Aumenta el timeout en `stack.env`: +Aumenta el timeout en `.env`: ```env EXECUTIONS_TIMEOUT=600 @@ -312,8 +312,8 @@ cat n8n_backup_YYYYMMDD.sql | docker exec -i n8n-pg psql -U n8n n8n Guarda `N8N_ENCRYPTION_KEY` en un lugar seguro: ```bash -# Extraer del stack.env -grep N8N_ENCRYPTION_KEY stack.env > encryption_key_backup.txt +# Extraer del .env +grep N8N_ENCRYPTION_KEY .env > encryption_key_backup.txt # Guardar en un gestor de contraseñas o vault ``` @@ -330,7 +330,7 @@ También puedes exportar workflows manualmente: ## 🔄 Actualizaciones 1. Haz **backup** de la base de datos y la clave de cifrado -2. Actualiza en `stack.env`: +2. Actualiza en `.env`: ```env N8N_IMAGE=n8nio/n8n:latest ``` diff --git a/n8n/docker-compose.yml b/n8n/docker-compose.yml index 57bde71..f7b54cf 100644 --- a/n8n/docker-compose.yml +++ b/n8n/docker-compose.yml @@ -12,10 +12,10 @@ services: DB_POSTGRESDB_USER: ${N8N_DB_USER} DB_POSTGRESDB_PASSWORD: ${N8N_DB_PASSWORD} - N8N_HOST: ${SERVICE_FQDN_N8N} + N8N_HOST: ${N8N_HOST} N8N_PORT: ${N8N_PORT} N8N_PROTOCOL: ${N8N_PROTOCOL} - WEBHOOK_URL: https://${SERVICE_FQDN_N8N}/ + WEBHOOK_URL: ${N8N_WEBHOOK_URL} GENERIC_TIMEZONE: ${N8N_TIMEZONE} N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY} @@ -38,8 +38,24 @@ services: networks: - n8n - proxy + - mail_internal labels: - traefik.http.services.n8n.loadbalancer.server.port: "5678" + 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: "crowdsec-bouncer@file,${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 @@ -51,7 +67,7 @@ services: POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: ${POSTGRES_DB} volumes: - - /opt/n8n/postgres:/var/lib/postgresql/data:Z + - ${N8N_DB_DATA_PATH}:/var/lib/postgresql/data:Z networks: - n8n @@ -60,3 +76,5 @@ networks: driver: bridge proxy: external: true + mail_internal: + external: true diff --git a/n8n/stack.env b/n8n/stack.env index 332085b..60a511a 100644 --- a/n8n/stack.env +++ b/n8n/stack.env @@ -4,36 +4,44 @@ N8N_DB_HOST=n8n-db N8N_DB_PORT=5432 N8N_DB_NAME=n8n N8N_DB_USER=n8n -N8N_DB_PASSWORD= +N8N_DB_PASSWORD=change-me ##### n8n - Servidor / dominio ##### N8N_HOST= N8N_PORT=5678 N8N_PROTOCOL=https -N8N_WEBHOOK_URL= +N8N_WEBHOOK_URL=https://app.example.com N8N_TIMEZONE=Europe/Madrid # Genera una nueva con: openssl rand -hex 32 -N8N_ENCRYPTION_KEY= +N8N_ENCRYPTION_KEY=change-me-generate-with-openssl-rand-hex-32 N8N_NODE_ENV=production N8N_DIAGNOSTICS_ENABLED=false ##### n8n - Correo (SMTP) ##### N8N_EMAIL_MODE=smtp -N8N_SMTP_HOST= +N8N_SMTP_HOST=mail-relay N8N_SMTP_PORT=587 N8N_SMTP_USER= N8N_SMTP_PASS= -N8N_SMTP_SENDER=n8n@thehomelesssherlock.com +N8N_SMTP_SENDER=admin@example.com N8N_SMTP_SSL=false N8N_SMTP_STARTTLS=false ##### PostgreSQL interno ##### POSTGRES_USER=n8n -POSTGRES_PASSWORD= +POSTGRES_PASSWORD=change-me POSTGRES_DB=n8n # Ruta en el host para los datos de Postgres N8N_DB_DATA_PATH=/opt/n8n/postgres + +##### Traefik ##### +N8N_DOMAIN=app.example.com +TRAEFIK_ENTRYPOINT_SECURE=websecure +TRAEFIK_CERTRESOLVER=letsencrypt +TRAEFIK_AUTH_MIDDLEWARE=ths-authentik@docker +SERVICE_URL_N8N=https://app.example.com +SERVICE_FQDN_N8N=app.example.com