Traefik — современный прокси-сервер и балансировщик нагрузки, с помощью которого можно легко управлять маршрутизацией трафика в приложениях, работающих внутри Docker контейнеров.
Конфигурация успешно используется в нашем приложении Messenger
YAML
services:
traefik:
container_name: traefik
image: traefik:v3.1.2
restart: unless-stopped
env_file:
- /data/secrets/${SERVER_DOMAIN}/${SERVER_DOMAIN}.env
command:
- "--providers.file.filename=/traefik/certs.yml"
- "--providers.docker.network=proxynet"
- "--api.insecure=false"
- "--api.dashboard=true"
- "--providers.docker"
- "--log=true"
- "--log.level=${TRAEFIK_LOG_LEVEL}"
- "--providers.docker.exposedByDefault=false"
#Entrypoints:
- "--entrypoints.http.address=:80"
- "--entrypoints.https.address=:443"
- "--entrypoints.postgres.address=:5432"
- "--entrypoints.mariadb.address=:3306"
- "--entrypoints.http.http.redirections.entrypoint.to=https"
- "--entrypoints.http.http.redirections.entrypoint.scheme=https"
#SSL Let's Encrypt:
- "--entrypoints.https.http.tls.certResolver=le"
- "--certificatesresolvers.le.acme.tlschallenge=true"
- "--certificatesresolvers.le.acme.email=${ADMIN_EMAIL}"
- "--certificatesresolvers.le.acme.storage=/letsencrypt/${SERVER_DOMAIN}.acme.json"
#Dashboard secure:
labels:
- "traefik.enable=true"
- "traefik.http.routers.dashboard.rule=Host(`traefik.${SERVER_DOMAIN}`)"
- "traefik.http.routers.dashboard.entrypoints=https"
- "traefik.http.routers.dashboard.tls=true"
- "traefik.http.routers.dashboard.tls.certresolver=le"
- "traefik.http.routers.dashboard.service=api@internal"
- "traefik.http.routers.dashboard.middlewares=auth"
- "traefik.http.middlewares.auth.basicauth.usersfile=/httpauth/usersfile.htpasswd"
ports:
- "80:80"
- "443:443"
- "5432:5432"
- "3306:3306"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /data/secrets/${SERVER_DOMAIN}/letsencrypt:/letsencrypt
- /data/secrets/${SERVER_DOMAIN}/httpauth:/httpauth
- /data/traefik/certs.yml:/traefik/certs.yml
- /data/secrets/${SERVER_DOMAIN}/selfsigned:/selfsigned
logging:
driver: "json-file"
options:
max-size: "1m"
networks:
default:
name: proxynet
external: true
Основные моменты
- Образ и контейнер:
- Мы используем образ
traefik:v3.1.2
и настраиваем его так, чтобы он автоматически запускался вместе с системой (restart: unless-stopped
). - Переменные окружения загружаются из файла
.env
.
- Командная строка:
- Traefik конфигурируется через параметры командной строки. Важные параметры включают указание файлов для хранения конфигурации сертификатов и определение сетевой среды Docker, в которой будет работать Traefik.
- Точки входа:
- Точки входа определяют порты, на которые будет поступать входящий трафик (
http
,https
,postgres
иmariadb
). Также обеспечивается редирект HTTP на HTTPS для повышения безопасности.
- SSL и Let’s Encrypt:
- Включена поддержка автоматической выдачи SSL-сертификатов Let’s Encrypt через
certResolver
. Это позволяет обеспечивать безопасное соединение с использованием TLS.
- Панель управления (Dashboard):
- Traefik предоставляет веб-интерфейс для мониторинга и управления (
dashboard
). Он защищён с помощью HTTP-базовой аутентификации, данные для которой хранятся в файлеusersfile.htpasswd
.
- Монтирование томов:
- Конфигурация involves монтирование различных ресурсов и секретов в контейнер Traefik. Это включает сокет Docker для интеграции с контейнерами, данные для сертификатов и аутентификации.
- Сетевые настройки:
- Используемая сеть называется
proxynet
и она должна быть внешней для обеспечения корректной работы Traefik с другими контейнерами.
- Логирование:
- Происходит настройка логирования через
json-file
с ограничением размера файла в 1 MB, что помогает управлять объемом логов и упрощает диагностику.
Репозиторий этой конфигурации можно найти здесь.
Если вам интересен наш проект, есть вопросы, замечания, или предложения — оставляйте комментарии или пишите на почту: checkerwars@mail.ru
Кроме того, автор проекта ищет работу. Мое резюме.