Назад | Перейти на главную страницу

Как обслуживать статическое содержимое через Traefik

В настоящее время у меня есть докер, в котором один контейнер nginx обслуживает статическое содержимое для ряда сайтов wordpress и передает динамические запросы к соответствующим контейнерам php-apache. Когда я развертываю новый контейнер php-apache, я просто добавляю новую конфигурацию виртуального хоста nginx и обновляю службу.

Эта настройка очень проста и удобна в обслуживании, но выпуск и обновление сертификата HTTPS - это настоящая PITA, поскольку все нужно делать вручную (я использую zerossl / client).

Traefik кажется отличным решением для обратного прокси + HTTPS, но поскольку это не веб-сервер, ему нужны два бэкэнда для репликации вышеуказанной настройки, перенаправления трафика в статический (nginx) или динамический (php-apache) контейнер на основе запроса Host и / или путь.

Хотя я думаю, что это решение подойдет, я удваиваю количество необходимых мне контейнеров.

Я мог бы продолжать использовать свой прокси-сервер nginx как единый сервер для всех интерфейсов Traefik, эффективно используя Traefik только как конечную точку HTTPS, но это кажется немного излишним.

Мне интересно, может ли кто-нибудь предложить лучшую настройку.

Спасибо

Посмотрите на некоторые из моих примеров из "реального мира": https://github.com/Berndinox/compose-v3-collection

1) docker network create proxy -d overlay

2) Запускаем traefik / proxy.yml - docker stack deploy -c proxy.yml Внимание: если вы запускаете более одного контейнера traefik и хотите использовать ACME, вам необходимо сохранить конфигурацию в хранилище значений ключей (Consul, ETCD). Смонтированный том не будет работать в среде с несколькими экземплярами с ACME. Нормальные сертификаты (.crt, .key) будут работать и могут быть определены внутри traefik.toml.

3) Создайте свои Сервисы и пометьте их для traefik, например Wordpress:

  wordpress:
      image: wordpress
      environment:
        - WORDPRESS_DB_USER=wordpress
        - WORDPRESS_DB_PASSWORD=${DBPWD}
        - WORDPRESS_DB_HOST=mariadb
      volumes:
        - html:/var/www/html
      deploy:
        labels:
          - "traefik.port=80"
          - "traefik.docker.network=proxy"
          - "traefik.frontend.rule=Host:${WWWDOMAIN}"
          - "traefik.backend=wordpress"
          - "traefik.frontend.entryPoints=http,https"
        replicas: 1
      networks:
        proxy:
          aliases:
            - wordpress
        default:
      depends_on: 
        - mariadb

Большинство контейнеров имеют встроенный веб-сервер (Wordpress, Nextcloud, minio, ghost ...), что не должно быть проблемой.

Вы можете масштабировать Traefik, вы также можете масштабировать Wordpress, а Traefik автоматически добавляет новые конечные точки на лету! Красиво, не правда ли?

  • некоторые параметры должны быть установлены / изменены в моих примерах, чтобы они соответствовали вашей среде.
  • Для управления томом в небольшом окружении я использовал: https://github.com/CWSpear/local-persist