networks: {% if docker_services_external_networks %} traefik: external: true {% if n8n_db_type | default('sqlite') == 'postgresql' %} n8n: external: true {% endif %} {% else %} traefik: name: traefik {% if n8n_db_type | default('sqlite') == 'postgresql' %} n8n: name: n8n {% endif %} {% endif %} volumes: {% if docker_services_external_volumes %} n8n__home_node_n8n: external: true {% if n8n_db_type | default('sqlite') == 'postgresql' %} n8n_db__var_lib_postgresql_data: external: true {% endif %} {% else %} n8n__home_node_n8n: name: n8n__home_node_n8n {% if n8n_db_type | default('sqlite') == 'postgresql' %} n8n_db__var_lib_postgresql_data: name: n8n_db__var_lib_postgresql_data {% endif %} {% endif %} services: {% if n8n_db_type | default('sqlite') == 'postgresql' %} n8n_db: image: postgres:{{ n8n_db_postgres_version | default('16') }}-alpine container_name: n8n_db restart: unless-stopped environment: POSTGRES_DB: "{{ n8n_db_name | default('n8n') }}" POSTGRES_USER: "{{ n8n_db_user | default('n8n') }}" POSTGRES_PASSWORD: "{{ n8n_db_password }}" volumes: - n8n_db__var_lib_postgresql_data:/var/lib/postgresql/data networks: - n8n labels: com.centurylinklabs.watchtower.enable: "false" {% endif %} n8n: image: docker.n8n.io/n8nio/n8n:{{ n8n_version | default("latest") }} container_name: n8n restart: unless-stopped {% if n8n_db_type | default('sqlite') == 'postgresql' %} depends_on: - n8n_db {% endif %} environment: N8N_HOST: "{{ n8n_domain }}" N8N_PORT: "5678" N8N_PROTOCOL: "https" WEBHOOK_URL: "https://{{ n8n_domain }}/" N8N_ENCRYPTION_KEY: "{{ n8n_encryption_key }}" GENERIC_TIMEZONE: "{{ n8n_timezone | default('Europe/Paris') }}" TZ: "{{ n8n_timezone | default('Europe/Paris') }}" {% if n8n_db_type | default('sqlite') == 'postgresql' %} DB_TYPE: "postgresdb" DB_POSTGRESDB_HOST: "n8n_db" DB_POSTGRESDB_PORT: "5432" DB_POSTGRESDB_DATABASE: "{{ n8n_db_name | default('n8n') }}" DB_POSTGRESDB_USER: "{{ n8n_db_user | default('n8n') }}" DB_POSTGRESDB_PASSWORD: "{{ n8n_db_password }}" {% endif %} {% if n8n_basic_auth_active | default(false) %} N8N_BASIC_AUTH_ACTIVE: "true" N8N_BASIC_AUTH_USER: "{{ n8n_basic_auth_user }}" N8N_BASIC_AUTH_PASSWORD: "{{ n8n_basic_auth_password }}" {% endif %} volumes: - n8n__home_node_n8n:/home/node/.n8n labels: traefik.enable: true traefik.docker.network: traefik traefik.http.routers.n8n.rule: Host(`{{ n8n_domain }}`) traefik.http.routers.n8n.tls: true traefik.http.routers.n8n.tls.certresolver: letsencrypt traefik.http.routers.n8n.entrypoints: websecure {% if traefik_ipwhitelist is defined %} traefik.http.routers.n8n.middlewares: "clientips@docker" {% endif %} traefik.http.services.n8n.loadbalancer.server.port: 5678 com.centurylinklabs.watchtower.enable: {{ n8n_watchtower_enable | default('true') }} networks: - traefik {% if n8n_db_type | default('sqlite') == 'postgresql' %} - n8n {% endif %}