Как настроить Traefik для контейнеров Docker в Ubuntu 20.04
Traefik — это один из современных методов, который используется для настройки обратного прокси для docker-контейнеров. Если вы хотите запустить несколько приложений в контейнерах докеров, открывающих порт 80 и 443, traefik может быть лучшим вариантом для обратного прокси. Traefik предоставляет собственную панель мониторинга. Вы также можете использовать Traefik для балансировки нагрузки HTTP. В этой статье мы собираемся настроить Traefik v2.4 на Ubuntu 20.04 на простом примере.
Предпосылки
- Ubuntu 20.04 LTS
- Докер CE (Community Edition)
- Интернет-соединение для загрузки пакетов
- Учетная запись привилегированного пользователя Sudo
- Домен для панели управления traefik [Следует поддерживать запись A]
- Домен для сайта wordpress [Следует поддерживать запись A]
В этой статье мы используем linuxtechi.local в качестве домена и traefik.linuxtechi.local в качестве FQDN для панели управления Traefik.
Шаги по настройке Traefik на Ubuntu 20.04
В этой статье сначала мы настроим Traefik, а затем зарегистрируем контейнер WodressPress для traefik для обратного прокси и балансировки нагрузки. Мы настроим Traefik для обслуживания всего через HTTPS, используя SSL-сертификат Let’s encrypt.
Выполните следующие действия, чтобы настроить обратный прокси Traefik.
Шаг 1) Настроить Traefik
Создайте файлы конфигурации и установите зашифрованный пароль для доступа к панели управления traefik. Вы можете использовать утилиту htpasswd для создания зашифрованного пароля. Чтобы использовать утилиту htpasswd, установите ее с помощью следующей команды.
$ sudo apt-get install -y apache2-utils
После завершения установки выполните следующую команду, чтобы сгенерировать зашифрованный пароль. В этом примере я использовал « Traefik@123 # » для шифрования. У вас могут быть свои собственные предположения. Пользователь считается администратором, вы можете заменить его своим именем пользователя.
$ htpasswd -nb admin Traefix@123#
Вы получите зашифрованный пароль:
root@infoit.com.ua:~$ htpasswd -nb admin Traefix@123# admin:$apr1$V.9MT9VH$MtLgwiAa4jq1ngDVvTdJu/ root@infoit.com.ua:~$
Скопируйте этот вывод и сохраните его где-нибудь, так как нам нужно использовать этот зашифрованный пароль в файле конфигурации Traefik для настройки базовой аутентификации для панели управления Traefik.
Теперь создайте файл конфигурации с именем traefik.toml, используя формат TOML. Мы будем использовать трех поставщиков Traefik, а именно api, docker и acme. Acme предоставляет сертификаты Let’s encrypt TLS.
Создайте файл traefik.toml со следующим содержимым
$ vi traefik.toml [entryPoints] [entryPoints.web] address = ":80" [entryPoints.web.http.redirections.entryPoint] to = "websecure" scheme = "https" [entryPoints.websecure] address = ":443" [api] dashboard = true [certificatesResolvers.lets-encrypt.acme] email = "info@linuxtechi.local" storage = "acme.json" [certificatesResolvers.lets-encrypt.acme.tlsChallenge] [providers.docker] watch = true network = "web" [providers.file] filename = "traefik_secure.toml"
Сохраните и закройте файл
В приведенном выше примере веб-точка входа в файл обрабатывает порт 80, в то время как веб-безопасность точки входа обрабатывает порт 443 для подключения SSL / TLS.
Весь трафик на порту 80 принудительно перенаправляется на точку входа websecure для безопасных соединений. Не забудьте изменить адрес электронной почты и домен в приведенном выше файле «traefik.toml», который подходит для вашей настройки.
Давайте создадим другой файл traefik_secure.toml со следующим содержимым.
$ vi traefik_secure.toml [http.middlewares.simpleAuth.basicAuth] users = [ "admin:$apr1$V.9MT9VH$MtLgwiAa4jq1ngDVvTdJu/" ] [http.routers.api] rule = "Host(`traefik.linuxtechi.local`)" entrypoints = ["websecure"] middlewares = ["simpleAuth"] service = "api@internal" [http.routers.api.tls] certResolver = "lets-encrypt"
Сохраните и выйдите из файла.
Приведенное выше содержимое позволит включить аутентификацию по имени пользователя и паролю для панели управления Traefik, а также позволит шифровать сертификаты TLS для маршрутизаторов http.
Не забудьте изменить строку пароля для пользователя admin и запись хоста в приведенном выше файле, который подходит для вашей настройки.
Шаг 2) Бегущий траэфик контейнер
Создайте новую сеть докеров для использования прокси-сервером в контейнерах. Используйте следующую команду для создания сети докеров.
$ docker network create web
Когда вы запускаете контейнер traefik, добавьте контейнер в эту сеть. Вы можете добавить в эту сеть дополнительные контейнеры, чтобы Traefik работал в качестве обратного прокси.
Создайте пустой файл, который содержит. Давайте зашифруем информацию и соответствующим образом изменим права доступа.
$ touch acme.json $ chmod 600 acme.json
Как только этот json-файл переместится в контейнер докеров, владелец автоматически изменится на root.
Создайте контейнер traefik, используя следующую команду:
$ docker run -d \ -v /var/run/docker.sock:/var/run/docker.sock \ -v $PWD/traefik.toml:/traefik.toml \ -v $PWD/traefik_secure.toml:/traefik_secure.toml \ -v $PWD/acme.json:/acme.json \ -p 80:80 \ -p 443:443 \ --network web \ --name traefik \ traefik:v2.4
Поскольку команда слишком длинная, она разбита на несколько строк.
Теперь вы можете получить доступ к панели управления traefik, чтобы следить за состоянием контейнеров. Перейдите по адресу https://your_domain.com/dashboard/ [Замените your_domain своим собственным доменом] и предоставьте учетные данные администратора [имя пользователя — admin, а пароль — зашифрованный пароль, созданный на шаге выше]. В моем случае URL-адрес будет:
https://traefik.linuxtechi.local/dashboard/
После входа на панель управления у вас будет следующий интерфейс.
Шаг 3) Зарегистрируйте контейнеры в Traefik
Вы настроили Traefik, который работает на вашем сервере. На этом этапе я собираюсь добавить контейнер WordPress для Traefik в прокси. Контейнер WordPress будет управляться с помощью Docker Compose.
Создадим файл docker-compose.yml со следующим содержимым.
$ vi docker-compose.yml
Чтобы указать версию и сеть, которые мы будем использовать, добавьте в файл следующие строки.
version: "3" networks: web: external: true internal: external: false
Я использовал версию 3, потому что это последняя версия Docker Compose. Traefik распознает наши приложения, только если они являются частью одной сети. На предыдущих шагах я создал сеть докеров вручную с сетевым именем web, поэтому я включил эту сеть в файл docker-compose.yml и открыл ее для внешнего доступа для прокси-сервера traefik. Я определил другую сеть для соединения нашего приложения с контейнером базы данных, который не нужно открывать через traefik.
Теперь определите каждую из служб. Во-первых, создайте сервис для приложения WordPress. Добавьте следующие строки в файл docker-compose.yml.
services: wordpress: image: wordpress:latest environment: WORDPRESS_DB_HOST: mysql:3306 WORDPRESS_DB_USER: dbuser WORDPRESS_DB_PASSWORD: dbpass@123# WORDPRESS_DB_NAME: wordpress_db labels: - traefik.http.routers.blog.rule=Host(`blog.linuxtechi.local`) - traefik.http.routers.blog.tls=true - traefik.http.routers.blog.tls.certresolver=lets-encrypt - traefik.port=80 networks: - internal - web depends_on: - mysql
Я использовал traefik.port = 80 , traefik будет использовать этот порт для маршрутизации трафика в контейнер WordPress.
Замените Host: blog.linuxtechi.com своим собственным доменом сайта WordPress.
Теперь вам нужно настроить службу MySQL для базы данных. Добавьте следующие строки в конец файла docker-compose.yml
mysql: image: mysql:latest environment: MYSQL_ROOT_PASSWORD: sqlpass@123# MYSQL_DATABASE: wordpress_db MYSQL_USER: dbuser MYSQL_PASSWORD: dbpass@123# networks: - internal labels: - traefik.enable=false
В этом примере я использовал последний образ MySQL для контейнера базы данных. Переменные среды для службы wordress и mysql определены в самом файле. Служба MySQL не нужна для прокси с помощью traefik, поэтому я использовал только внутренние сети.
Ваш полный файл docker-compose.yml будет выглядеть так:
version: "3" networks: web: external: true internal: external: false services: wordpress: image: wordpress:latest environment: WORDPRESS_DB_HOST: mysql:3306 WORDPRESS_DB_USER: dbuser WORDPRESS_DB_PASSWORD: dbpass@123# WORDPRESS_DB_NAME: wordpress_db labels: - traefik.http.routers.blog.rule=Host(`blog.linuxtechi.local`) - traefik.http.routers.blog.tls=true - traefik.http.routers.blog.tls.certresolver=lets-encrypt - traefik.port=80 networks: - internal - web depends_on: - mysql mysql: image: mysql:latest environment: MYSQL_ROOT_PASSWORD: sqlpass@123# MYSQL_DATABASE: wordpress_db MYSQL_USER: dbuser MYSQL_PASSWORD: dbpass@123# networks: - internal labels: - traefik.enable=false
Сохраните файл и выйдите из файла
Теперь выполните следующую команду, чтобы создать контейнер MySQL и wordpress.
$ docker-compose up -d
Теперь перейдите на панель управления Traefik и щелкните маршрутизаторы HTTP , вы обнаружите, что на панель управления добавлены новые контейнеры.
Теперь используйте URL-адрес blog.linuxtechi.local [Замените на свой домен]. Вы будете перенаправлены к мастеру установки WordPress с подключением TLS.
Завершите работу мастера установки. Теперь вы готовы использовать свой сайт WordPress.
Заключение:
В этой статье вы узнали, как настроить traefik в Ubuntu 20.04. У вас появилась идея, как автоматически регистрировать контейнеры в traefik для балансировки нагрузки и обратного прокси. Кроме того, вы узнали, как настроить сайты WordPress с помощью прокси-сервера traefik.