Multi-user Docker Environment

I’ve used your .yml file with some update DATA_FOLDER, N8N_BASIC_AUTH_USER and N8N_BASIC_AUTH_PASSWORD like below and install. And the results are:

  1. mydomain.com/mysubfolder can access with my AUTH_USER and AUTH_PASSWORD ok
  2. mydomain.com/test can access but can not authenticate with AUTH_USER admin1 and AUTH_PASSWORD pass1
  3. mydomain.com/test2 can access but can not authenticate with AUTH_USER admin2 and AUTH_PASSWORD pass2
  4. mydomain.com/test2 access show errors Bad gateway

What did I do wrong when install?

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
  n8n:
    image: 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_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER
      - N8N_BASIC_AUTH_PASSWORD
      - N8N_HOST=${DOMAIN_NAME}
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - NODE_ENV=production
      - N8N_PATH
      - WEBHOOK_TUNNEL_URL=https://${DOMAIN_NAME}${N8N_PATH}
      - VUE_APP_URL_BASE_API=https://${DOMAIN_NAME}${N8N_PATH}
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ${DATA_FOLDER}/.n8n:/root/.n8n

  n8n3:
    image: n8nio/n8n
    ports:
      - "127.0.0.1:5600:5600"
    labels:
      - traefik.enable=true
      - traefik.http.routers.n8n3.rule=Host(`${DOMAIN_NAME}`)
      - traefik.http.routers.n8n3.tls=true
      - traefik.http.routers.n8n3.entrypoints=websecure
      - "traefik.http.routers.n8n3.rule=PathPrefix(`/test{regex:$$|/.*}`)"
      - "traefik.http.middlewares.n8n3-stripprefix.stripprefix.prefixes=/test"
      - "traefik.http.routers.n8n3.middlewares=n8n3-stripprefix"
      - traefik.http.routers.n8n3.tls.certresolver=mytlschallenge
      - traefik.http.middlewares.n8n3.headers.SSLRedirect=true
      - traefik.http.middlewares.n8n3.headers.STSSeconds=315360000
      - traefik.http.middlewares.n8n3.headers.browserXSSFilter=true
      - traefik.http.middlewares.n8n3.headers.contentTypeNosniff=true
      - traefik.http.middlewares.n8n3.headers.forceSTSHeader=true
      - traefik.http.middlewares.n8n3.headers.SSLHost=${DOMAIN_NAME}
      - traefik.http.middlewares.n8n3.headers.STSIncludeSubdomains=true
      - traefik.http.middlewares.n8n3.headers.STSPreload=true
    environment:
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER="admin1"
      - N8N_BASIC_AUTH_PASSWORD="pass1"
      - N8N_HOST=${DOMAIN_NAME}
      - N8N_PORT=5600
      - N8N_PROTOCOL=https
      - NODE_ENV=production
      - N8N_PATH=/test/
      - WEBHOOK_TUNNEL_URL=https://${DOMAIN_NAME}/test/
      - VUE_APP_URL_BASE_API=https://${DOMAIN_NAME}/test/
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /root/n8n/test/.n8n:/root/.n8n

  n8n5:
    image: n8nio/n8n
    ports:
      - "127.0.0.1:5601:5601"
    labels:
      - traefik.enable=true
      - traefik.http.routers.n8n5.rule=Host(`${DOMAIN_NAME}`)
      - traefik.http.routers.n8n5.tls=true
      - traefik.http.routers.n8n5.entrypoints=websecure
      - "traefik.http.routers.n8n5.rule=PathPrefix(`/test2{regex:$$|/.*}`)"
      - "traefik.http.middlewares.n8n5-stripprefix.stripprefix.prefixes=/test2"
      - "traefik.http.routers.n8n5.middlewares=n8n5-stripprefix"
      - traefik.http.routers.n8n5.tls.certresolver=mytlschallenge
      - traefik.http.middlewares.n8n5.headers.SSLRedirect=true
      - traefik.http.middlewares.n8n5.headers.STSSeconds=315360000
      - traefik.http.middlewares.n8n5.headers.browserXSSFilter=true
      - traefik.http.middlewares.n8n5.headers.contentTypeNosniff=true
      - traefik.http.middlewares.n8n5.headers.forceSTSHeader=true
      - traefik.http.middlewares.n8n5.headers.SSLHost=${DOMAIN_NAME}
      - traefik.http.middlewares.n8n5.headers.STSIncludeSubdomains=true
      - traefik.http.middlewares.n8n5.headers.STSPreload=true
    environment:
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin2
      - N8N_BASIC_AUTH_PASSWORD=pass2
      - N8N_HOST=${DOMAIN_NAME}
      - N8N_PORT=5601
      - N8N_PROTOCOL=https
      - NODE_ENV=production
      - N8N_PATH=/test2/
      - WEBHOOK_TUNNEL_URL=https://${DOMAIN_NAME}/test2/
      - VUE_APP_URL_BASE_API=https://${DOMAIN_NAME}/test2/
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /root/n8n/test2/.n8n:/root/.n8n

  n8n4:
    image: n8nio/n8n
    ports:
      - "127.0.0.1:5700:5700"
    labels:
      - traefik.enable=true
      - traefik.http.routers.n8n4.rule=Host(`${DOMAIN_NAME}`)
      - traefik.http.routers.n8n4.tls=true
      - traefik.http.routers.n8n4.entrypoints=websecure
      - "traefik.http.routers.n8n4.rule=PathPrefix(`/asit{regex:$$|/.*}`)"
      - "traefik.http.middlewares.n8n4-stripprefix.stripprefix.prefixes=/asit"
      - "traefik.http.routers.n8n4.middlewares=n8n4-stripprefix"
      - traefik.http.routers.n8n4.tls.certresolver=mytlschallenge
      - traefik.http.middlewares.n8n4.headers.SSLRedirect=true
      - traefik.http.middlewares.n8n4.headers.STSSeconds=315360000
      - traefik.http.middlewares.n8n4.headers.browserXSSFilter=true
      - traefik.http.middlewares.n8n4.headers.contentTypeNosniff=true
      - traefik.http.middlewares.n8n4.headers.forceSTSHeader=true
      - traefik.http.middlewares.n8n4.headers.SSLHost=${DOMAIN_NAME}
      - traefik.http.middlewares.n8n4.headers.STSIncludeSubdomains=true
      - traefik.http.middlewares.n8n4.headers.STSPreload=true
    environment:
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin3
      - N8N_BASIC_AUTH_PASSWORD=pass3
      - N8N_HOST=${DOMAIN_NAME}
      - N8N_PORT=5700
      - N8N_PROTOCOL=https
      - NODE_ENV=production
      - N8N_PATH=/asit/
      - WEBHOOK_TUNNEL_URL=https://${DOMAIN_NAME}/asit/
      - VUE_APP_URL_BASE_API=https://${DOMAIN_NAME}/asit/
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /root/n8n/asit/.n8n:/root/.n8n

