Скрипты и описание запуска локального прокси для разработки.
Всё проверялось на только на linux, на windows возможно потребуются какие-то доработки.
Для работы нам потребуется выполнить следующие действия
- Настроить dns
- Сгенерировать сертификаты
- Добавить свой корневой сертификат в браузер
- Настроить новую сеть docker
- Запустить контейнер с traefik
- Запустить наш проект
Для упрощения работы и уменьшения ручной работы лучше использовать dnsmasq (устанавливайте по инструкции вашего дистрибутива)
И для дальнейшей работы в его конфигурацию надо добавить следующие строки
address=/.dev.docker/172.20.0.2
no-negcache
где
- dev.docker - это ваша локальная dns-зона, и теперь сайты типа blabla.dev.docker будут отправляться на ip 172.20.0.2,
- 172.20.0.2 - это ip сети докера, в которой мы запускаем наш traefik
Если вы не желаете устанавливать и настраивать dnsmasq, то можно добавлять ваши сайты в /etc/hosts
, часто этого будет достаточно.
Для генерации используется скрипт ./bin/create_certificate_for_domain.sh
.
Запуск очень простой, выполните в корне этого репозитория следующую команду.
./bin/create_certificate_for_domain.sh dev.docker
Добавить ваш CA сертификат на linux в chrome можно через меню Настройки -> Настроить сертификаты -> Центры сертификации
. Разрешити использовать данный сертификат "Доверять этуму сертификату для подтверждения сайтов".
Создадим сеть proxy
docker network create --subnet=172.20.0.0/24 --attachable proxy
где 172.20.0.0/24
- это сеть на локальном компе где будет крутится наш traefik, и фронт-контейнеры наших проектов
Для простого запуска нам потребуется docker-compose
.
Если вы ничего не меняли в командах выше, то запуск сводится к следующему действию
docker-compose up -d
Для запуска наших контейнеров, нам надо будет исправить docker-compose.yml
нашего проекта.
Например
version: "3"
services:
web:
image: nginx:1.15.12-alpine
labels:
- traefik.enable=true
- traefik.backend=events
- traefik.frontend.rule=Host:events.dev.docker
- traefik.docker.network=proxy
volumes:
- ./src:/app
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
networks:
- proxy
networks:
proxy:
external: true
Самые интересные места тут
- описание блока
networks
внизу блока, где мы описываем нашу внешнюю сеть - блок
networks
в описании сервиса, говорящий что мы используем также сеть proxy для этого контейнера - блок
labels
, где описываются настройки traefik для контейнера
Всё остальное обычно.