В настоящее время у меня есть докер, в котором один контейнер 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 автоматически добавляет новые конечные точки на лету! Красиво, не правда ли?