Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.
Предварительные требования
Для использования Traefik нам понадобится следующее:
-
Один сервер или одна виртуальная машина с любым предустановленным дистрибутивом Linux. Желательно выбрать Ubuntu, Debian, RHEL или SLES в связи с тем что заявлены в качестве поддерживаемых для системы контейнеризации Docker. Для них всегда выпускаются стабильные и актуальные версии Docker. Мы будем использовать Ubuntu 22.04.
-
Установленный Docker и Docker Compose. Процесс установки Docker и Docker Compose на Ubuntu описан в нашей инструкции. Также можно воспользоваться готовым образом с предустановленным Docker при создании облачного сервера. Для этого в разделе «Образ» необходимо перейти во вкладку «Маркетплейс» и найти образ с Docker.
Один сервер или одна виртуальная машина с любым предустановленным дистрибутивом Linux. Желательно выбрать Ubuntu, Debian, RHEL или SLES в связи с тем что заявлены в качестве поддерживаемых для системы контейнеризации Docker. Для них всегда выпускаются стабильные и актуальные версии Docker. Мы будем использовать Ubuntu 22.04.
Установленный Docker и Docker Compose. Процесс установки Docker и Docker Compose на Ubuntu описан в нашей инструкции. Также можно воспользоваться готовым образом с предустановленным Docker при создании облачного сервера. Для этого в разделе «Образ» необходимо перейти во вкладку «Маркетплейс» и найти образ с Docker.
В качестве используемых приложений будут запущены два контейнера с веб-сервером Nginx. При переходе по доменному имени каждого контейнера будет отображаться соответствующая строка. Создание контейнеров будет описано в отдельном разделе текущей статьи.
Создание облачного сервера
В первую очередь нам нужно арендовать облачный сервер.
-
Переходим на страницу авторизации и входим в аккаунт при помощи логина или адреса электронной почты и пароля или при помощи Passkey, ВКонтакте, GitHub, Google.
-
После успешной авторизации отобразится панель управления текущего проекта. Переходим в раздел «Облачные серверы» и нажимаем «Создать» или «Добавить».
-
Выбираем операционную систему, которая будет установлена на сервер. В нашем случае нам необходима Ubuntu версии 22.04.
Также в этом же разделе можно выбрать уже готовый образ с Docker, перейдя во вкладку «Маркетплейс»:
-
Выбираем регион, в котором будет находиться наш сервер. Выбирать рекомендуется тот регион, который ближе всего находится к вам физически. У каждого доступного региона справа вверху отображается ping, т.е. время, необходимое для передачи данных с вашего компьютера на сервер. Чем меньше указанное время, тем быстрее будет осуществляться передача данных.
-
Далее выбираем необходимую конфигурацию для сервера. Так как В этом материале будут рассмотрены Traefik и приложения без реальной нагрузки, то для конфигурации сервера можно выбрать минимальную конфигурацию, включающую в себя одноядерный процессор, 1 ГБ оперативной памяти и 15 ГБ места на NVMe-диске. В реальности вам необходимо выбирать ту конфигурацию, которая будет удовлетворять вашим потребностям при работе с контейнерными приложениями и их образами. Стоит отметить, что сам Docker потребляет минимум ресурсов. Расчет необходимой конфигурации происходит из той нагрузки, которую будет использовать контейнер. Выбираем соответствующий тариф:
-
Далее необходимо решить, будет ли сервер доступен из внешний сети или же только из приватной (частной) сети. Если не уверены в настройках, оставьте эти параметры без изменений.
-
По желанию можно оформить дополнительные услуги, включая резервные копии и защиту от DDoS-атак (последняя доступна только в Санкт-Петербурге и Москве):
-
Также заранее можно загрузить SSH-ключ, чтобы не входить на север при помощи пароля.
-
Можно задать необходимое имя для сервера которое будет отображаться в панели управления, а также выбрать проект.
-
Для создания сервера необходимо нажать на кнопку «Заказать»:
Если на вашем аккаунте недостаточно средств, то будет выведено предупреждение о необходимости пополнить баланс. После оплаты и создания сервера откроется Дашборд сервера, где можно будет найти IP-адрес, логин и пароль для подключения.
Настройка и запуск Traefik
Для начала произведем настройку Traefik.
- Создаем директорию для хранения конфигурационных файлов и переходим в нее:
mkdir ~/test-traefik && cd ~/test-traefik-
Внутри корневой директории проекта создадим три директории: одну для хранения конфигурационного файла Traefik, а две другие для хранения конфигурационных файлов приложений, которые будут использовать Traefik:
-
Создаем основной конфигурационный файл для Traefik с именем
traefik.ymlв ранее созданной директорииtraefik:
И вставляем следующий код:
entryPoints:
web:
address: ":80"
providers:
docker:
exposedByDefault: false
api:
dashboard: true
insecure: trueentryPoints— точки входа (порт и протокол), через которые Traefik будет принимать запросы. Они определяют, на каком порту и IP-адресе сервис будет слушать трафик.**
**
* `web` — уникальное имя для точки входа, которое можно использовать для ее указания в маршрутах. В данном примере в качестве имени используется имя `web`.
* `address: ":80"` — указывает, что точка входа будет принимать трафик на порту 80 (HTTP) на всех доступных сетевых интерфейсах в системе.providers— источники информации о том, какие маршруты и сервисы нужно использовать (например, Docker, Kubernetes, файлы и т.д.).
* `docker` — включение и использование провайдера Docker. При использовании провайдера `docker` Traefik автоматически обнаруживает запущенные контейнеры и маршруты к ним.
* `exposedByDefault: false` — отключает автоматическое добавление всех Docker-контейнеров как сервисов. Это делает конфигурацию намного безопаснее: только контейнеры с явным включением через `labels` (`traefik.enable=true`) будут маршрутизироваться (принимать и обрабатывать трафик).api— содержит настройки административного API и встроенного веб-интерфейса мониторинга Traefik.
* `dashboard: true` — включает веб-панель мониторинга Traefik, при помощи которой можно отслеживать активные маршруты, точки входа и сервисы. Веб-панель не является обязательным компонентом и может быть выключена при помощи значения `false`.
* `insecure: true` — позволяет получить доступ до веб-панели мониторинга по протоколу HTTP. Это удобно для тестирования и ознакомления с системой, однако небезопасно использовать в production-окружении. Чтобы использовать веб-панель только про защищенному протоколу HTTPS, необходимо указать значение `false`.-
web— уникальное имя для точки входа, которое можно использовать для ее указания в маршрутах. В данном примере в качестве имени используется имяweb. -
address: ":80"— указывает, что точка входа будет принимать трафик на порту 80 (HTTP) на всех доступных сетевых интерфейсах в системе. -
docker— включение и использование провайдера Docker. При использовании провайдераdockerTraefik автоматически обнаруживает запущенные контейнеры и маршруты к ним. -
exposedByDefault: false— отключает автоматическое добавление всех Docker-контейнеров как сервисов. Это делает конфигурацию намного безопаснее: только контейнеры с явным включением черезlabels(traefik.enable=true) будут маршрутизироваться (принимать и обрабатывать трафик). -
dashboard: true— включает веб-панель мониторинга Traefik, при помощи которой можно отслеживать активные маршруты, точки входа и сервисы. Веб-панель не является обязательным компонентом и может быть выключена при помощи значенияfalse. -
insecure: true— позволяет получить доступ до веб-панели мониторинга по протоколу HTTP. Это удобно для тестирования и ознакомления с системой, однако небезопасно использовать в production-окружении. Чтобы использовать веб-панель только про защищенному протоколу HTTPS, необходимо указать значениеfalse.
Подготовка конфигурационных файлов для приложений
Теперь подготовим конфигурационные файлы для приложений, которые будут использовать Traefik в качестве обратного прокси-сервера. Для этого будут подняты два контейнера с Nginx. При переходе по адресу каждого контейнера будет отображаться соответствующее сообщение.
- Создаем конфигурационный Nginx файл для первого приложения:
server {
listen 80;
server_name app1.test.com;
location / {
root /usr/share/nginx/html;
index index.html;
}
}В качестве имени сервера укажем локальное доменное имя app1.test.com. Можно указать как IP-адрес, так и доменное имя. Если у вас еще нет глобального доменного имени, можно вписать любое имя, которое будет доступно только на локальном уровне. Также необходимо прописать выбранный домен в файле /etc/hosts (будет рассмотрено далее).
Создаем директорию html, в которой будет храниться файл index.html для нашего первого приложения:
Запишем фразу «Welcome to App 1» в файл index.html при помощи перенаправления ввода:
echo "<h1>Welcome to App 1</h1>" > app1/html/index.html- Для второго приложения воспроизводим те же шаги, что и для первого, заменив значения для второго приложения:
server {
listen 80;
server_name app2.test.com;
location / {
root /usr/share/nginx/html;
index index.html;
}
}Для второго приложения также зададим локальное доменное имя.
Создаем директорию html, в которой будет храниться файл index.html для нашего второго приложения:
Запишем фразу «Welcome to App 2» в файл index.html при помощи перенаправления ввода:
echo "<h1>Welcome to App 2</h1>" > app2/html/index.htmlТак как мы использовали локальные доменные имена, их необходимо заранее прописать в системе. Для этого открываем на редактирование файл hosts при помощи любого текстового редактора:
И прописываем ранее заданные локальные доменные имена:
127.0.0.1 app1.test.com
127.0.0.1 app2.test.comИтоговая структура проекта выглядит следующим образом:
Запуск Traefik и приложений
Теперь переходим к запуску Traefik и приложений. Для этого в корневой директории проекта (test-traefik) создаем файл docker-compose.yml:
Вставляем следующую конфигурацию:
Для запуска контейнеров используем команду:
Если Docker Compose был установлен при помощи пакета docker-compose-plugin, то команда для запуска контейнеров будет следующей:
Проверяем статус запущенных контейнеров при помощи команды:
У всех контейнеров должен быть статус Up.
Проверим, смогут ли запущенные контейнеры с Nginx-сервисами принимать трафик. Для этого отправим запрос к доменным именам, используя утилиту curl.
Как можно увидеть, оба сервиса вернули ответ в виде ранее заданных ранее строк.
Также проверим веб-панель мониторинга Traefik. Для этого в браузере переходим по IP-адресу сервера и порту 8080:
В разделе «Routers» будут отображаться ранее заданные маршруты app1.test.com и app2.test.com:
Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.