Собираем контейнер с обратным прокси Traefik

В корне создаём папку «traefik» mkdir traefik

Далее нам необходимо 2 файла «docker-compose.yml» и «traefik.yml»

    touch docker-compose.yml
    touch traefik.yml

вставляем содержимое в docker-compose.yml cat > /data/config/traefik/docker-compose.yml

    version: '3'

    services:

      traefik:
        image: traefik:v2.2
        restart: always
        container_name: "traefik"
        command:
          - --api.insecure=true
          - --providers.docker=true
          - --providers.docker.exposedbydefault=false
          - --entrypoints.web.address=:80
          - --entrypoints.websecure.address=:443
          - --providers.file.directory=/etc/traefik/dynamic_conf
          - --accesslog=true
          - --metrics.prometheus=true
          - --entrypoints.metrics.address=:8081
          - --metrics.prometheus.entrypoint=metrics

        ports:
          - "80:80"
          - "443:443"
          - "8080:8080"

        volumes:
          - /var/run/docker.sock:/var/run/docker.sock:ro
          - /data/config/traefik/traefik.yml:/etc/traefik/dynamic_conf/conf.yml:ro
          - /data/config/ssl/live/(youdomaine):/etc/traefik/(youdomaine)
          - /data/config/ssl/live/*.(youdomaine):/etc/traefik/*.(youdomaine)

получаем сертификаты для основного домена example.com и всех остальных доменов *.example.com и копируем их в папку /data/config/ssl/

и вставляем содержимое в фаил traefik.yml cat > /data/config/traefik/traefik.yml

    tls:
      certificates:
       -  certFile: /etc/traefik/*.(youdomaine)/cert.pem
          keyFile: /etc/traefik/*.(youdomaine)/privkey.pem
          stores:
            - default
       -  certFile: /etc/traefik/(youdomaine)/cert.pem
          keyFile: /etc/traefik/(youdomaine)/privkey.pem

    accessLog:
      filePath: "/var/log/access.log"
      format: json
      filters:
        statusCodes:
          - "200"
          - "300-302"
        retryAttempts: true
        minDuration: "10ms"

И вот теперь запускаем контейнер командой

    docker-compose up -d traefik

Далее редактируем контейнер который необходимо обрабатывать через обратный прокси в нем нам необходимо добавить ярлыки для работы внешних протоколов и назначем ему сеть по умолчания "traefik_default"

Добавляем label для контейнера заменив (name_service) на имя запускаемого контейнера, а (youdomaine) на доменное имя присвоенное серверу

    traefik.enable = true 
    traefik.http.middlewares.(name_service)_https.redirectscheme.scheme = https
    traefik.http.routers.(name_service).entrypoints = web
    traefik.http.routers.(name_service).middlewares = (name_service)_https@docker
    traefik.http.routers.(name_service).rule = Host(`(name_service).(youdomaine)`)
    traefik.http.routers.(name_service)_https.entrypoints = websecure
    traefik.http.routers.(name_service)_https.rule = Host(`(name_service).(youdomaine)`)
    traefik.http.routers.(name_service)_https.tls = true

После запуска (name_service).(youdomaine) будет являться опубликованным именем сервиса *.(youdomaine) может быть как 2 уровня так и 3

Для контейнера с нестандартным портом добавляем еще одну строчку для примера используем контейнер с portainer добавляем еще одну строчку

    traefik.http.services.portainer.loadbalancer.server.port = 9000

Так же все необходимые метки можно добавить в отдельном файле

    cat > /data/config/portainer/portainer-label

Строка запуска контейнера будет выглядеть так

    docker run -d --name=portainer --label-file /data/config/portainer/portainer-label \
    --network traefik_default --restart=always -v /var/run/docker.sock:/var/run/docker.sock \
    -v portainer_data:/data portainer/portainer