MAATRIX / Блог / Как установить и настроить Traefik на VPS

Как установить и настроить Traefik на VPS

Как установить и настроить Traefik на VPS

MAATRIX

Когда на сервере крутится десяток контейнеров, каждый со своим доменом и сертификатом, ручная правка конфигов Nginx превращается в рутину. Установить Traefik на VPS стоит именно ради автоматизации: он сам обнаруживает контейнеры, сам маршрутизирует трафик по их меткам и сам выпускает сертификаты Let's Encrypt. Разберём установку по шагам — от запуска Traefik в Docker до рабочего HTTPS-роутинга с автообновлением сертификатов.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Что такое Traefik и чем он удобен

Traefik — это реверс-прокси и балансировщик, заточенный под динамические окружения вроде Docker. Его главное отличие от классического Nginx в способе конфигурации: вы не пишете отдельный конфиг на каждый сайт, а вешаете метки прямо на контейнеры. Traefik следит за Docker, видит новые контейнеры с метками и мгновенно настраивает для них маршруты и сертификаты — без перезапуска и правки файлов.

Из этого вытекает удобство для контейнерной инфраструктуры. Добавили новый сервис в compose-файл с парой меток — он тут же доступен по своему домену с HTTPS. Убрали — маршрут исчез. Не нужно помнить, где какой конфиг, и перезагружать прокси после каждого изменения. Для проектов с частыми деплоями и множеством микросервисов это экономит массу времени.

Есть и обратная сторона, о которой стоит сказать честно. Модель Traefik с метками требует привыкания, а его документация и синтаксис версий менялись, поэтому старые примеры из интернета часто не подходят под актуальную версию. Для одного статичного сайта Traefik избыточен — там проще Caddy или Nginx. А вот когда сервисов много и они меняются, автоматизация Traefik окупается сразу.

Полезно понимать, из чего складывается маршрутизация в Traefik, чтобы дальше метки не выглядели магией. Точка входа (entrypoint) — это порт, на котором Traefik принимает трафик, обычно 80 и 443. Роутер — правило, которое решает, какому сервису отдать запрос, чаще всего по домену. Сервис — это сам ваш контейнер и то, как до него достучаться. И резолвер сертификатов — механизм выпуска TLS через Let's Encrypt. Все четыре сущности вы описываете метками на контейнере, а Traefik собирает из них рабочую конфигурацию на лету. Когда эта модель уложится в голове, добавление нового сайта становится делом нескольких строк, а вся рутина с сертификатами и перезагрузками уходит.

Подготовка VPS и сети Docker

Сам Traefik лёгкий, ресурсы нужны вашим сервисам. Для прокси плюс набор контейнеров комфортно на 2–4 ядрах и 4 ГБ RAM. Поставьте Docker, если его нет:

curl -fsSL https://get.docker.com | sh
systemctl enable --now docker

Traefik и проксируемые сервисы должны быть в одной сети Docker, чтобы прокси мог до них дотянуться. Создайте общую сеть заранее:

docker network create web

Локацию сервера выбирайте по аудитории проекта: для российских пользователей ниже пинг с RU-площадки, для доступа к зарубежным сервисам — US, для Европы — UK. У MAATRIX доступны все три с оплатой из России картой, СБП или криптой, поэтому сервер можно разместить ближе к пользователям без иностранных платёжных средств. Заранее убедитесь, что домены сервисов A-записями указывают на IP этого VPS, — иначе авто-SSL не пройдёт.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS

Запуск Traefik через Docker Compose

Traefik удобнее всего описать в отдельном compose-файле. Он поднимает прокси, даёт ему доступ к сокету Docker для обнаружения контейнеров, открывает порты 80 и 443 и настраивает выпуск сертификатов. Создайте compose.yaml:

services:
  traefik:
    image: traefik:v3.1
    restart: unless-stopped
    command:
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.le.acme.email=admin@example.com"
      - "--certificatesresolvers.le.acme.storage=/letsencrypt/acme.json"
      - "--certificatesresolvers.le.acme.httpchallenge.entrypoint=web"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./letsencrypt:/letsencrypt
    networks:
      - web

networks:
  web:
    external: true

