- Traefik описание
- Предпосылки
- Что мы будем делать?
- Шаг 1 – Установите Docker на Ubuntu 18.04
- Дополнительно: Запуск Docker для пользователя без полномочий root
- Шаг 2 – Установите Docker Compose
- Шаг 3 – Создание пользовательской сети Docker
- Шаг 4 – Установка и настройка обратного прокси-сервера Traefik
- Предварительная установка Traefik
- Создание конфигурации Traefik
- Создайте скрипт для Traefik Docker Compose
- Конфигурация ACME Letsencrypt
- Собираем контейнер Traefik
- Шаг 5 – Тестирование
Traefik описание
Traefik – это современный обратный прокси HTTP и балансировка нагрузки для микросервисов
Traefik упрощает развертывание всех микросервисов, интегрируется с существующими инфраструктурными компонентами, такими как Docker, Swarm Mode, Kubernetes, Amazon ECS, Rancher, Etcd, Consul и т. д.
Traefik служит в качестве маршрутизатора для всех ваших приложений микросервисов, маршрутизации всех клиентских запросов для исправления адресатов микросервисов.
В этом уроке я покажу вам шаг за шагом, как установить и настроить современный обратный прокси Traefik как контейнер Docker на Ubuntu 18.04 LTS (Bionic Beaver).
Предпосылки
- Ubuntu 18.04
- Root привилегии
Что мы будем делать?
- Установите Docker на Ubuntu 18.04
- Установка Docker Compose
- Создание пользовательской сети Docker
- Установка и настройка Traefik
- Тестирование
Шаг 1 – Установите Docker на Ubuntu 18.04
В этом руководстве мы будем использовать последнюю версию Docker, которая может быть установлена из официального репозитория.
Добавьте ключ и репозиторий, используя команду ниже.
# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
Команда «add-apt-repository» автоматически обновит все репозитории.
Теперь установите последнюю версию docker-ce.
# sudo apt install docker-ce
По завершении установки запустите службу Docker и включите ее каждый раз при загрузке системы.
# systemctl start docker # systemctl enable docker
Чтобы посмотреть версию введите:
docker version
Дополнительно: Запуск Docker для пользователя без полномочий root
Контейнер Docker может запускаться под пользователем без полномочий root.
Нам просто нужно добавить пользователя в группу Docker
Добавьте пользователя ‘mohammad’.
useradd -m -s /bin/bash mohammad
Теперь добавьте пользователя «mohammad» в группу Docker, затем перезапустите службу.
usermod -a -G docker mohammad systemctl restart docker
Протестируйте, запустив hello-world docker.
# docker run -it hello-world
И вот результат.
Шаг 2 – Установите Docker Compose
Docker-Compose – это инструмент командной строки для определения и управления многоконтейнерными приложениями.
Docker Compose – это скрипт python, его можно легко установить с помощью команды python pip или с помощью команды apt из репозитория Ubuntu.
С compose мы можем запускать несколько контейнеров Docker с помощью одной команды.
Установите docker из репозитория, используя команду apt ниже.
# sudo apt install docker-compose
По завершении установки проверьте версию
# docker-compose version
Шаг 3 – Создание пользовательской сети Docker
В этом учебнике контейнер traefik будет работать в настраиваемой сети Docker.
Поэтому нам нужно создать новую настраиваемую сеть Docker на сервере.
Проверьте доступную сеть Docker в системе.
# docker network ls
Теперь создайте новую настраиваемую сеть с именем «proxy» для контейнера traefik.
# docker network create proxy
И вы получите случайную строку имени сетевого контейнера. Проверьте снова доступную сеть.
# docker network ls
Результат ниже.
Создана настраиваемая Docker сеть с именем «proxy» для traefik.
Шаг 4 – Установка и настройка обратного прокси-сервера Traefik
На этом этапе мы создадим контейнер traefik с включенным HTTPS letsencrypt (с использованием имени домена ‘traefik.hakase-labs.io) и автоматически перенаправляем HTTP на HTTPS на traefik.
Предварительная установка Traefik
Перед созданием всей конфигурации traefik нам нужно установить «apache2-utils» для генерации зашифрованного пароля htpasswd и создания нового каталога traefik.
Установите ‘apache2-utils’, используя команду apt ниже.
# sudo apt install apache2-utils -y
Теперь запустите команду htpasswd ниже, чтобы сгенерировать новый пароль для проверки подлинности панели инструментов traefik.
# htpasswd -nb mohammad password
Сохраните результат в заметки.
mohammad:$apr1$hEgpZUN2$OYG3KwpzI3T1FqIg9LIbi.
Затем войдите в систему с пользователем «mohammad».
su mohammad
Создайте новый каталог с именем ‘traefik’ для всех конфигураций traefik.
mkdir -p traefik/ cd traefik/
Создание конфигурации Traefik
Перейдите в каталог «traefik» и создайте новый файл конфигурации «traefik.toml» с помощью редактора vim.
# cd traefik/ # vim traefik.toml
Вставьте конфигурацию ниже.
#Traefik Global Configuration debug = false checkNewVersion = true logLevel = "ERROR" #Define the EntryPoint for HTTP and HTTPS defaultEntryPoints = ["https","http"] #Enable Traefik Dashboard on port 8080 #with basic authentication method #mohammad and password [web] address = ":8080" [web.auth.basic] users = ["mohammad:$apr1$hEgpZUN2$OYG3KwpzI3T1FqIg9LIbi."] #Define the HTTP port 80 and #HTTPS port 443 EntryPoint #Enable automatically redirect HTTP to HTTPS [entryPoints] [entryPoints.http] address = ":80" [entryPoints.http.redirect] entryPoint = "https" [entryPoints.https] address = ":443" [entryPoints.https.tls] #Enable retry sending a request if the network error [retry] #Define Docker Backend Configuration [docker] endpoint = "unix:///var/run/docker.sock" domain = "traefik.hakase-labs.io" watch = true exposedbydefault = false #Letsencrypt Registration #Define the Letsencrypt ACME HTTP challenge [acme] email = "hakaselabs@gmail.com" storage = "acme.json" entryPoint = "https" OnHostRule = true [acme.httpChallenge] entryPoint = "http"
Заметка:Вся информация о конфигурации приведена в разделе комментариев «# …».
Создайте скрипт для Traefik Docker Compose
Теперь создайте ducker-compose yml script.
# vim docker-compose.yml
Вставьте конфигурацию ниже.
version: "3.5" services: react-ui: container_name: react_native build: context: ./reactUi ports: - '3001:3000' volumes: - './reactUi:/app' - '/app/node_modules' environment: - NODE_ENV=development networks: vegofy_default: resource_sever: container_name: resource_sever build: context: ./main_api ports: - 5000:5050 volumes: - './main_api:/home/app' working_dir: /home/app environment: - DEBUG=Auth - PRODPRES_DB=${PRODPRES_DB} - PRODPRES_DB_USER=${PRODPRES_DB_USER} - PRODPRES_DB_USER_PASS=${PRODPRES_DB_USER_PASS} - PRODPRES_DB_ROOT_PASS=${PRODPRES_DB_ROOT_PASS} command: sh -c "npm install && nodemon ." networks: vegofy_default: resource_sever_couchdb: container_name: resource_sever_couchdb image: couchdb ports: - "6000:5984" volumes: - resource_sever_data:/opt/couchdb/data - resource_sever_lib:/var/lib/couchdb environment: - COUCHDB_USER=${PRODPRES_DB_USER} - COUCHDB_PASSWORD=${PRODPRES_DB_USER_PASS} networks: vegofy_default: volumes: prodres_data: prodres_lib: networks: vegofy_default: name: vegofy_default
- Мы создаем новый контейнер с именем «traefik», основанный на образе «traecik: latest» docker.
- Контейнер ‘traefik’ будет запущен в пользовательской сети докеров с именем «proxy» и выведет внешние порты HTTP 80 и HTTPS 443.
- Контейнер будет монтировать конфигурацию traefik ‘traefik.toml’ и ‘acme.json’, включая файл сокета Docker
- Конфигурация метки для traefik, имя домена frontend и порт traefik.
Конфигурация ACME Letsencrypt
Конфигурация acme на ‘traefik.toml’ используется для автоматического создания SSL-разрешительного шифрования.
Создайте новый файл JSON «acme.json» и измените разрешение на «600»
touch acme.json chmod 600 acme.json
Собираем контейнер Traefik
Теперь мы готовы построить наш собственный контейнер traefik, используя вышеуказанные файлы конфигурации.
# cd traefik/ # ls -lah
Все файлы конфигурации «traefik.toml», «docker-compose.yml» и «acme.json».
Создайте контейнер, используя команду docker compose
docker-compose up -d
Когда все будет готово, проверьте запущенный контейнер.
docker-compose ps
Шаг 5 – Тестирование
Откройте веб-браузер и введите имя домена traefik в адресной строке. Мой:
http://traefik.hakase-labs.io/
Вы будете перенаправлены на HTTPS-соединение, и вас попросят ввести имя пользователя и пароль.
Войдите в систему с помощью пользователя «mohammad», а пароль – «password».
И вы получите панель инструментов Traefik, как показано ниже.
Страница статуса Traefik.
Traefik прокси установлен в качестве контейнера Docker на Ubuntu 18.04.
C Таким форматом docker-compose.yml, ничего не будет.
контейнер не запустится.
Спасибо, поправил 🙂
И сейчас тоже не запустится.
yaml.scanner.ScannerError: mapping values are not allowed here 32 линия
Показана же строка.
перед networks лишний пробел.
Поправил в статье
WARNING: The PRODPRES_DB variable is not set. Defaulting to a blank string.
WARNING: The PRODPRES_DB_USER variable is not set. Defaulting to a blank string.
WARNING: The PRODPRES_DB_USER_PASS variable is not set. Defaulting to a blank string.
WARNING: The PRODPRES_DB_ROOT_PASS variable is not set. Defaulting to a blank string.
ERROR: The Compose file ‘./docker-compose.yml’ is invalid because:
Unsupported config option for services.resource_sever: ‘resource_sever_couchdb’
И как это исправить?
попробуйте линтер для композа + $переменная должен быть определен в вашем окружении или в файле .env.