From da957caf8119c20c239ada3a31cf33075febb14d Mon Sep 17 00:00:00 2001 From: Cassowary Date: Tue, 9 Apr 2024 09:31:12 -0700 Subject: [PATCH] Split postgres support into separate compose so that it defaults to sqlite instead --- .env.sample | 6 +++-- compose.postgres.yml | 57 ++++++++++++++++++++++++++++++++++++++++++++ compose.yml | 51 --------------------------------------- 3 files changed, 61 insertions(+), 53 deletions(-) create mode 100644 compose.postgres.yml diff --git a/.env.sample b/.env.sample index 97c4b7e..23c473f 100644 --- a/.env.sample +++ b/.env.sample @@ -6,8 +6,6 @@ DOMAIN=n8n.example.com #EXTRA_DOMAINS=', `www.n8n.example.com`' LETS_ENCRYPT_ENV=production -SECRET_DB_PASSWORD_VERSION=v1 - # Change to `true` to enable sending "anonymous" telemetry data to n8n # https://docs.n8n.io/reference/data-collection/ N8N_DIAGNOSTICS_ENABLED=false @@ -31,3 +29,7 @@ COMPOSE_FILE="compose.yml" #N8N_BASIC_AUTH_ACTIVE=true #N8N_BASIC_AUTH_USER=username #SECRET_ADMIN_PASSWORD_VERSION=v1 + +# Use Postgres instead of SQLite +#COMPOSE_FILE="$COMPOSE_FILE:compose.postgres.yml" +#SECRET_DB_PASSWORD_VERSION=v1 diff --git a/compose.postgres.yml b/compose.postgres.yml new file mode 100644 index 0000000..4285ded --- /dev/null +++ b/compose.postgres.yml @@ -0,0 +1,57 @@ +# Compose for PostGres mode instead of the default sqlite mode. +services: + app: + environment: + - DB_TYPE=postgresdb + - DB_POSTGRESDB_HOST=${STACK_NAME}_db + - DB_POSTGRESDB_PORT=5432 + - DB_POSTGRESDB_DATABASE=n8n + - DB_POSTGRESDB_USER=root + - DB_POSTGRESDB_PASSWORD_FILE=/run/secrets/db_password + depends_on: + - db + secrets: + - db_password + + db: + image: postgres:16 + networks: + - internal_network + environment: + - POSTGRES_USER=root + - POSTGRES_PASSWORD_FILE=/run/secrets/db_password + - POSTGRES_DB=n8n + configs: + - source: db_entrypoint + target: /docker-entrypoint.sh + mode: 0555 + secrets: + - db_password + healthcheck: + test: ["CMD", "pg_isready", "-U", "root", "-d", "n8n"] + volumes: + - 'postgresql_data:/var/lib/postgresql/data' + entrypoint: /docker-entrypoint.sh + deploy: + labels: + backupbot.backup: "true" + backupbot.backup.pre-hook: "bash -c 'PGPASSWORD=$$(cat $${POSTGRES_PASSWORD_FILE}) pg_dump -U $${POSTGRES_USER} $${POSTGRES_DB} > /tmp/backup.sql'" + backupbot.backup.post-hook: "rm -rf /tmp/backup.sql" + backupbot.backup.path: "/tmp/backup.sql" + +secrets: + # db_non_root_password: + # external: true + # name: ${STACK_NAME}_db_non_root_password_${SECRET_DB_NON_ROOT_PASSWORD_VERSION} + db_password: + external: true + name: ${STACK_NAME}_db_password_${SECRET_DB_PASSWORD_VERSION} + +volumes: + postgresql_data: + +configs: + db_entrypoint: + name: ${STACK_NAME}_db_entrypoint_${DB_ENTRYPOINT_VERSION} + file: entrypoint.postgres.sh.tmpl + template_driver: golang diff --git a/compose.yml b/compose.yml index e57a5f2..746e010 100644 --- a/compose.yml +++ b/compose.yml @@ -5,27 +5,17 @@ services: app: image: n8nio/n8n:0.237.0 environment: - - DB_TYPE=postgresdb - - DB_POSTGRESDB_HOST=${STACK_NAME}_db - - DB_POSTGRESDB_PORT=5432 - - DB_POSTGRESDB_DATABASE=n8n - - DB_POSTGRESDB_USER=root - - DB_POSTGRESDB_PASSWORD_FILE=/run/secrets/db_password - N8N_PERSONALIZATION_ENABLED - N8N_DIAGNOSTICS_ENABLED - N8N_USER_MANAGEMENT_DISABLED - N8N_BASIC_AUTH_ACTIVE=false - WEBHOOK_URL=https://${DOMAIN} - NODE_FUNCTION_ALLOW_EXTERNAL=moment - depends_on: - - db networks: - proxy - internal_network volumes: - n8n:/home/node/.n8n - secrets: - - db_password deploy: update_config: failure_action: rollback @@ -44,51 +34,10 @@ services: - "backupbot.backup=true" - "backupbot.backup.path=/home/node/.n8n" - db: - image: postgres:16 - networks: - - internal_network - environment: - - POSTGRES_USER=root - - POSTGRES_PASSWORD_FILE=/run/secrets/db_password - - POSTGRES_DB=n8n - configs: - - source: db_entrypoint - target: /docker-entrypoint.sh - mode: 0555 - secrets: - - db_password - healthcheck: - test: ["CMD", "pg_isready", "-U", "root", "-d", "n8n"] - volumes: - - 'postgresql_data:/var/lib/postgresql/data' - entrypoint: /docker-entrypoint.sh - deploy: - labels: - backupbot.backup: "true" - backupbot.backup.pre-hook: "bash -c 'PGPASSWORD=$$(cat $${POSTGRES_PASSWORD_FILE}) pg_dump -U $${POSTGRES_USER} $${POSTGRES_DB} > /tmp/backup.sql'" - backupbot.backup.post-hook: "rm -rf /tmp/backup.sql" - backupbot.backup.path: "/tmp/backup.sql" - -secrets: - # db_non_root_password: - # external: true - # name: ${STACK_NAME}_db_non_root_password_${SECRET_DB_NON_ROOT_PASSWORD_VERSION} - db_password: - external: true - name: ${STACK_NAME}_db_password_${SECRET_DB_PASSWORD_VERSION} - volumes: n8n: - postgresql_data: networks: proxy: external: true internal_network: - -configs: - db_entrypoint: - name: ${STACK_NAME}_db_entrypoint_${DB_ENTRYPOINT_VERSION} - file: entrypoint.postgres.sh.tmpl - template_driver: golang