diff --git a/stack.production.yml b/stack.production.yml index f50502e..c15fab1 100644 --- a/stack.production.yml +++ b/stack.production.yml @@ -20,6 +20,18 @@ services: order: stop-first networks: - traefik + environment: + - DB_TYPE=postgresdb + - DB_POSTGRESDB_HOST=n8n-db + - DB_POSTGRESDB_DATABASE=n8n + - DB_POSTGRESDB_USER=n8n + - DB_POSTGRESDB_PASSWORD=${N8N_DB_PASSWORD} + - N8N_HOST=${N8N_HOST:-n8n.nixc.us} + - N8N_PORT=5678 + - N8N_PROTOCOL=${N8N_PROTOCOL:-https} + - NODE_ENV=production + volumes: + - n8n_data:/home/node/.n8n labels: - traefik.enable=true - traefik.http.routers.production_n8n.rule=Host(n8n.nixc.us) @@ -28,33 +40,29 @@ services: - traefik.http.routers.production_n8n.tls.certresolver=letsencryptresolver - traefik.http.services.production_n8n.loadbalancer.server.port=5678 - traefik.http.routers.production_n8n.middlewares=secure-headers + depends_on: + - n8n-db - midtownplaydio: - image: git.nixc.us/nixius/midtownplaydio:production - networks: - - traefik + n8n-db: + image: postgres:15-alpine deploy: replicas: 1 + restart_policy: + condition: on-failure placement: constraints: - node.hostname == macmini1 - labels: - traefik.enable: true - traefik.http.routers.production_midtownplaydio.rule: Host(midtownplaydio.nixc.us) - traefik.http.routers.production_midtownplaydio.entrypoints: websecure - traefik.http.routers.production_midtownplaydio.tls: true - traefik.http.routers.production_midtownplaydio.tls.certresolver: letsencryptresolver - traefik.http.routers.production_midtownplaydio.middlewares: secure-headers - traefik.http.services.production_midtownplaydio.loadbalancer.server.port: 3000 - traefik.docker.network: traefik + environment: + - POSTGRES_DB=n8n + - POSTGRES_USER=n8n + - POSTGRES_PASSWORD=${N8N_DB_PASSWORD} + volumes: + - n8n_postgres:/var/lib/postgresql/data + networks: + - traefik - # Security headers middleware - traefik.http.middlewares.secure-headers.headers.stsSeconds: 63072000 - traefik.http.middlewares.secure-headers.headers.stsIncludeSubdomains: true - traefik.http.middlewares.secure-headers.headers.stsPreload: true - traefik.http.middlewares.secure-headers.headers.forceSTSHeader: true - traefik.http.middlewares.secure-headers.headers.frameDeny: true - traefik.http.middlewares.secure-headers.headers.contentTypeNosniff: true - traefik.http.middlewares.secure-headers.headers.browserXssFilter: true - traefik.http.middlewares.secure-headers.headers.referrerPolicy: no-referrer - traefik.http.middlewares.secure-headers.headers.featurePolicy: camera none; geolocation none; microphone none; payment none; usb none; vr none +volumes: + n8n_data: + driver: local + n8n_postgres: + driver: local