Введение
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в конфигурации, если не установлено
{{< alert >}} Обратите внимание LXC контейнер использует только те ресурсы, которые ему нужны, а не все выделенные контейнеру. {{< /alert >}}
Примерный вариант контейнера
Template: Debian 12 или 13 Disk: 32G CPU: 2 Memory: 2048 Swap: 0 Network: static IPv4: 192.168.x.x/24
Обязательно сделать следующее:
- Установить дату и время. Это важно. Мы с вами будем смотреть логи данного контейнера, а значит нам нужно, чтобы события указывали на корректное время. Более того, в будущем мы установим
crowdsec, а значит корректный часовой пояс нам важен вдвойне. Ведь время атаки должно быть четко зафиксировано.
Проверим настройки времени
1timedatectlУзнайте правильное наименование вашего часового пояса:
1timedatectl list-timezonesУстановите ваш часовой пояс по образу и подобию моего
1timedatectl set-timezone Europe/Moscow- Обновим контейнер, вернее операционную систему
1apt full-upgrade- Установим необходимые зависимости. Список, который приведен ниже, достаточно условный, добавляйте то, что считаете нужным.
1apt install curl tar sudo lshw apt-transport-httpsШаг 2: Установка бинарного файла Traefik и первый тестовый прогон
Идем на github репозиторий traefik.
1# скачиваем архив c последней версией обратного прокси2wget https://github.com/traefik/traefik/releases/download/v3.4.4/traefik_v3.4.4_linux_amd64.tar.gz1# распаковываем архив2tar -zxvf traefik_v3.4.4_linux_amd64.tar.gz1# перемещаем бинарный файл туда где он и должен храниться, и где находятся все бинарные файлы2mv 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, которая нам нужна исключительно для тестирования работоспособности самого обратного прокси. В дальнейшем мы с вами все расширим и углубим(с).
1nano /etc/traefik/traefik.yaml`1# Это простой статический конфиг. Еще раз, у нас все будет работать нативно, никакого докера.2# Подумайте на тем, чтобы активировать опцию передачи анонимной статистики использования приложения, так как это поможет разработчикам.3# Уровень логирования DEBUG покажет вам все debug сообщения в консоли, пока Traefik в запущенном состоянии.4# Любой yaml файл, который у нас будет находиться в директории `/etc/traefik/dynamic` будет обработан в режиме реального времени, соответственно позволяет «на лету» изменять конфигурацию маршрутов, сервисов, middlewares, TLS и серверных транспортов. Это значит что нам не нужно будет каждый раз перезапускать сервис5# Мы указываем простые и пока незащищенные точки входа web and websecure.6# Разрешаем небезопасный (пока не выпустили сертификаты) доступ к панели Traefik и доступ к API.7# Так как yaml формат чувствителен к пробелам, то если у вас в файл где-то лишний пропуск/пробел, сервис просто не запустится, но в логах вы должны увидеть в какой строке допущены ошибка. При этом номер строки с ошибкой может быть указан неверно, поэтому бдительности все-таки терять не стоит.8
9# https://doc.traefik.io/traefik/contributing/data-collection/10global:11 checkNewVersion: true12 sendAnonymousUsage: true13
14# https://doc.traefik.io/traefik/operations/api/15api:16 dashboard: true17 insecure: true18 debug: true19 disableDashboardAd: false20
21# https://doc.traefik.io/traefik/observability/logs/22log:23 level: DEBUG #TRACE DEBUG INFO WARN ERROR FATAL PANIC24
25# https://doc.traefik.io/traefik/routing/entrypoints/26entryPoints:27 web:28 address: ":80"29 websecure:30 address: ":443"31
32#------------: https://doc.traefik.io/traefik/providers/file/33providers:34 file:35 directory: /etc/traefik/dynamic36 watch: trueПроверка работоспособности
Вводим неожиданную команду traefik - чтобы запустить наш обратный прокси и проверить что на данном этапе все хорошо: прокси работает и мы с вами можем получить доступ к веб-панели Traefik.
Переходим по ip адресу нашего обратного прокси, который доступен по умолчанию по порту 8080
http://192.168.0.11:8080/dashboard/


Если все пошло на плану и все работает, то мы с вами создали фундамент для дальнейшей работы с обратным прокси
Шаг 5: Обновление Traefik
Вы спросите меня как обновлять Traefik в случае его установки как бинарного пакета? Хороший вопрос. На самом деле это очень просто, фактически мы с вами повторим шаги, указанные в пункте 2 настоящей инструкции.
-
Идем на гитхаб Traefik и находим последний актуальный релиз
-
Скачиваем нужный на файл командой
1wget https://github.com/traefik/traefik/releases/download/v3.*.*/traefik_v3.*.*_linux_amd64.tar.gz- Распаковываем
1tar -zxvf traefik_v3.*.*_linux_amd64.tar.gz- Перемещаем файл, где находятся все бинарные файлы
1mv ./traefik /usr/local/binВ следующей части мы с вами рассмотрим вопрос настройки полноценной рабочей инстанции нашего обратного прокси.
Ссылки
Some information may be outdated