Введение#
Traefik — это современный обратный прокси и балансировщик нагрузки, идеально подходящий для self-hosting и DevOps решений. В данной статье мы пошагово рассмотрим, как установить Traefik в LXC-контейнер Proxmox и запустить его как systemd
-сервис, что позволяет добиться высокой отказоустойчивости и интеграции с системной инициализацией.
Для удобства я разделил описание этого достаточно нетривиального процесса на две части. В этой статье пойдет речь о подготовке и первичном тестировании работоспособности нашего обратного прокси.
Если вам понравилась настоящая статья, то можете меня поддержать став спонсором на бусти (ссылка в разделе контакты).#
Преимущества установки Traefik как systemd unit#
- ✅ Стартует автоматически при загрузке контейнера
- ✅ Управляется как полноценная служба (
systemctl start/stop/status
) - ✅ Работает стабильно без Docker
- ✅ Простая интеграция с другими сервисами
Требования#
Перед началом убедитесь, что у вас есть:
- ✅ Непривилегированный (забудьте про привилегированный контейнер, в данном конкретном случае, как страшный сон) LXC-контейнер на Proxmox
- ✅ Debian/Ubuntu внутри контейнера, но крайне желательно использовать Debian. Черт с ним, что там устаревшие пакеты, нам главное стабильность.
- ✅ Доступ по SSH или консоли.
- ✅ Внешний FQDN домен и настроенный DNS сервер, который четко указывает, что все запросы в виде
*.domain.ru
должны быть перенаправлены на ip вашего контейнера, где установлен traefik
Шаг 1: Создание LXC-контейнера#
В Proxmox создайте непривилегированный контейнер:
- ОС: Debian 12 или 13 (рекомендуется)
- Тип: Непривилегированный (поддерживается Traefik)
- Сеть: Bridge (например,
vmbr0
) - Включите опцию
Nesting: ON
- Установите
unprivileged: 1
в конфигурации, если не установлено
Примерный вариант контейнера
Template: Debian 12 или 13 Disk: 32G CPU: 2 Memory: 2048 Swap: 0 Network: static IPv4: 192.168.x.x/24
Обязательно сделать следующее:
- Установить дату и время. Это важно. Мы с вами будем смотреть логи данного контейнера, а значит нам нужно, чтобы события указывали на корректное время. Более того, в будущем мы установим
crowdsec
, а значит корректный часовой пояс нам важен вдвойне. Ведь время атаки должно быть четко зафиксировано.
Проверим настройки времени
timedatectl
Узнайте правильное наименование вашего часового пояса:
timedatectl list-timezones
Установите ваш часовой пояс по образу и подобию моего
timedatectl set-timezone Europe/Moscow
- Обновим контейнер, вернее операционную систему
apt full-upgrade
- Установим необходимые зависимости. Список, который приведен ниже, достаточно условный, добавляйте то, что считаете нужным.
apt install curl tar sudo lshw apt-transport-https
Шаг 2: Установка бинарного файла Traefik и первый тестовый прогон#
Идем на github репозиторий 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.
Переходим по ip адресу нашего обратного прокси, который доступен по умолчанию по порту 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
В следующей части мы с вами рассмотрим вопрос настройки полноценной рабочей инстанции нашего обратного прокси.