Перейти к основному содержимому
  1. Статьи/

Установка обратного прокси Traefik в LXC-контейнер как systemd unit ч.1

·953 слов·5 минут· loading · loading · ·
Reverse Proxy Proxmox Linux Homelab
Stilicho2011
Автор
Stilicho2011
Site owner
Traefik - This article is part of a series.
Part : This Article

Введение
#

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 в конфигурации, если не установлено
Обратите внимание LXC контейнер использует только те ресурсы, которые ему нужны, а не все выделенные контейнеру.

Примерный вариант контейнера

Template: Debian 12 Disk: 32G CPU: 2 Memory: 2048 Swap: 0 Network: static IPv4: 192.168.x.x/24

Обязательно сделать следующее:

  1. Установить дату и время. Это важно, потому что мы с вами будем смотреть логи, а значит нам нужно, чтобы события указывали на корректное время. Более того, в будущем мы установим crowdsec или fail2ban, а значит корректный часовой пояс нам важен вдвойне. Ведь случаи и время атаки должны быть четко зафиксированны.

проверим настройки времени

timedatectl

узнайте правильно наименование вашего часового пояса

timedatectl list-timezones

установите ваш часовыой пояс

timedatectl set-timezone Europe/Moscow
  1. Обновим контейнер, вернее операционную систему
apt full-upgrade
  1. Установим необходимые зависимости. Список приведен достаточно условный, добавляйте то, что считаете нужным.
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/

Первый доступ в dashboard Traefik

Вид нашей консоли при тестовом запуске Traefik

Если все пошло на плану и все работает, то мы с вами создали фундамент для дальнейшей работы с обратным прокси

Шаг 5: Обновление Traefik
#

Вы спросите меня как обновлять Traefik в случае его установки как бинарного пакета? Хороший вопрос. На самом деле это очень просто, фактически мы с вами повторим шаги, указанные в пункте 2 настоящей инструкции.

  1. Идем на гитхаб Traefik и находим последний актуальный релиз

  2. Скачиваем нужный на файл командой

wget https://github.com/traefik/traefik/releases/download/v3.*.*/traefik_v3.*.*_linux_amd64.tar.gz
  1. Распаковываем
tar -zxvf traefik_v3.*.*_linux_amd64.tar.gz
  1. Перемещаем файл, где должны находится все бинарные файлы
mv ./traefik /usr/local/bin

В следующей части мы с вами рассмотрим вопрос о настройке полноценной рабочей инстанции нашего обратного прокси.

Ссылки
#

Traefik - This article is part of a series.
Part : This Article