From 7a83f6a12ae08124ee8955b7ee39445aef9e0ebc Mon Sep 17 00:00:00 2001 From: hcornet Date: Tue, 11 Feb 2025 20:35:24 +0100 Subject: [PATCH] first sync --- .env | 7 +++- docker-compose.yml | 85 ++++++++++++++++++++++++++++++++++------------ init-data.sh | 13 +++++++ 3 files changed, 83 insertions(+), 22 deletions(-) create mode 100644 init-data.sh diff --git a/.env b/.env index 630b323..b407ebb 100644 --- a/.env +++ b/.env @@ -1 +1,6 @@ -# Template \ No newline at end of file +# Postgre Variables +POSTGRES_IMAGE_TAG=postgres:15.6-alpine +POSTGRE_DB_NAME=n8n_db +POSTGRE_DB_USER=n8n_user +POSTGRE_DB_PASSWORD=P@ssword!Here!123456 +POSTGRE_DB_DATA=/var/lib/postgresql/data/n8n diff --git a/docker-compose.yml b/docker-compose.yml index 4054566..c352c4c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,41 +2,84 @@ networks: traefik_front_network: external: true - back_network_: + back_network_n8n: driver: bridge attachable: true #### SERVICES services: -### hello_world - hello_world: - container_name: gitea-app - hostname: gitea-app - image: hello-world +### n8n + n8n: + container_name: n8n-app + hostname: n8n-app + image: docker.n8n.io/n8nio/n8n:latest environment: + - DB_TYPE=postgresdb + - DB_POSTGRESDB_HOST=postgres + - DB_POSTGRESDB_PORT=5432 + - DB_POSTGRESDB_DATABASE=${POSTGRE_DB_NAME} + - DB_POSTGRESDB_USER=${POSTGRE_DB_USER} + - DB_POSTGRESDB_PASSWORD=${POSTGRE_DB_PASSWORD} + - N8N_HOST=tips-of-mine.com + - N8N_PORT=5678 + - N8N_PROTOCOL=http + - NODE_ENV=production + - WEBHOOK_URL=https://n8n.tips-of-mine.com/ + - "TZ=Europe/Paris" restart: always networks: -# - back_network_gitea + - back_network_n8n - traefik_front_network volumes: + - n8n:/home/node/.n8n + depends_on: + postgres: + condition: service_healthy labels: + - "com.centurylinklabs.watchtower.enable=true" - "traefik.enable=true" - "traefik.docker.network=traefik_front_network" # HTTP - - "traefik.http.routers.hello-world-http.rule=Host(`hello-world.tips-of-mine.com`)" - - "traefik.http.routers.hello-world-http.entrypoints=http" - - "traefik.http.routers.hello-world-http.priority=49" + - "traefik.http.routers.n8n-http.rule=Host(`n8n.tips-of-mine.com`)" + - "traefik.http.routers.n8n-http.entrypoints=http" + - "traefik.http.routers.n8n-http.priority=49" # HTTPS - - "traefik.http.routers.hello-world-https.rule=Host(`hello-world.tips-of-mine.com`)" - - "traefik.http.routers.hello-world-https.entrypoints=https" - - "traefik.http.routers.hello-world-https.tls=true" - - "traefik.http.routers.hello-world-https.priority=50" - - "traefik.http.routers.gitea.service=gitea-https-service" + - "traefik.http.routers.n8n-https.rule=Host(`n8n.tips-of-mine.com`)" + - "traefik.http.routers.n8n-https.entrypoints=https" + - "traefik.http.routers.n8n-https.tls=true" + - "traefik.http.routers.n8n-https.priority=50" + - "traefik.http.routers.n8n.service=n8n-https-service" # Middleware # Service -# - "traefik.http.services.gitea-https-service.loadbalancer.server.port=3000" -# - "traefik.http.services.gitea-https-service.loadbalancer.server.scheme=https" -# - "traefik.http.services.gitea-https-service.loadbalancer.healthcheck.hostname=gitea.traefik.me" -# - "traefik.http.services.gitea-https-service.loadbalancer.healthcheck.method=foobar" -# - "traefik.http.services.gitea-https-service.loadbalancer.healthcheck.timeout=10" -# - "traefik.http.services.gitea-https-service.loadbalancer.healthcheck.interval=30" + - "traefik.http.services.n8n-https-service.loadbalancer.server.port=5678" +# - "traefik.http.services.n8n-https-service.loadbalancer.server.scheme=https" +# - "traefik.http.services.n8n-https-service.loadbalancer.healthcheck.hostname=n8n.tips-of-mine.com" +# - "traefik.http.services.n8n-https-service.loadbalancer.healthcheck.method=foobar" +# - "traefik.http.services.n8n-https-service.loadbalancer.healthcheck.timeout=10" +# - "traefik.http.services.n8n-https-service.loadbalancer.healthcheck.interval=30" + +### postgres + postgres: + container_name: n8n-postgres + hostname: n8n-postgres + image: ${POSTGRES_IMAGE_TAG} + environment: + PGDATA: ${POSTGRE_DB_DATA} + POSTGRES_DB: ${POSTGRE_DB_NAME} + POSTGRES_PASSWORD: ${POSTGRE_DB_PASSWORD} + POSTGRES_USER: ${POSTGRE_DB_USER} + TZ: Europe/Paris + restart: unless-stopped + networks: + - back_network_n8n + volumes: + - ./data:/var/lib/postgresql/data:rw + - ./init-data.sh:/docker-entrypoint-initdb.d/init-data.sh + healthcheck: + test: [ "CMD", "pg_isready", "-q", "-d", "${POSTGRE_DB_NAME}", "-U", "${POSTGRE_DB_USER}" ] + interval: 10s + timeout: 5s + retries: 3 + start_period: 60s + labels: + - "com.centurylinklabs.watchtower.enable=true" diff --git a/init-data.sh b/init-data.sh new file mode 100644 index 0000000..7d41010 --- /dev/null +++ b/init-data.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e; + + +if [ -n "${POSTGRE_DB_PASSWORD:-}" ] && [ -n "${POSTGRE_DB_PASSWORD:-}" ]; then + psql -v ON_ERROR_STOP=1 --username "$POSTGRE_DB_USER" --dbname "$POSTGRE_DB_NAME" <<-EOSQL + CREATE USER ${POSTGRE_DB_PASSWORD} WITH PASSWORD '${POSTGRE_DB_PASSWORD}'; + GRANT ALL PRIVILEGES ON DATABASE ${POSTGRE_DB_NAME} TO ${POSTGRE_DB_PASSWORD}; + GRANT CREATE ON SCHEMA public TO ${POSTGRE_DB_PASSWORD}; + EOSQL +else + echo "SETUP INFO: No Environment variables given!" +fi \ No newline at end of file