Разберём ключевое. providers.docker включает обнаружение контейнеров, а exposedbydefault=false — важная настройка безопасности: Traefik проксирует только те контейнеры, которым вы явно это разрешили меткой, а не всё подряд. Блок certificatesresolvers.le настраивает выпуск сертификатов Let's Encrypt по HTTP-проверке с хранением в файле acme.json. Запустите:

docker compose up -d

Маршрутизация сервиса через метки

Теперь подключим реальный сервис. Магия Traefik в том, что маршрут и сертификат задаются метками прямо на контейнере приложения. Добавьте в его compose-описание метки:

services:
  app:
    image: myapp:1.0
    restart: unless-stopped
    networks:
      - web
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.app.rule=Host(`app.example.com`)"
      - "traefik.http.routers.app.entrypoints=websecure"
      - "traefik.http.routers.app.tls.certresolver=le"

networks:
  web:
    external: true

Что здесь происходит. traefik.enable=true разрешает Traefik проксировать этот контейнер (помните про exposedbydefault=false). Правило Host(...) говорит, по какому домену направлять трафик на сервис. Точка входа websecure — это HTTPS на 443, а tls.certresolver=le включает автоматический выпуск сертификата для этого домена. Поднимите сервис — и через несколько секунд он доступен по https://app.example.com с валидным сертификатом:

docker compose up -d

Никаких отдельных конфигов и перезапусков прокси: Traefik увидел новый контейнер, прочитал метки и настроил всё сам.

Дашборд, безопасность и защита acme.json

У Traefik есть веб-дашборд, показывающий текущие маршруты, сервисы и состояние сертификатов. Он полезен для отладки, но открывать его наружу без защиты нельзя — он раскрывает структуру вашей инфраструктуры. Включайте дашборд только за аутентификацией и по HTTPS, добавив ему собственный роутер с базовой авторизацией, либо ограничьте доступ по IP на уровне точки входа.

Отдельного внимания требует файл acme.json, где хранятся приватные ключи сертификатов. Traefik требует строгих прав на него, иначе откажется работать. Задайте их:

chmod 600 letsencrypt/acme.json

Если файла ещё нет, Traefik создаст его сам при первом выпуске, но каталог должен существовать и быть доступным на запись. Права 600 обязательны: с более открытыми правами Traefik из соображений безопасности не станет использовать хранилище. Это одна из самых частых причин, по которой «сертификаты не выпускаются» у новичков.

Проверка и обслуживание

Убедитесь, что маршрутизация и сертификаты работают. Проверьте логи Traefik на предмет ошибок выпуска и доступность сервиса:

docker compose logs -f traefik
curl -I https://app.example.com

В ответе должен быть валидный HTTPS и код 200. Если сертификат не выпустился, типовые причины те же, что у любого ACME: домен не указывает на сервер, закрыт порт 80, нужный для HTTP-проверки, или неверные права на acme.json.

Обслуживание Traefik минимально. Он сам продлевает сертификаты, сам подхватывает новые контейнеры и убирает исчезнувшие. Обновление самого прокси — это смена тега образа на новую версию и docker compose up -d, но перед мажорным обновлением проверьте примечания к версии: синтаксис меток и параметров между крупными версиями менялся. По мере роста числа сервисов Traefik экономит всё больше ручной работы, а когда контейнеров и трафика становится больше, чем тянет сервер, это видно по метрикам — и служит поводом взять VPS помощнее. У MAATRIX апгрейд доступен без смены провайдера, с оплатой из России картой или криптой.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Частые вопросы

Чем Traefik на VPS удобнее Nginx?

Traefik автоматически обнаруживает контейнеры Docker и настраивает маршруты и сертификаты по их меткам, без отдельных конфигов и перезапуска прокси на каждое изменение.

Почему Traefik не выпускает сертификат?

Частые причины: неверные права на acme.json (нужно chmod 600), домен не указывает на сервер или закрыт порт 80 для HTTP-проверки ACME.

Обязательно ли держать сервисы в одной сети с Traefik?

Да, прокси видит контейнеры только в общей сети Docker; создайте её заранее и подключайте к ней и Traefik, и проксируемые сервисы.

Как оплатить VPS под Traefik из России?

У MAATRIX доступна оплата картой российского банка, по СБП, криптовалютой или токеном MAAT, иностранная карта не требуется.

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.