From dd70ad3dbd0d5c044ccee8107c9851a379b69e08 Mon Sep 17 00:00:00 2001 From: whitney Date: Tue, 2 Sep 2025 15:36:39 -0700 Subject: [PATCH] Add n8n --- software/workflow/n8n/.env.example | 23 ++++++++++ software/workflow/n8n/.gitignore | 1 + software/workflow/n8n/README.md | 6 +++ software/workflow/n8n/docker-compose.yml | 54 ++++++++++++++++++++++++ 4 files changed, 84 insertions(+) create mode 100644 software/workflow/n8n/.env.example create mode 100644 software/workflow/n8n/.gitignore create mode 100644 software/workflow/n8n/README.md create mode 100644 software/workflow/n8n/docker-compose.yml diff --git a/software/workflow/n8n/.env.example b/software/workflow/n8n/.env.example new file mode 100644 index 0000000..e71848b --- /dev/null +++ b/software/workflow/n8n/.env.example @@ -0,0 +1,23 @@ +# n8n environment variables +N8N_HOST=n8n.example.com +N8N_PORT=5678 +WEBHOOK_TUNNEL_URL=https://n8n.example.com # if you want public webhooks + +# n8n encryption key +N8N_ENCRYPTION_KEY=1234567890abcdef1234567890abcdef + +# n8n user authentication +N8N_BASIC_AUTH_ACTIVE=true +N8N_BASIC_AUTH_USER=admin +N8N_BASIC_AUTH_PASSWORD=supersecretpassword + +# Database +DB_TYPE=postgresdb +DB_POSTGRESDB_HOST=db +DB_POSTGRESDB_PORT=5432 +DB_POSTGRESDB_DATABASE=n8n +DB_POSTGRESDB_USER=n8n +DB_POSTGRESDB_PASSWORD=n8npassword + +# Other settings +GENERIC_TIMEZONE=America/Los_Angeles diff --git a/software/workflow/n8n/.gitignore b/software/workflow/n8n/.gitignore new file mode 100644 index 0000000..4c49bd7 --- /dev/null +++ b/software/workflow/n8n/.gitignore @@ -0,0 +1 @@ +.env diff --git a/software/workflow/n8n/README.md b/software/workflow/n8n/README.md new file mode 100644 index 0000000..8c84ce0 --- /dev/null +++ b/software/workflow/n8n/README.md @@ -0,0 +1,6 @@ +# N8N +Workflow automation, selfhosted. See `https://github.com/n8n-io/n8n`. + +## Setup +1. After folder structure is created, first time setup will fail because we don't have access to the file system. + - give ownership to user 1000, or set a specific user for n8n to run as. diff --git a/software/workflow/n8n/docker-compose.yml b/software/workflow/n8n/docker-compose.yml new file mode 100644 index 0000000..03c509d --- /dev/null +++ b/software/workflow/n8n/docker-compose.yml @@ -0,0 +1,54 @@ +networks: + traefik: + external: true + n8n: + driver: bridge + +services: + n8n: + image: n8nio/n8n + container_name: n8n + restart: unless-stopped + networks: + - n8n + - traefik + environment: + - N8N_HOST=${N8N_HOST} + - N8N_PORT=${N8N_PORT} + - WEBHOOK_TUNNEL_URL=${WEBHOOK_TUNNEL_URL} + - N8N_BASIC_AUTH_ACTIVE=${N8N_BASIC_AUTH_ACTIVE} + - N8N_BASIC_AUTH_USER=${N8N_BASIC_AUTH_USER} + - N8N_BASIC_AUTH_PASSWORD=${N8N_BASIC_AUTH_PASSWORD} + - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY} + - DB_TYPE=${DB_TYPE} + - DB_POSTGRESDB_HOST=${DB_POSTGRESDB_HOST} + - DB_POSTGRESDB_PORT=${DB_POSTGRESDB_PORT} + - DB_POSTGRESDB_DATABASE=${DB_POSTGRESDB_DATABASE} + - DB_POSTGRESDB_USER=${DB_POSTGRESDB_USER} + - DB_POSTGRESDB_PASSWORD=${DB_POSTGRESDB_PASSWORD} + - GENERIC_TIMEZONE=${GENERIC_TIMEZONE} + volumes: + - /pwspool/software/n8n/.n8n:/home/node/.n8n + depends_on: + - db + labels: + - "traefik.enable=true" + - "traefik.http.routers.n8n.rule=Host(`n8n.whitney.rip`)" + - "traefik.http.routers.n8n.entrypoints=websecure" + - "traefik.http.routers.n8n.tls=true" + - "traefik.http.routers.n8n.tls.certresolver=lets-encrypt" + - "traefik.http.services.n8n.loadbalancer.server.port=5678" + + db: + image: postgres:15 + container_name: n8n-db + restart: unless-stopped + networks: + - n8n + environment: + POSTGRES_USER: ${DB_POSTGRESDB_USER} + POSTGRES_PASSWORD: ${DB_POSTGRESDB_PASSWORD} + POSTGRES_DB: ${DB_POSTGRESDB_DATABASE} + volumes: + - /pwspool/software/n8n/data:/var/lib/postgresql/data +