Traefik на VPS: reverse proxy с авто-SSL
Traefik сам находит ваши контейнеры, раздаёт им домены и выпускает SSL-сертификаты Let's Encrypt без единой ручной команды. Настроил один раз — новые сервисы подхватываются автоматически.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Почему Traefik, а не Nginx вручную
Классический Nginx требует писать конфиг под каждый новый сайт и вручную гонять certbot за сертификатами. Traefik работает иначе: он читает метки (labels) прямо у контейнеров Docker и на лету строит маршруты. Добавили сервис с нужными labels — домен и HTTPS появляются сами.
Для проекта с несколькими приложениями на одном VPS это экономит часы. Тем более что зарубежный сервер MAATRIX с оплатой из России позволяет спокойно выпускать сертификаты Let's Encrypt, которые требуют доступности домена извне.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPS под TraefikБазовый docker-compose для Traefik
Traefik сам запускается контейнером и слушает 80/443. Он общается с Docker через сокет и хранит сертификаты в томе.
services:
traefik:
image: traefik:v3.1
restart: always
command:
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.le.acme.tlschallenge=true"
- "--certificatesresolvers.le.acme.email=you@example.com"
- "--certificatesresolvers.le.acme.storage=/letsencrypt/acme.json"
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- le:/letsencrypt
volumes:
le:
Флаг exposedbydefault=false критичен: без него Traefik попытается опубликовать вообще все контейнеры. Мы явно помечаем только нужные.
Подключаем сервис с автоматическим HTTPS
Любое приложение получает домен и SSL через labels. Никаких портов наружу — Traefik сам достучится до контейнера по внутренней сети.
whoami:
image: traefik/whoami
labels:
- "traefik.enable=true"
- "traefik.http.routers.whoami.rule=Host(`app.example.com`)"
- "traefik.http.routers.whoami.entrypoints=websecure"
- "traefik.http.routers.whoami.tls.certresolver=le"
Как только DNS домена app.example.com указывает на IP вашего VPS, Traefik выпустит сертификат и начнёт отдавать сайт по HTTPS. Проверить выпуск можно по логам: docker compose logs traefik | grep -i acme.
Редирект HTTP→HTTPS и дашборд
Чтобы весь трафик уходил на HTTPS, добавьте глобальный редирект в command:
- "--entrypoints.web.http.redirections.entrypoint.to=websecure"
- "--entrypoints.web.http.redirections.entrypoint.scheme=https"
Встроенный дашборд показывает все роутеры и сервисы. Включать его на публичном порту опасно — оставьте только за базовой авторизацией или SSH-туннелем.
Traefik умеет middleware — промежуточные обработчики запроса. Самый частый — basic-auth для закрытия админок. Генерируем хеш пароля и вешаем его на роутер labels:
htpasswd -nb admin StrongPass
# результат: admin:$apr1$....
# в labels сервиса:
# traefik.http.middlewares.auth.basicauth.users=admin:$apr1$....
# traefik.http.routers.dashboard.middlewares=auth
Другие полезные middleware — ограничение частоты запросов (rateLimit), добавление security-заголовков и белый список IP. Всё это описывается labels, без правки конфигов Nginx.
Частые ошибки
- acme.json с правами 777 — Traefik откажется его читать. Файл создаётся сам в томе, не трогайте права руками
- DNS ещё не прописан — Let's Encrypt не выпустит сертификат, пока домен не резолвится на VPS. Проверяйте:
dig +short app.example.com - Забыли общую сеть — Traefik и приложение должны быть в одной docker-сети, иначе прокси не найдёт контейнер
Пока идёт отладка, Let's Encrypt имеет лимиты на число попыток — используйте staging-резолвер, чтобы не упереться в них. На root-доступе MAATRIX вы полностью управляете и портами 80/443, и DNS-записями домена.
Один Traefik легко обслуживает десятки доменов на одном VPS: каждый новый сайт — это просто ещё один контейнер с нужными labels. Никакой правки центрального конфига, никакого перезапуска прокси. Именно поэтому Traefik стал стандартом для мультисервисных Docker-хостов: добавление проекта занимает секунды, а SSL приезжает автоматически.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPS под TraefikОбсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Частые вопросы
Нужен ли отдельный Nginx рядом с Traefik?
Нет. Traefik сам работает reverse proxy и терминирует SSL. Nginx может остаться внутри контейнера приложения, но наружу смотрит Traefik.
Traefik умеет wildcard-сертификаты?
Да, но для *.example.com нужен DNS-challenge и токен вашего DNS-провайдера. Для одиночных доменов достаточно tlsChallenge из примера.
Сработает ли авто-SSL на сервере в UK, US или RU?
Да. Let's Encrypt глобален, а локации MAATRIX в UK, США и РФ полностью доступны извне для валидации домена.