Search code examples
traefik

Multiple domains with Traefik


I am new to Traefik but trying to migrate from jwilder/nginx-proxy and letsencrypt-companion to Traefik. I have setup Traefik with this config file: traefik.yml

entryPoints:
  web:
    address: :80
    http:
      redirections:
        entryPoint:
          to: websecure
          scheme: https    
  websecure:
    address: :443

api:
  dashboard: true
  insecure: true

certificatesResolvers:
  le:
    acme:
      email: username@gmail.com
      storage: acme.json
      httpChallenge:
        # used during the challenge
        entryPoint: web

providers:
  docker:
    endpoint: unix:///var/run/docker.sock
    exposedByDefault: false

docker-compose.yml

version: '3'

services:
  traefik:
    image: traefik:v2.2
    restart: always
    ports:
      - 80:80
      - 443:443
      - 8080:8080
    networks:
      - web
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /data/disk1/traefik/traefik.yml:/traefik.yml
      - /data/disk1/traefik/acme.json:/acme.json
    container_name: traefik

When starting one container on domain #1

docker-compose.yml

version: "3"

services:
  confluence:
    container_name: confluence
    image: atlassian/confluence-server:7.6.2
    volumes:
      - /data/disk1/atlassian/application-data/confluence:/var/atlassian/application-data/confluence
    ports:
      - "8090:8090"
    external_links:
      - postgres:postgres
    environment:
      - CATALINA_CONNECTOR_PROXYNAME=confluence.tld
      - CATALINA_CONNECTOR_PROXYPORT=443
      - CATALINA_CONNECTOR_SCHEME=https
      - CATALINA_CONNECTOR_SECURE=true
      - VIRTUAL_HOST=confluence.tld
      - VIRTUAL_NETWORK=web
      - VIRTUAL_PORT=8090
      - LETSENCRYPT_EMAIL=user@tld
      - LETSENCRYPT_HOST=confluence.tld
    labels:
      - traefik.enable=true
      - traefik.http.routers.confluence.rule=Host(`confluence.tld`)
      - traefik.http.routers.confluence.tls=true
      - traefik.http.routers.confluence.tls.certresolver=le
      - traefik.http.routers.confluence.service=confluence
      - traefik.http.services.confluence.loadbalancer.server.port=8090
    networks:
      - web
    restart: always
networks:
  web:
    external:
      name: web

It works perfect. NOTE: I have kept the environment variables for jwilder/nginx-proxy for the time being When launching another container with different tld I can't get that working.

E.g. docker-compose.yml

version: "3"

services:
  confluence:
    container_name: myapp
    image: nginx:latest
    volumes:
      - /data/disk1/myapp/www/:/usr/share/nginx/html:ro
      - /data/disk1/myapp/conf/nginx.conf:/etc/nginx/nginx.conf:ro
    ports:
      - "9999:80"
    environment:
      - VIRTUAL_HOST=www.tld2,tld2
      - VIRTUAL_NETWORK=web
      - VIRTUAL_PORT=9999
      - LETSENCRYPT_EMAIL=user@tld2
      - LETSENCRYPT_HOST=www.tld2,tld2
    labels:
      - traefik.enable=true
      - traefik.http.routers.myapp.rule=Host(`tld2`) || Host(`www.tld2`)
      - traefik.http.routers.myapp.tls=true
      - traefik.http.routers.myapp.tls.certresolver=le
      - traefik.http.routers.myapp.service=tld2
      - traefik.http.services.myapp.loadbalancer.server.port=9999
    networks:
      - web
    restart: always
networks:
  web:
    external:
      name: web

It doesn't work but everything looks OK in Traefik dashboard. Any ideas?


Solution

  • There is an error in the second docker-compose.yml:

    You define the router named mypp to use a service named tld2:

    traefik.http.routers.myapp.service=tld2

    but your service is named myapp:

    traefik.http.services.myapp.loadbalancer.server.port=9999

    This should have generated an error in Traefik's log regarding an unresolvable service.

    To fix this, configure your router myapp to use the service myapp:

    traefik.http.routers.myapp.service=myapp