11 changed files with 302 additions and 0 deletions
@ -0,0 +1,19 @@ |
|||
# Folder where data should be saved |
|||
DATA_FOLDER=/root/n8n/ |
|||
|
|||
# The top level domain to serve from |
|||
DOMAIN_NAME=example.com |
|||
|
|||
# The subfolder to serve from |
|||
SUBFOLDER=app1 |
|||
N8N_PATH=/app1/ |
|||
|
|||
# DOMAIN_NAME and SUBDOMAIN combined decide where n8n will be reachable from |
|||
# above example would result in: https://example.com/n8n/ |
|||
|
|||
# Optional timezone to set which gets used by Cron-Node by default |
|||
# If not set New York time will be used |
|||
GENERIC_TIMEZONE=Europe/Berlin |
|||
|
|||
# The email address to use for the SSL certificate creation |
|||
SSL_EMAIL=[email protected] |
@ -0,0 +1,20 @@ |
|||
# n8n on Subfolder with SSL |
|||
|
|||
Starts n8n and deploys it on a subfolder |
|||
|
|||
## Start |
|||
|
|||
To start n8n in a subfolder simply start docker-compose by executing the following |
|||
command in the current folder. |
|||
|
|||
**IMPORTANT:** But before you do that change the default users and passwords in the `.env` file! |
|||
|
|||
``` |
|||
docker-compose up -d |
|||
``` |
|||
|
|||
To stop it execute: |
|||
|
|||
``` |
|||
docker-compose stop |
|||
``` |
@ -0,0 +1,62 @@ |
|||
version: '3' |
|||
|
|||
services: |
|||
traefik: |
|||
image: 'traefik' |
|||
command: |
|||
- '--api=true' |
|||
- '--api.insecure=true' |
|||
- '--api.dashboard=true' |
|||
- '--providers.docker=true' |
|||
- '--providers.docker.exposedbydefault=false' |
|||
- '--entrypoints.websecure.address=:443' |
|||
- '--certificatesresolvers.mytlschallenge.acme.tlschallenge=true' |
|||
- '--certificatesresolvers.mytlschallenge.acme.email=${SSL_EMAIL}' |
|||
- '--certificatesresolvers.mytlschallenge.acme.storage=/letsencrypt/acme.json' |
|||
ports: |
|||
- '443:443' |
|||
- '80:80' |
|||
volumes: |
|||
- ${DATA_FOLDER}/letsencrypt:/letsencrypt |
|||
- /var/run/docker.sock:/var/run/docker.sock:ro |
|||
|
|||
initContainer: |
|||
image: busybox |
|||
command: ['sh', '-c', 'chown -R 1000:1000 /home/node/.n8n'] |
|||
volumes: |
|||
- ${DATA_FOLDER}/.n8n:/home/node/.n8n |
|||
|
|||
n8n: |
|||
image: docker.n8n.io/n8nio/n8n |
|||
ports: |
|||
- '127.0.0.1:5678:5678' |
|||
labels: |
|||
- traefik.enable=true |
|||
- traefik.http.routers.n8n.rule=Host(`${DOMAIN_NAME}`) |
|||
- traefik.http.routers.n8n.tls=true |
|||
- traefik.http.routers.n8n.entrypoints=websecure |
|||
- 'traefik.http.routers.n8n.rule=PathPrefix(`/${SUBFOLDER}{regex:$$|/.*}`)' |
|||
- 'traefik.http.middlewares.n8n-stripprefix.stripprefix.prefixes=/${SUBFOLDER}' |
|||
- 'traefik.http.routers.n8n.middlewares=n8n-stripprefix' |
|||
- traefik.http.routers.n8n.tls.certresolver=mytlschallenge |
|||
- traefik.http.middlewares.n8n.headers.SSLRedirect=true |
|||
- traefik.http.middlewares.n8n.headers.STSSeconds=315360000 |
|||
- traefik.http.middlewares.n8n.headers.browserXSSFilter=true |
|||
- traefik.http.middlewares.n8n.headers.contentTypeNosniff=true |
|||
- traefik.http.middlewares.n8n.headers.forceSTSHeader=true |
|||
- traefik.http.middlewares.n8n.headers.SSLHost=${DOMAIN_NAME} |
|||
- traefik.http.middlewares.n8n.headers.STSIncludeSubdomains=true |
|||
- traefik.http.middlewares.n8n.headers.STSPreload=true |
|||
environment: |
|||
- N8N_HOST=${DOMAIN_NAME} |
|||
- N8N_PORT=5678 |
|||
- N8N_PROTOCOL=https |
|||
- NODE_ENV=production |
|||
- N8N_PATH |
|||
- WEBHOOK_URL=https://${DOMAIN_NAME}${N8N_PATH} |
|||
volumes: |
|||
- /var/run/docker.sock:/var/run/docker.sock |
|||
- ${DATA_FOLDER}/.n8n:/home/node/.n8n |
|||
depends_on: |
|||
initContainer: |
|||
condition: service_completed_successfully |
@ -0,0 +1,6 @@ |
|||
POSTGRES_USER=changeUser |
|||
POSTGRES_PASSWORD=changePassword |
|||
POSTGRES_DB=n8n |
|||
|
|||
POSTGRES_NON_ROOT_USER=changeUser |
|||
POSTGRES_NON_ROOT_PASSWORD=changePassword |
@ -0,0 +1,24 @@ |
|||
# n8n with PostgreSQL |
|||
|
|||
Starts n8n with PostgreSQL as database. |
|||
|
|||
## Start |
|||
|
|||
To start n8n with PostgreSQL simply start docker-compose by executing the following |
|||
command in the current folder. |
|||
|
|||
**IMPORTANT:** But before you do that change the default users and passwords in the [`.env`](.env) file! |
|||
|
|||
``` |
|||
docker-compose up -d |
|||
``` |
|||
|
|||
To stop it execute: |
|||
|
|||
``` |
|||
docker-compose stop |
|||
``` |
|||
|
|||
## Configuration |
|||
|
|||
The default name of the database, user and password for PostgreSQL can be changed in the [`.env`](.env) file in the current directory. |
@ -0,0 +1,44 @@ |
|||
version: '3.8' |
|||
|
|||
volumes: |
|||
db_storage: |
|||
n8n_storage: |
|||
|
|||
services: |
|||
postgres: |
|||
image: postgres:16 |
|||
restart: always |
|||
environment: |
|||
- POSTGRES_USER |
|||
- POSTGRES_PASSWORD |
|||
- POSTGRES_DB |
|||
- POSTGRES_NON_ROOT_USER |
|||
- POSTGRES_NON_ROOT_PASSWORD |
|||
volumes: |
|||
- db_storage:/var/lib/postgresql/data |
|||
- ./init-data.sh:/docker-entrypoint-initdb.d/init-data.sh |
|||
healthcheck: |
|||
test: ['CMD-SHELL', 'pg_isready -h localhost -U ${POSTGRES_USER} -d ${POSTGRES_DB}'] |
|||
interval: 5s |
|||
timeout: 5s |
|||
retries: 10 |
|||
|
|||
n8n: |
|||
image: docker.n8n.io/n8nio/n8n |
|||
restart: always |
|||
environment: |
|||
- DB_TYPE=postgresdb |
|||
- DB_POSTGRESDB_HOST=postgres |
|||
- DB_POSTGRESDB_PORT=5432 |
|||
- DB_POSTGRESDB_DATABASE=${POSTGRES_DB} |
|||
- DB_POSTGRESDB_USER=${POSTGRES_NON_ROOT_USER} |
|||
- DB_POSTGRESDB_PASSWORD=${POSTGRES_NON_ROOT_PASSWORD} |
|||
ports: |
|||
- 5678:5678 |
|||
links: |
|||
- postgres |
|||
volumes: |
|||
- n8n_storage:/home/node/.n8n |
|||
depends_on: |
|||
postgres: |
|||
condition: service_healthy |
@ -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 |
@ -0,0 +1,6 @@ |
|||
POSTGRES_USER=changeUser |
|||
POSTGRES_PASSWORD=changePassword |
|||
POSTGRES_DB=n8n |
|||
|
|||
POSTGRES_NON_ROOT_USER=changeUser |
|||
POSTGRES_NON_ROOT_PASSWORD=changePassword |
@ -0,0 +1,24 @@ |
|||
# n8n with PostgreSQL and Worker |
|||
|
|||
Starts n8n with PostgreSQL as database, and the Worker as a separate container. |
|||
|
|||
## Start |
|||
|
|||
To start n8n simply start docker-compose by executing the following |
|||
command in the current folder. |
|||
|
|||
**IMPORTANT:** But before you do that change the default users and passwords in the [`.env`](.env) file! |
|||
|
|||
``` |
|||
docker-compose up -d |
|||
``` |
|||
|
|||
To stop it execute: |
|||
|
|||
``` |
|||
docker-compose stop |
|||
``` |
|||
|
|||
## Configuration |
|||
|
|||
The default name of the database, user and password for PostgreSQL can be changed in the [`.env`](.env) file in the current directory. |
@ -0,0 +1,71 @@ |
|||
version: '3.8' |
|||
|
|||
volumes: |
|||
db_storage: |
|||
n8n_storage: |
|||
redis_storage: |
|||
|
|||
x-shared: &shared |
|||
restart: always |
|||
image: docker.n8n.io/n8nio/n8n |
|||
environment: |
|||
- DB_TYPE=postgresdb |
|||
- DB_POSTGRESDB_HOST=postgres |
|||
- DB_POSTGRESDB_PORT=5432 |
|||
- DB_POSTGRESDB_DATABASE=${POSTGRES_DB} |
|||
- DB_POSTGRESDB_USER=${POSTGRES_NON_ROOT_USER} |
|||
- DB_POSTGRESDB_PASSWORD=${POSTGRES_NON_ROOT_PASSWORD} |
|||
- EXECUTIONS_MODE=queue |
|||
- QUEUE_BULL_REDIS_HOST=redis |
|||
- QUEUE_HEALTH_CHECK_ACTIVE=true |
|||
links: |
|||
- postgres |
|||
- redis |
|||
volumes: |
|||
- n8n_storage:/home/node/.n8n |
|||
depends_on: |
|||
redis: |
|||
condition: service_healthy |
|||
postgres: |
|||
condition: service_healthy |
|||
|
|||
services: |
|||
postgres: |
|||
image: postgres:16 |
|||
restart: always |
|||
environment: |
|||
- POSTGRES_USER |
|||
- POSTGRES_PASSWORD |
|||
- POSTGRES_DB |
|||
- POSTGRES_NON_ROOT_USER |
|||
- POSTGRES_NON_ROOT_PASSWORD |
|||
volumes: |
|||
- db_storage:/var/lib/postgresql/data |
|||
- ./init-data.sh:/docker-entrypoint-initdb.d/init-data.sh |
|||
healthcheck: |
|||
test: ['CMD-SHELL', 'pg_isready -h localhost -U ${POSTGRES_USER} -d ${POSTGRES_DB}'] |
|||
interval: 5s |
|||
timeout: 5s |
|||
retries: 10 |
|||
|
|||
redis: |
|||
image: redis:6-alpine |
|||
restart: always |
|||
volumes: |
|||
- redis_storage:/data |
|||
healthcheck: |
|||
test: ['CMD', 'redis-cli', 'ping'] |
|||
interval: 5s |
|||
timeout: 5s |
|||
retries: 10 |
|||
|
|||
n8n: |
|||
<<: *shared |
|||
ports: |
|||
- 5678:5678 |
|||
|
|||
n8n-worker: |
|||
<<: *shared |
|||
command: worker |
|||
depends_on: |
|||
- n8n |
@ -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 |
Loading…
Reference in new issue