Введение#
Traefik — это современный обратный прокси и балансировщик нагрузки, идеально подходящий для self-hosting и DevOps решений. В данной статье мы пошагово рассмотрим, как установить Traefik в LXC-контейнер Proxmox и запустить его как systemd
-сервис, что позволяет добиться высокой отказоустойчивости и интеграции с системной инициализацией.
Для удобства я разделил описание этого достаточно нетривиального процесса на две части. В этой статье идет речь о подготовке и начальном тестировании работоспособности нашего обратного прокси.
Преимущества установки Traefik как systemd unit#
- ✅ Стартует автоматически при загрузке контейнера
- ✅ Управляется как полноценная служба (
systemctl start/stop/status
) - ✅ Работает стабильно без Docker
- ✅ Простая интеграция с другими сервисами
Требования#
Перед началом убедитесь, что у вас есть:
- ✅ Непривилегированный (забудьте про привилегированный контейнер в данном случае) LXC-контейнер на Proxmox
- ✅ Debian/Ubuntu внутри контейнера, но в данном случае, крайне желательно Debian. Черт с ним, что там устаревшие пакеты, нам главное стабильность.
- ✅ Доступ по SSH или консоли.
- ✅ Внешний FQDN домен и настроенный DNS сервер, который (например,
traefik-dashboard.domain.ru
) четко указывает, что все запросы в виде*.domain.ru
должны быть перенаправлены на ip вашего контейнера, где установлен traefik
Шаг 1: Создание LXC-контейнера#
В Proxmox создайте непривилегированный контейнер:
- ОС: Debian 12 (рекомендуется)
- Тип: Непривилегированный (поддерживается Traefik)
- Сеть: Bridge (например,
vmbr0
) - Включите опцию
Nesting: ON
- Установите
unprivileged: 1
в конфигурации, если не установлено
Примерный вариант контейнера
Template: Debian 12 Disk: 32G CPU: 2 Memory: 2048 Swap: 0 Network: static IPv4: 192.168.x.x/24
Обязательно сделать следующее:
- Установить дату и время. Это важно, потому что мы с вами будем смотреть логи, а значит нам нужно, чтобы события указывали на корректное время. Более того, в будущем мы установим crowdsec или fail2ban, а значит корректный часовой пояс нам важен вдвойне. Ведь случаи и время атаки должны быть четко зафиксированны.
проверим настройки времени
timedatectl
узнайте правильно наименование вашего часового пояса
timedatectl list-timezones
установите ваш часовыой пояс
timedatectl set-timezone Europe/Moscow
- Обновим контейнер, вернее операционную систему
apt full-upgrade
- Установим необходимые зависимости. Список приведен достаточно условный, добавляйте то, что считаете нужным.
apt install curl tar sudo lshw apt-transport-https
Шаг 2: Установка бинарного файла Traefik и первый тестовый прогон#
Идем на гитхаб репозиторий traefik.
# скачиваем архив c последней версией обратного прокси
wget https://github.com/traefik/traefik/releases/download/v3.4.4/traefik_v3.4.4_linux_amd64.tar.gz
# распаковываем архив
tar -zxvf traefik_v3.4.4_linux_amd64.tar.gz
# перемещаем бинарный файл туда где он и должен храниться, и где находятся все бинарные файлы
mv traefik /usr/local/bin/
Теперь можно удалить ненужный архив.
Шаг 3: Создаем предполагаемую структуру управления traefik, то есть местоположение для хранения статической и динамической конфигурации.#
Вся конфигурация нашего обратно прокси состоит yaml файлов, которые будут определять статическую и динамическую конфигурацию (У вас может быть все по другому, вернее местопложение файлов может быть другое, главное, чтобы пути были бы правильно прописаны)
mkdir /etc/traefik
- у нас будет один конфигурационный файл статической конфигурации
mkdir /etc/traefik/dynamic
- все файлы динамической конфигурации у нас будут храниться в соответствующей директории. Можно конечно использовать только один файл динамической конфигурации, но в итоге там будет минимум 100 строк, на самом деле больше, а такой объем со временем станет достаточно сложно воспринимать
touch /etc/traefik/acme.json
- создаем файл, в котором будут храниться данные о наших сертификатах
chmod 600 /etc/traefik/acme.json
- задаем необходимые права на acme.json файл. В противном случае Traefik просто не запустится. Считаю, что наличие такой защиты от дурака - большой плюс.
Шаг 4: Запуск тестовой конфигурации#
Создаем на данном этапе тестовую конфигурацию Traefik, которая нам нужна исключительно для тестирования работоспособности самого обратного прокси. В дальнейшем мы с вами все расширим и углубим(с).
nano /etc/traefik/traefik.yaml
# Это простой статический конфиг. Еще раз, у нас все будет работать нативно, никакого докера.
# Подумайте на тем, чтобы активировать опцию передачи анонимной статистики использования приложения, так как это поможет разработчикам.
# Уровень логирования DEBUG покажет вам все debug сообщения в консоли, пока Traefik в запущенном состоянии.
# Любой yaml файл, который у нас будет расположени в директории `/etc/traefik/dynamic` будет обработан в режиме реального времени, соответственно позволяет «на лету» изменять конфигурацию маршрутов, сервисов, middlewares, TLS и серверных транспортов. Это значит что нам не нужно будет каждый раз перезапускать сервис
# Мы указываем простые и пока незащищенные точки входа web and websecure.
# Разрешаем небезопасный (ну это пока не выпустили сертификат) доступ к панели Traefik и доступ к API.
# Так как yaml формат чувствителен к пробелам, то если у вас в файл где-то лишний пропуск/пробел, сервис просто не запустится, но в логах вы должны увидеть в какой строке допущены ошибка. Хотя номер строки и может быть указан неверно, поэтому бдительности все-таки терять не стоит.
# https://doc.traefik.io/traefik/contributing/data-collection/
global:
checkNewVersion: true
sendAnonymousUsage: true
# https://doc.traefik.io/traefik/operations/api/
api:
dashboard: true
insecure: true
debug: true
disableDashboardAd: false
# https://doc.traefik.io/traefik/observability/logs/
log:
level: DEBUG #TRACE DEBUG INFO WARN ERROR FATAL PANIC
# https://doc.traefik.io/traefik/routing/entrypoints/
entryPoints:
web:
address: ":80"
websecure:
address: ":443"
#------------: https://doc.traefik.io/traefik/providers/file/
providers:
file:
directory: /etc/traefik/dynamic
watch: true
Проверка работоспособности#
Вводим неожиданную команду traefik
- чтобы запустить наш обратный прокси и проверить что на данном этапе все хорошо: прокси работает и мы с вами можем получить доступ к вебпанели traefik.
Переходим по айпи адресу нашего обратного прокси, который доступен по умолчанию по порту 8080
http://192.168.0.11:8080/dashboard/
Если все пошло на плану и все работает, то мы с вами создали фундамент для дальнейшей работы с обратным прокси
Шаг 5: Обновление Traefik#
Вы спросите меня как обновлять Traefik в случае его установки как бинарного пакета? Хороший вопрос. На самом деле это очень просто, фактически мы с вами повторим шаги, указанные в пункте 2 настоящей инструкции.
Идем на гитхаб Traefik и находим последний актуальный релиз
Скачиваем нужный на файл командой
wget https://github.com/traefik/traefik/releases/download/v3.*.*/traefik_v3.*.*_linux_amd64.tar.gz
- Распаковываем
tar -zxvf traefik_v3.*.*_linux_amd64.tar.gz
- Перемещаем файл, где должны находится все бинарные файлы
mv ./traefik /usr/local/bin
В следующей части мы с вами рассмотрим вопрос о настройке полноценной рабочей инстанции нашего обратного прокси.