After edit above .yml, almost working now except ssl. How can make ssl working with subfolder sites?
Certificate error like this picture:

version: "3"
services:
  traefik:
    image: "traefik"
    restart: always
    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
  n8n:
    image: n8nio/n8n
    restart: always
    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_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER
      - N8N_BASIC_AUTH_PASSWORD
      - N8N_HOST=${DOMAIN_NAME}
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - NODE_ENV=production
      - N8N_PATH
      - WEBHOOK_TUNNEL_URL=https://${DOMAIN_NAME}${N8N_PATH}
      - VUE_APP_URL_BASE_API=https://${DOMAIN_NAME}${N8N_PATH}
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ${DATA_FOLDER}/.n8n:/root/.n8n

  n8n1:
    image: n8nio/n8n
    restart: always
    ports:
      - "127.0.0.1:5601:5601"
    labels:
      - traefik.enable=true
      - traefik.http.routers.n8n1.rule=Host(`${DOMAIN_NAME}`)
      - traefik.http.routers.n8n1.tls=true
      - traefik.http.routers.n8n1.entrypoints=websecure
      - "traefik.http.routers.n8n1.rule=PathPrefix(`/test1{regex:$$|/.*}`)"
      - "traefik.http.middlewares.n8n1-stripprefix.stripprefix.prefixes=/test1"
      - "traefik.http.routers.n8n1.middlewares=n8n1-stripprefix"
      - traefik.http.routers.n8n1.tls.certresolver=mytlschallenge
      - traefik.http.middlewares.n8n1.headers.SSLRedirect=true
      - traefik.http.middlewares.n8n1.headers.STSSeconds=315360000
      - traefik.http.middlewares.n8n1.headers.browserXSSFilter=true
      - traefik.http.middlewares.n8n1.headers.contentTypeNosniff=true
      - traefik.http.middlewares.n8n1.headers.forceSTSHeader=true
      - traefik.http.middlewares.n8n1.headers.SSLHost=${DOMAIN_NAME}
      - traefik.http.middlewares.n8n1.headers.STSIncludeSubdomains=true
      - traefik.http.middlewares.n8n1.headers.STSPreload=true
    environment:
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin1
      - N8N_BASIC_AUTH_PASSWORD=pass1
      - N8N_HOST=${DOMAIN_NAME}
      - N8N_PORT=5601
      - N8N_PROTOCOL=https
      - NODE_ENV=production
      - N8N_PATH=/test1/
      - WEBHOOK_TUNNEL_URL=https://${DOMAIN_NAME}/test1/
      - VUE_APP_URL_BASE_API=https://${DOMAIN_NAME}/test1/
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /root/n8n/test1/.n8n:/root/.n8n

  n8n2:
    image: n8nio/n8n
    restart: always
    ports:
      - "127.0.0.1:5602:5602"
    labels:
      - traefik.enable=true
      - traefik.http.routers.n8n2.rule=Host(`${DOMAIN_NAME}`)
      - traefik.http.routers.n8n2.tls=true
      - traefik.http.routers.n8n2.entrypoints=websecure
      - "traefik.http.routers.n8n2.rule=PathPrefix(`/test2{regex:$$|/.*}`)"
      - "traefik.http.middlewares.n8n2-stripprefix.stripprefix.prefixes=/test2"
      - "traefik.http.routers.n8n2.middlewares=n8n2-stripprefix"
      - traefik.http.routers.n8n2.tls.certresolver=mytlschallenge
      - traefik.http.middlewares.n8n2.headers.SSLRedirect=true
      - traefik.http.middlewares.n8n2.headers.STSSeconds=315360000
      - traefik.http.middlewares.n8n2.headers.browserXSSFilter=true
      - traefik.http.middlewares.n8n2.headers.contentTypeNosniff=true
      - traefik.http.middlewares.n8n2.headers.forceSTSHeader=true
      - traefik.http.middlewares.n8n2.headers.SSLHost=${DOMAIN_NAME}
      - traefik.http.middlewares.n8n2.headers.STSIncludeSubdomains=true
      - traefik.http.middlewares.n8n2.headers.STSPreload=true
    environment:
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin2
      - N8N_BASIC_AUTH_PASSWORD=pass2
      - N8N_HOST=${DOMAIN_NAME}
      - N8N_PORT=5602
      - N8N_PROTOCOL=https
      - NODE_ENV=production
      - N8N_PATH=/test2/
      - WEBHOOK_TUNNEL_URL=https://${DOMAIN_NAME}/test2/
      - VUE_APP_URL_BASE_API=https://${DOMAIN_NAME}/test2/
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /root/n8n/test2/.n8n:/root/.n8n

  n8n3:
    image: n8nio/n8n
    restart: always
    ports:
      - "127.0.0.1:5603:5603"
    labels:
      - traefik.enable=true
      - traefik.http.routers.n8n3.rule=Host(`${DOMAIN_NAME}`)
      - traefik.http.routers.n8n3.tls=true
      - traefik.http.routers.n8n3.entrypoints=websecure
      - "traefik.http.routers.n8n3.rule=PathPrefix(`/test3{regex:$$|/.*}`)"
      - "traefik.http.middlewares.n8n3-stripprefix.stripprefix.prefixes=/test3"
      - "traefik.http.routers.n8n3.middlewares=n8n3-stripprefix"
      - traefik.http.routers.n8n3.tls.certresolver=mytlschallenge
      - traefik.http.middlewares.n8n3.headers.SSLRedirect=true
      - traefik.http.middlewares.n8n3.headers.STSSeconds=315360000
      - traefik.http.middlewares.n8n3.headers.browserXSSFilter=true
      - traefik.http.middlewares.n8n3.headers.contentTypeNosniff=true
      - traefik.http.middlewares.n8n3.headers.forceSTSHeader=true
      - traefik.http.middlewares.n8n3.headers.SSLHost=${DOMAIN_NAME}
      - traefik.http.middlewares.n8n3.headers.STSIncludeSubdomains=true
      - traefik.http.middlewares.n8n3.headers.STSPreload=true
    environment:
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin3
      - N8N_BASIC_AUTH_PASSWORD=pass3
      - N8N_HOST=${DOMAIN_NAME}
      - N8N_PORT=5603
      - N8N_PROTOCOL=https
      - NODE_ENV=production
      - N8N_PATH=/test3/
      - WEBHOOK_TUNNEL_URL=https://${DOMAIN_NAME}/test3/
      - VUE_APP_URL_BASE_API=https://${DOMAIN_NAME}/test3/
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /root/n8n/test3/.n8n:/root/.n8n

Hi guys,

I was reading this thread, we intend to follow this approach for multi-user, anybody suggests a tool for monitoring these instances?