Автор оригинала: Vyacheslav.
Когда дело доходит до разработки сайтов, которые используют субдомены, это может быть сложной или скучной задачей для создания в разработке, поскольку localhost не полностью квалифицированное доменное имя. Вы не можете просто получить пример .Localhost. Вы либо постоянно редактируете/etc/hosts или настроив некоторых dnsmasq в вашей локальной сети.
До сих пор наиболее часто использовались решения самих. -168-1-250.Nip.io, и, таким образом, позволяя генерировать сертификат вытеснения к упомянутому домену.
Это сыграло хорошее в течение половины десятилетия, но, как все больше и больше моих клиентов модных клиентов переехали, чтобы вытащить обзоры запроса и выбирать Docker или Kubernetes в качестве платформы в параллельной платформе, я узнал себя все более и более ограниченным с классическими решениями выше.
То, что я хотел в прошлом году — это воспроизводимый сценарий для реализации собственного, фирменных местных условий развития, которую я могу легко воспроизвести на удаленном сервере, чтобы реализовать сценарию отзывов по вытянутым запросом, поддерживая некоторые разумные льготы, такие как сертификаты Green Seal, некоторые возможности устранения неполадок и т. Д.
Давайте посмотрим на подход, который я использую сейчас для клиентов, используя приложения (локальный или рой)
Выбор компонентов для решения
Компоненты приготовления:
A) Docker — Classic или в режиме рои. (На моей рабочей ноутбуке у меня есть Docker в режиме рои, он не останавливает его от того, что он также используется в качестве автономной среды докера)
б) Traefik2, и это официальное изображение докера. Traefik — это краевой маршрутизатор с открытым исходным кодом, который делает публикацию ваших услуг забавным и легким опытом. Он получает просьбы от имени вашей системы и узнает, какие компоненты несут ответственность за обработку их. Кто-то интерес для меня — две поддерживаемые бэкэнс — Докер и Кубернаны.
в) поддомен развития. Для красивого рабочего решения нам нужно посвятить некоторую поддомен для развития, например: * .lvh.voronenko.net.net
— разрешение на localhost или * .praview.project.net.
— Некоторые домена подстановки, указывающие на ваш постановку.
d) Сертификат подстановки от летачих, чтобы организовать сертификат зеленого уплотнения. Хотя на удаленном ящике Traefik может позаботиться о получении сертификата зеленого уплотнения для каждого выставленного FQDN для вас, если у вас есть возможность прередать сертификат подстановочного знака — почему нет? Для доменов, разрешающих на localhost, как упоминается * .lvh.voronenko.net.net
— Вам нужно позаботиться о сертификате самостоятельно.
Для генерации свидетельств отеля Letsensrypt мой текущий инструмент выбора — это ACME.SH — инструмент для нулевой зависимости оболочки. Он поддерживает количество поставщиков DNS, и генерируя сертификат подстановки, может быть такой же простой, как работает короткое команда Shell.
acme.sh --issue --dns dns_gd -d lvh.voronenko.net -d "*.lvh.voronenko.net"
Обратите внимание, что инструмент также заботится о продлении сертификата при необходимости. Установка сертификатов в необходимую папку также так же просто, как выполнение скрипта оболочки
~/.acme.sh/acme.sh --install-cert -d "${DOMAIN_NAME}" \ --cert-file $TARGET/cert.pem \ --key-file $TARGET/privkey.pem \ --fullchain-file $TARGET/fullchain.pem
В худшем случае (если вы не проинструктировали ACME.SH с командой, что делать на пролонге сертификата) — вам нужно будет позаботиться о копировании нового набора сертификатов один раз в 93 дня.
e) Некоторый инструмент вы можете осмотреть то, что происходит с Docker. Есть много хороших консольных инструментов, но если вам нравится один с веб-пользовательским интерфейсом — ROTAINER, безусловно, один из лучших.
Теперь, когда мы обсуждали компоненты, давайте объединим их вместе:
Местная настройка — экземпляр широкий Traefik Setup для местного развития
Нам нужно:
Traefik_Certs
Папка, где мы будем хранить преженен сертификат подстановки (у вас может быть более одного) Также здесь Traefik будет хранить информацию о собственных сертификатах.
Traefik_Conf
Папка, где мы будем хранить части конфигурации Traefik, мы хотим исключить из составляющей докера.
По умолчанию Сертификаты. Томль
Сообщает Trafik, что у нас есть один преженен сертификат, который можно найти под указанным путем в папке Certs.
[[tls.certificates]] #first certificate certFile = "/certs/fullchain.pem" keyFile = "/certs/privkey.pem" #[[tls.certificates]] #second certificate # certFile = "/path/to/other.cert" # keyFile = "/path/to/other.key"
Контроль Makefile
Что поможет вам создать общую публичную сеть для Docker, которая будет использоваться Traefik для поиска открытых услуг, а также вверх/вниз подпрограммы
create-traefik-network-once: docker network create traefik-public up: docker-compose up -d down: docker-compose down
и сердце строительства: главный Traefik Docker-Compose файл, чтобы сделать рассказ более короче, я прокомментирую самые важные части конфигурации
version: '3.4' services: traefik: image: traefik:v2.1.4 # on my notebook traefik serves on default http https ports # this allows natural urls like https://app.lvh.voronenko.net/ ports: - 80:80 - 443:443 # setup can be easily transformed into swarm deploy deploy: replicas: 1 placement: constraints: - node.role == manager preferences: - spread: node.id labels: [] # /certs and /conf are dedicated known directories in # official traefik image. # in order to allow traefik to expose docker backend we are # mapping docker socket inside. volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - ./traefik_certs:/certs - ./traefik_conf:/conf restart: always # if traefik supposed to serve real swarm cluster, peram should be specified # --docker.swarmmode command: - "--api.insecure=true" - "--providers.docker=true" - "--providers.docker.watch=true" - "--providers.docker.exposedbydefault=false" - "--providers.file.directory=/conf/" - "--providers.file.watch=true" - "--entrypoints.web.address=:80" - "--entrypoints.websecure.address=:443" - "--entrypoints.mongo.address=:27017" - "--entrypoints.postgres.address=:5432" - "--log.level=DEBUG" - "--accessLog" - "--api" - "--metrics" - "--metrics.prometheus" - "--providers.docker.network=traefik-public" networks: - default - traefik-public # traefik configuration via labels # expose traefik dashboard under address https://traefik.lvh.voronenko.net labels: - "traefik.enable=true" - "traefik.http.routers.traefik.rule=Host(`traefik.lvh.voronenko.net`)" - "traefik.http.routers.traefik.entrypoints=websecure" - "traefik.http.routers.traefik.tls.certresolver=letsencryptresolver" - "traefik.http.routers.traefik.service=api@internal" - "traefik.http.routers.traefik.tls=true" # docker management UI to be exposed under # https://docker.lvh.voronenko.net portainer: image: portainer/portainer restart: always volumes: - /var/run/docker.sock:/var/run/docker.sock - portainer_data:/data labels: - "traefik.enable=true" - "traefik.http.routers.portainer.rule=Host(`docker.lvh.voronenko.net`)" - "traefik.http.routers.portainer.entrypoints=web" - "traefik.http.routers.portainer-secure.rule=Host(`docker.lvh.voronenko.net`)" - "traefik.http.routers.portainer-secure.entrypoints=websecure" - "traefik.http.routers.portainer-secure.tls=true" volumes: portainer_data: networks: traefik-public: external: true
На этот момент, если вы начнете настройку, то есть Docker-Compose Up -D
Вы уже получите:
а) Traefikui в https://traefik.lvh.voronenko.net/- не для того, чтобы изменить, но приятный вид на глаза на обнаруженные в настоящее время. ПРИМЕЧАНИЕ, эта страница подается в хорошем сертификате зеленой печати, который вы настроили.
б) Portainerui в https://docker.lvh.voronenko.net/, который предоставляет подробные внутренности в Docker работает на вашей машине, контейнерах, услугах и Et Cetera.
Обратите внимание, что Traefik Docker-Compose является полностью независимым компонентом вашей системы без прямого отношения к любому проекту, на которой вы работаете в настоящее время. Это означает, что он может постоянно работать на вашем хосте, как любой другой веб-сервер.
В любой момент, когда вам нужно выставить какой-то проект Docker, вы в настоящее время работаете на Traefik, вам понадобится
а) Добавить услугу, выставляющее снаружи на Traefik-Public
сеть.
б) Укажите правила обнаружения, такие как FQDN для сервиса — «Хост ( WHOAMI.LVH.Voronenko.net
)»
c) Предоставлять подсказки к Traefik для любой дополнительной конфигурации, например, для перенаправления, разрешения/защиты пароля и т. Д.
После запуска такого докера составляют в папке проекта, она сразу же воздействует с Traefik. Более того — все ваши товарищи по команде, работающие над проектом, имеют ровно же опыт, но и на своих ноутбуках.
whoami: image: "containous/whoami" container_name: "simple-service" networks: - app - traefik-public labels: - "traefik.enable=true" - "traefik.http.routers.whoami.rule=Host(`whoami.lvh.voronenko.net`)" - "traefik.http.routers.whoami.entrypoints=web" # - "traefik.http.middlewares.traefik-auth.basicauth.users=USER:PASSWORD" # - "traefik.http.middlewares.traefik-https-redirect.redirectscheme.scheme=https" # - "traefik.http.routers.traefik.middlewares=traefik-https-redirect" - "traefik.http.routers.traefik-secure.entrypoints=websecure" - "traefik.http.routers.traefik-secure.rule=Host(`whoami.lvh.voronenko.net`)" # - "traefik.http.routers.traefik-secure.middlewares=traefik-auth" - "traefik.http.routers.traefik-secure.tls=true" networks: traefik-public: external: true
Ваши услуги (ы) выставляются на выделенные имена, служащие на сертификатах зеленой уплотнения — почти одинаковую копию вашей производственной среды.
Установка установки на общественном сервере
Экземпляр широкий Traefik Setup для удаленного разработки (развертывание ветвления и т. Д.) выполняется аналогичным образом, но вам нужно будет лучше защитить вашу интеллектуальную собственность (сказав, что вы не хотите, чтобы кто-либо в Интернете для предварительного просмотра ваших развертываний), а также для защиты Portainer и Traefik Dishboards с учетными данными или даже полностью удалить их от общественного доступа.
Traefik имеет несколько подразбов на выбор https://docs.traefik.io/middlewares/overview/
Наиболее разумные подразделения для рассмотрения будут
Basicauth https://docs.traefik.io/middlewares/basicauth/
Digestauth https://docs.traefik.io/middlewares/digestauth/
IPWhitelist https://docs.traefik.io/middlewares/ipwhitelist/
Ratelimit https://docs.traefik.io/middlewares/ratelimit/
Также для публичного сервера Traefik позаботится о создании сертификатов Green Seal для вас, если вы не предоставили предварительную сертификат подстановочного знака.
Также изменения в local_server
Настройка будет активировать провайдер сертификатов Letsencrypt Мы вводим новую сопоставленную папку Netsensrypt для хранения автоматически восстановленных сертификатов.
volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - ./traefik_certs:/certs - ./traefik_conf:/conf - ./letsencrypt:/letsencrypt
И мы дополнительно должны активировать Acme Acme Acme в Traefik
labels: - "--certificatesResolvers.letsencrypt.acme.email=" - "--certificatesResolvers.letsencrypt.acme.tlsChallenge=true" - "--certificatesResolvers.letsencrypt.acme.httpChallenge=true" - "--certificatesResolvers.letsencrypt.acme.httpChallenge.entryPoint=web" - "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
Тем не менее, я рекомендую, по крайней мере, для хоста, служащих в качестве ветвления развертывает предварительный просмотр, прежененное сертификат Wild Card. Не бесполезно генерировать новый сертификат на каждый новый развернутый филиал (Blankname.preview.voronenko.net)
Для услуг, выставленных через Traefik, требующий автоматического сертификата от летесец, вам нужно будет проинструктировать Trafik использовать Letsencrypt для этого сервиса.
labels: - traefik.http.routers.whoami.tls.certresolver=letsencrypt
Полный пример для предоставленного обслуживания:
whoami: image: "containous/whoami" container_name: "simple-service" labels: - "traefik.enable=true" - "traefik.http.routers.whoami.rule=Host(`whoami.preview.voronenko.net`)" - "traefik.http.routers.whoami.entrypoints=web" # - "traefik.http.routers.traefik-secure.middlewares=traefik-auth" # - "traefik.http.middlewares.traefik-auth.basicauth.users=USER:PASSWORD" # - "traefik.http.middlewares.traefik-https-redirect.redirectscheme.scheme=https" # - "traefik.http.routers.traefik.middlewares=traefik-https-redirect" - "traefik.http.routers.traefik-secure.entrypoints=websecure" - "traefik.http.routers.traefik-secure.rule=Host(`whoami.preview.voronenko.net`)" - "traefik.http.routers.traefik-secure.tls=true" - traefik.http.middlewares.whoami.compress=true - traefik.http.routers.whoami.tls.certresolver=letsencrypt networks: traefik-public
Резюме
С описанным подходом вы можете обеспечить ненавязчивое местное развитие с Traefik2, Docker и Letsencrypt по отдельности, а также для всех ваших товарищей по команде. Владельцы Startup могут принуждать «фирменную» среду развития, как app.lvh.mystartup.domain.
Решение универсально и хорошо работает с несколькими проектами, включая автономные инструменты, распределенные в виде контейнера Docker.
Вы можете легко расширить подход к общественному серверу, внедряя «сервер предварительного просмотра» для тех же компонентов. Traefik и Docker позволяют вам также представить превью запроса на тягу в разумное время (через день)
Упомянутый в примерах статьи можно попробовать на https://github.com/voronenko/traefik2-compose-template
local_server
является примером среды развития на вашем localhost, i.e. https://someapp.lvh.voronenko.net/
public_server
является примером среды окружающей среды, которая может быть развернута для общественного сервера.
Оригинал: «https://www.codementor.io/@slavko/unobtrusive-local-development-with-traefik2-docker-and-letsencrypt-15qw1ypoi8»