From c6831f0aa72b177c2a0f1c3163560651da8da6aa Mon Sep 17 00:00:00 2001 From: Kevin Heyer Date: Tue, 18 Mar 2025 18:18:35 +0000 Subject: [PATCH 1/2] add Container N8N --- n8n/.env-example | 15 +++++++++ n8n/docker-compose.yml | 71 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 n8n/.env-example create mode 100644 n8n/docker-compose.yml diff --git a/n8n/.env-example b/n8n/.env-example new file mode 100644 index 0000000..b3808ac --- /dev/null +++ b/n8n/.env-example @@ -0,0 +1,15 @@ +# N8N Version (Standard: latest) +N8N_VERSION=latest + +# N8N PostgreSQL Version +N8N_POSTGRES_VERSION=16 + +# N8N Domain +N8N_DOMAIN=n8n.example.com + +# N8N Database Config +N8N_POSTGRES_USER=changeUser +N8N_POSTGRES_PASSWORD=changePassword +N8N_POSTGRES_DB=n8n +N8N_POSTGRES_NON_ROOT_USER=changeUser +N8N_POSTGRES_NON_ROOT_PASSWORD=changePassword \ No newline at end of file diff --git a/n8n/docker-compose.yml b/n8n/docker-compose.yml new file mode 100644 index 0000000..38f2fab --- /dev/null +++ b/n8n/docker-compose.yml @@ -0,0 +1,71 @@ +--- +services: + postgres: + image: postgres:${N8N_POSTGRES_VERSION:-16} + container_name: n8n_db + networks: + - n8n + restart: always + environment: + - POSTGRES_USER + - POSTGRES_PASSWORD + - POSTGRES_DB + - POSTGRES_NON_ROOT_USER + - POSTGRES_NON_ROOT_PASSWORD + volumes: + - ./data/db:/var/lib/postgresql/data + - ./init-data.sh:/docker-entrypoint-initdb.d/init-data.sh + healthcheck: + test: ['CMD-SHELL', 'pg_isready -h localhost -U ${N8N_POSTGRES_USER} -d ${N8N_POSTGRES_DB}'] + interval: 5s + timeout: 5s + retries: 10 + + n8n: + image: docker.n8n.io/n8nio/n8n:${N8N_VERSION:-latest} + restart: always + container_name: n8n + networks: + - traefik + - n8n + environment: + - DB_TYPE=postgresdb + - DB_POSTGRESDB_HOST=postgres + - DB_POSTGRESDB_PORT=5432 + - DB_POSTGRESDB_DATABASE=${N8N_POSTGRES_DB} + - DB_POSTGRESDB_USER=${N8N_POSTGRES_NON_ROOT_USER} + - DB_POSTGRESDB_PASSWORD=${N8N_POSTGRES_NON_ROOT_PASSWORD} + - N8N_HOST=${N8N_DOMAIN:?error} + - N8N_PORT=5678 + - N8N_PROTOCOL=https + - NODE_ENV=production + - N8N_TRUST_PROXY=true + - WEBHOOK_URL=https://${N8N_DOMAIN:?error} + - GENERIC_TIMEZONE=Europe/Berlin + - TZ=Europe/Berlin + links: + - postgres + volumes: + - ./data/n8n:/home/node/.n8n + labels: + - "traefik.enable=true" + - "traefik.docker.network=traefik" + - "traefik.http.routers.n8n.entrypoints=http" + - "traefik.http.routers.n8n.rule=Host(`${N8N_DOMAIN:?error}`)" + - "traefik.http.middlewares.n8n-https-redirect.redirectscheme.scheme=https" + - "traefik.http.routers.n8n.middlewares=n8n-https-redirect" + - "traefik.http.routers.n8n-secure.entrypoints=https" + - "traefik.http.routers.n8n-secure.rule=Host(`${N8N_DOMAIN:?error}`)" + - "traefik.http.routers.n8n-secure.tls=true" + - "traefik.http.routers.n8n-secure.service=n8n" + - "traefik.http.services.n8n.loadbalancer.server.port=5678" + + depends_on: + postgres: + condition: service_healthy + +networks: + traefik: + external: true + n8n: + driver: bridge \ No newline at end of file -- 2.45.3 From 63728e51febb07ab88e0a255036ae85238feef40 Mon Sep 17 00:00:00 2001 From: Kevin Heyer Date: Tue, 18 Mar 2025 18:59:57 +0000 Subject: [PATCH 2/2] add init-data and change n8n from bind-mount to volume --- n8n/docker-compose.yml | 17 ++++++++++------- n8n/init-data.sh | 13 +++++++++++++ 2 files changed, 23 insertions(+), 7 deletions(-) create mode 100644 n8n/init-data.sh diff --git a/n8n/docker-compose.yml b/n8n/docker-compose.yml index 38f2fab..09a58b6 100644 --- a/n8n/docker-compose.yml +++ b/n8n/docker-compose.yml @@ -7,11 +7,11 @@ services: - n8n restart: always environment: - - POSTGRES_USER - - POSTGRES_PASSWORD - - POSTGRES_DB - - POSTGRES_NON_ROOT_USER - - POSTGRES_NON_ROOT_PASSWORD + - POSTGRES_USER=${N8N_POSTGRES_USER} + - POSTGRES_PASSWORD=${N8N_POSTGRES_PASSWORD} + - POSTGRES_DB=${N8N_POSTGRES_DB} + - POSTGRES_NON_ROOT_USER=${N8N_POSTGRES_NON_ROOT_USER} + - POSTGRES_NON_ROOT_PASSWORD=${N8N_POSTGRES_NON_ROOT_PASSWORD} volumes: - ./data/db:/var/lib/postgresql/data - ./init-data.sh:/docker-entrypoint-initdb.d/init-data.sh @@ -46,7 +46,7 @@ services: links: - postgres volumes: - - ./data/n8n:/home/node/.n8n + - data:/home/node/.n8n labels: - "traefik.enable=true" - "traefik.docker.network=traefik" @@ -68,4 +68,7 @@ networks: traefik: external: true n8n: - driver: bridge \ No newline at end of file + driver: bridge + +volumes: + data: \ No newline at end of file diff --git a/n8n/init-data.sh b/n8n/init-data.sh new file mode 100644 index 0000000..7f2e382 --- /dev/null +++ b/n8n/init-data.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e; + + +if [ -n "${POSTGRES_NON_ROOT_USER:-}" ] && [ -n "${POSTGRES_NON_ROOT_PASSWORD:-}" ]; then + psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL + CREATE USER ${POSTGRES_NON_ROOT_USER} WITH PASSWORD '${POSTGRES_NON_ROOT_PASSWORD}'; + GRANT ALL PRIVILEGES ON DATABASE ${POSTGRES_DB} TO ${POSTGRES_NON_ROOT_USER}; + GRANT CREATE ON SCHEMA public TO ${POSTGRES_NON_ROOT_USER}; + EOSQL +else + echo "SETUP INFO: No Environment variables given!" +fi \ No newline at end of file -- 2.45.3