Docker Traefik
Traefik — современный reverse proxy и load balancer с автоматическим обнаружением сервисов через Docker-метки. Главная особенность — автоматическое получение SSL-сертификатов Let's Encrypt без ручной настройки.
Возможности
- Автоматическое обнаружение контейнеров через Docker labels
- Автоматические SSL-сертификаты Let's Encrypt (TLS Challenge)
- Маршрутизация по домену и пути (
Host(),PathPrefix()) - Middleware: redirect, strip prefix, basic auth, rate limit
- Веб-дашборд для мониторинга роутеров и сервисов
- Поддержка HTTP, TCP, UDP
Установка через Docker Compose
mkdir -p /opt/traefik && cd /opt/traefik
Файл /opt/traefik/docker-compose.yml:
services:
traefik:
image: traefik:latest
container_name: traefik
restart: unless-stopped
ports:
- "80:80"
- "443:443"
command:
- "--api.dashboard=true"
- "--api.insecure=false"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--providers.file.filename=/etc/traefik/dynamic.yml"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--entrypoints.web.http.redirections.entryPoint.to=websecure"
- "--entrypoints.web.http.redirections.entryPoint.scheme=https"
- "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
- "--certificatesresolvers.letsencrypt.acme.email=admin@example.com"
- "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
dns:
- 8.8.8.8
- 1.1.1.1
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- letsencrypt:/letsencrypt
- ./dynamic.yml:/etc/traefik/dynamic.yml:ro
networks:
- proxy
networks:
proxy:
name: traefik_proxy
driver: bridge
volumes:
letsencrypt:
Динамическая конфигурация
Файл /opt/traefik/dynamic.yml — для роутеров которые нельзя задать через labels (например, дашборд):
http:
routers:
dashboard:
rule: "Host(`example.com`) && (PathPrefix(`/dashboard`) || PathPrefix(`/api`))"
service: api@internal
entryPoints:
- websecure
tls:
certResolver: letsencrypt
Запуск
docker compose up -d
Подключение контейнера к Traefik
Добавьте labels к любому контейнеру — Traefik автоматически создаст роутер и запросит сертификат:
labels:
- "traefik.enable=true"
- "traefik.http.routers.myapp.rule=Host(`myapp.example.com`)"
- "traefik.http.routers.myapp.entrypoints=websecure"
- "traefik.http.routers.myapp.tls.certresolver=letsencrypt"
- "traefik.http.services.myapp.loadbalancer.server.port=8080"
networks:
- traefik_proxy
Дашборд
Доступен по адресу https://example.com/dashboard/ (слеш на конце обязателен).
Показывает все роутеры, сервисы, middleware и состояние сертификатов.
Примечания
- Добавьте
dns: [8.8.8.8, 1.1.1.1]если сервер использует systemd-resolved — без этого Traefik не сможет обратиться к серверам Let's Encrypt. exposedbydefault=false— безопасная настройка: Traefik видит только контейнеры с явнымtraefik.enable=true.- Файл
acme.jsonхранит сертификаты и автоматически обновляется за 30 дней до истечения.