|
services: |
|
traefik: |
|
image: "traefik" |
|
restart: always |
|
command: |
|
- "--api.insecure=true" |
|
- "--providers.docker=true" |
|
- "--providers.docker.exposedbydefault=false" |
|
- "--entrypoints.web.address=:80" |
|
- "--entrypoints.web.http.redirections.entryPoint.to=websecure" |
|
- "--entrypoints.web.http.redirections.entrypoint.scheme=https" |
|
- "--entrypoints.websecure.address=:443" |
|
- "--certificatesresolvers.mytlschallenge.acme.tlschallenge=true" |
|
- "--certificatesresolvers.mytlschallenge.acme.email=${SSL_EMAIL}" |
|
- "--certificatesresolvers.mytlschallenge.acme.storage=/letsencrypt/acme.json" |
|
ports: |
|
- "80:80" |
|
- "443:443" |
|
volumes: |
|
- traefik_data:/letsencrypt |
|
- /var/run/docker.sock:/var/run/docker.sock:ro |
|
|
|
n8n: |
|
image: docker.n8n.io/n8nio/n8n |
|
network_mode: "service:gluetun" |
|
depends_on: |
|
- gluetun |
|
environment: |
|
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true |
|
- N8N_HOST=${SUBDOMAIN}.${DOMAIN_NAME} |
|
- N8N_PORT=5678 |
|
- N8N_PROTOCOL=https |
|
- N8N_RUNNERS_ENABLED=true |
|
- NODE_ENV=production |
|
- WEBHOOK_URL=https://${SUBDOMAIN}.${DOMAIN_NAME}/ |
|
- GENERIC_TIMEZONE=${GENERIC_TIMEZONE} |
|
- TZ=${GENERIC_TIMEZONE} |
|
volumes: |
|
- n8n_data:/home/node/.n8n |
|
- ./local-files:/files |
|
|
|
gluetun: |
|
image: qmcgaw/gluetun |
|
container_name: gluetun |
|
devices: |
|
- /dev/net/tun |
|
cap_add: |
|
- NET_ADMIN |
|
volumes: |
|
- ./vpn:/vpn |
|
ports: |
|
- 5678:5678 |
|
environment: |
|
- VPN_SERVICE_PROVIDER=custom |
|
- VPN_TYPE=openvpn |
|
- OPENVPN_CUSTOM_CONFIG=/vpn/config.ovpn |
|
- PORTS=5678 |
|
labels: |
|
- traefik.enable=true |
|
- traefik.http.routers.n8n.rule=Host(`${SUBDOMAIN}.${DOMAIN_NAME}`) |
|
- traefik.http.routers.n8n.tls=true |
|
- traefik.http.routers.n8n.entrypoints=web,websecure |
|
- 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 |
|
- traefik.http.routers.n8n.middlewares=n8n@docker |
|
|
|
volumes: |
|
n8n_data: |
|
traefik_data: |