В настоящее время у меня есть докер, в котором один контейнер nginx обслуживает статическое содержимое для ряда сайтов wordpress и передает динамические запросы к соответствующим контейнерам php-apache. Когда я развертываю новый контейнер php-apache, я просто добавляю новую конфигурацию виртуального хоста nginx и обновляю службу.
Эта установка очень проста и удобна в обслуживании, но выдача и обновление сертификата HTTPS - это настоящая PITA, поскольку все должно быть выполняется вручную (я использую zerossl / client).
Traefik кажется отличным решением для обратного прокси + HTTPS, но поскольку это не веб-сервер, ему нужны два бэкэнда для репликации вышеупомянутой настройки, перенаправляя трафик на статический (nginx) или динамический (php-apache) контейнер на основе хоста запроса и / или пути.
Хотя я думаю, что это решение будет работать нормально, я удваиваю количество контейнеров, которые мне нужны.
Я мог бы продолжать использовать свой прокси-сервер nginx как единый сервер для всех интерфейсов Traefik, эффективно используя Traefik только в качестве конечной точки HTTPS, но это кажется немного излишним.
Мне интересно, может ли кто-нибудь предложить решение лучшая настройка.
Спасибо
Посмотрите на некоторые из моих примеров из "реального мира": https://github.com/Berndinox/compose-v3-collection
1) докер сеть создать прокси -d оверлей
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 автоматически добавляет новые конечные точки на лету! Приятно, не так ли?