Настройка Traefik на VPS для автоматического проксирования Docker-контейнеров с SSL
TL;DR
В этом руководстве мы настроим Traefik v3 на виртуальном частном сервере (VPS) для автоматического обнаружения и проксирования Docker-контейнеров, обеспечивая при этом автоматическую выдачу и обновление SSL-сертификатов от Let's Encrypt. Это позволит вам легко разворачивать новые веб-сервисы в Docker, которые будут доступны по доменному имени с HTTPS без ручной настройки прокси и сертификатов для каждого нового сервиса.
- Настраиваем Traefik v3 как обратный прокси и балансировщик нагрузки.
- Интегрируем Traefik с Docker для автоматического обнаружения сервисов по меткам.
- Автоматизируем получение и обновление SSL-сертификатов через Let's Encrypt.
- Используем Docker Compose для удобного управления инфраструктурой.
- Обеспечиваем базовую безопасность сервера и Traefik.
Что мы настраиваем и зачем
Мы будем настраивать Traefik — современный облачно-нативный обратный прокси и балансировщик нагрузки, который отлично интегрируется с динамическими средами, такими как Docker. Основная задача — автоматизировать процесс публикации веб-сервисов, запущенных в Docker-контейнерах, делая их доступными из интернета по доменным именам и с защищенным HTTPS-соединением.
В итоге вы получите гибкую и масштабируемую инфраструктуру, где каждый новый Docker-контейнер, предназначенный для публичного доступа, будет автоматически зарегистрирован в Traefik. Вам не придется вручную редактировать конфигурационные файлы Nginx или Apache, а также заботиться о получении и продлении SSL-сертификатов — Traefik сделает это за вас, используя Let's Encrypt. Это значительно упрощает развертывание и управление множеством микросервисов или веб-приложений на одном VPS.
Какие альтернативы существуют? Для публикации веб-сервисов можно использовать традиционные обратные прокси, такие как Nginx или Apache, которые требуют ручной настройки для каждого нового сервиса. В облачных средах (AWS, GCP, Azure) часто используются управляемые балансировщики нагрузки и API Gateway. Однако для самохостинга на VPS Traefik предлагает уникальное сочетание простоты настройки, автоматизации и глубокой интеграции с Docker. Выбирая self-hosted решение на VPS, вы получаете полный контроль над своей инфраструктурой, экономите на ежемесячных платежах за управляемые сервисы и можете адаптировать все под свои специфические нужды, что идеально подходит для разработчиков, соло-фаундеров и энтузиастов.
Какой VPS-конфиг нужен под эту задачу
Выбор конфигурации VPS зависит от количества и нагрузки на Docker-контейнеры, которые вы планируете проксировать через Traefik. Сам Traefik относительно легок, но проксируемые сервисы могут быть требовательными.
Минимальные требования
- CPU: 1 ядро (например, Intel Xeon E3/E5).
- RAM: 2 ГБ (для Traefik и нескольких легковесных Docker-контейнеров).
- Диск: 40 ГБ SSD (для операционной системы, Docker-образов, логов и данных контейнеров).
- Сеть: 100 Мбит/с порт с неограниченным трафиком или достаточным объемом (от 1 ТБ/мес) для ваших нужд.
- Операционная система: Ubuntu 24.04 LTS (рекомендуется) или Debian 12.
Рекомендуемый VPS-план для большинства задач
Для более серьезных проектов, включающих несколько веб-приложений, базы данных, или если вы ожидаете умеренную нагрузку, рекомендуется следующая конфигурация:
- CPU: 2 ядра (например, Intel Xeon E5).
- RAM: 4 ГБ.
- Диск: 80-120 ГБ SSD (для комфортного размещения нескольких приложений и их данных).
- Сеть: 1 Гбит/с порт с неограниченным трафиком.
Можно взять VPS с указанными характеристиками для начала. Эта конфигурация обеспечит стабильную работу Traefik и позволит разместить до 5-10 средних Docker-контейнеров без существенных замедлений.
Когда нужен dedicated, а не VPS
Выделенный сервер (dedicated) становится предпочтительнее, когда:
- Вам требуется максимальная производительность и стабильность без "соседского" эффекта, характерного для VPS.
- Вы планируете размещать высоконагруженные приложения, требующие более 8-16 ГБ RAM и 4+ ядер CPU.
- Нужен большой объем дискового пространства (несколько ТБ) или специфические дисковые конфигурации (RAID).
- Требуются специфические аппаратные компоненты (GPU, специальные сетевые карты).
- Необходимо соответствие строгим регуляторным требованиям, которые могут быть проще соблюдены на полностью контролируемом оборудовании.
Для большинства задач, связанных с Traefik и Docker-контейнерами для малого и среднего бизнеса или личных проектов, VPS более чем достаточно.
Локация: на что влияет
Выбор локации VPS влияет на:
- Задержку (latency): Чем ближе сервер к вашей основной аудитории, тем быстрее будут загружаться страницы и откликаться сервисы.
- Соответствие законодательству: В некоторых случаях хранение данных в определенной юрисдикции является обязательным.
- Доступность: Разные локации могут иметь разную стабильность и доступность сети.
Выбирайте локацию, которая географически ближе к вашим основным пользователям для оптимальной производительности.
Подготовка сервера
После получения доступа к вашему новому VPS необходимо выполнить несколько базовых шагов по его подготовке и обеспечению безопасности.
1. Подключение по SSH и создание пользователя
Подключитесь к серверу как root (или пользователь, предоставленный хостером) и создайте нового пользователя с ограниченными правами. Замените ваш_пользователь на желаемое имя пользователя.
ssh root@ВАШ_IP_АДРЕС # Подключаемся как root
adduser ваш_пользователь # Создаем нового пользователя
usermod -aG sudo ваш_пользователь # Добавляем пользователя в группу sudo
Теперь выйдите из сессии root и подключитесь под новым пользователем:
exit # Выходим из root-сессии
ssh ваш_пользователь@ВАШ_IP_АДРЕС # Подключаемся под новым пользователем
2. Настройка SSH-ключей (рекомендуется)
Для повышения безопасности рекомендуется использовать SSH-ключи вместо паролей. Если у вас еще нет SSH-ключа, сгенерируйте его на вашей локальной машине:
ssh-keygen -t rsa -b 4096 # Генерируем новый SSH-ключ (на локальной машине)
Скопируйте публичный ключ на сервер:
ssh-copy-id ваш_пользователь@ВАШ_IP_АДРЕС # Копируем публичный ключ на сервер
После проверки входа по ключу, отключите аутентификацию по паролю для root и вашего пользователя в файле /etc/ssh/sshd_config. Найдите строки и измените их:
sudo nano /etc/ssh/sshd_config # Открываем конфигурацию SSH-сервера
Измените или добавьте:
PermitRootLogin no
PasswordAuthentication no
Перезапустите SSH-сервис:
sudo systemctl restart sshd # Перезапускаем SSH-сервис
3. Обновление системы
Убедитесь, что все пакеты на сервере обновлены до последних версий.
sudo apt update && sudo apt upgrade -y # Обновляем список пакетов и все установленные пакеты
4. Установка и настройка Firewall (UFW)
Настроим простой, но эффективный файрвол UFW (Uncomplicated Firewall).
sudo apt install ufw -y # Устанавливаем UFW
sudo ufw default deny incoming # Запрещаем все входящие соединения по умолчанию
sudo ufw default allow outgoing # Разрешаем все исходящие соединения по умолчанию
sudo ufw allow ssh # Разрешаем входящие соединения по SSH (порт 22)
sudo ufw allow http # Разрешаем входящие соединения по HTTP (порт 80)
sudo ufw allow https # Разрешаем входящие соединения по HTTPS (порт 443)
sudo ufw enable # Включаем UFW (подтвердите 'y')
sudo ufw status # Проверяем статус UFW
5. Установка Fail2Ban
Fail2Ban помогает защититься от брутфорс-атак, блокируя IP-адреса, с которых совершаются неудачные попытки входа.
sudo apt install fail2ban -y # Устанавливаем Fail2Ban
sudo systemctl enable fail2ban # Включаем автозапуск Fail2Ban
sudo systemctl start fail2ban # Запускаем Fail2Ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local # Создаем локальную копию конфига
sudo nano /etc/fail2ban/jail.local # Редактируем конфигурацию
В файле jail.local убедитесь, что секция [sshd] активна (enabled = true) и, при желании, можете настроить bantime (время блокировки) и findtime (период для обнаружения попыток).
# Внутри /etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
sudo systemctl restart fail2ban # Перезапускаем Fail2Ban для применения изменений
sudo fail2ban-client status # Проверяем статус Fail2Ban
Установка ПО — пошагово
Теперь, когда сервер подготовлен, установим необходимое программное обеспечение: Docker и Docker Compose.
1. Установка Docker Engine
Удалим все старые версии Docker, если они есть, и установим последнюю стабильную версию Docker Engine (актуальную на 2026 год, предполагаем версию 26.x или новее).
# Удаляем старые версии Docker
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt remove $pkg; done
# Обновляем список пакетов и устанавливаем зависимости
sudo apt update
sudo apt install ca-certificates curl gnupg lsb-release -y
# Добавляем официальный GPG ключ Docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Добавляем репозиторий Docker в APT
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Устанавливаем Docker Engine, containerd и Docker Compose (v2)
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
2. Добавление пользователя в группу Docker
Чтобы не использовать sudo каждый раз при работе с Docker, добавьте вашего пользователя в группу docker.
sudo usermod -aG docker ваш_пользователь # Добавляем текущего пользователя в группу docker
newgrp docker # Применяем изменения для текущей сессии (или переподключитесь по SSH)
3. Проверка установки Docker
Проверьте, что Docker установлен и работает корректно.
docker run hello-world # Запускаем тестовый контейнер hello-world
Вы должны увидеть приветственное сообщение от Docker.
4. Проверка установки Docker Compose
Убедитесь, что Docker Compose (v2) установлен и доступен.
docker compose version # Проверяем версию Docker Compose
Ожидаемый вывод будет примерно таким: Docker Compose version v2.26.x (или новее).
Конфигурация
На этом этапе мы настроим Traefik и запустим его вместе с демонстрационным приложением. Для управления Traefik и другими сервисами мы будем использовать Docker Compose.
1. Создание структуры каталогов
Создайте каталог для конфигурации Traefik и файл docker-compose.yml.
mkdir -p ~/traefik # Создаем основной каталог для Traefik
cd ~/traefik # Переходим в созданный каталог
touch docker-compose.yml # Создаем файл Docker Compose
touch traefik.yml # Создаем основной конфигурационный файл Traefik
touch acme.json # Создаем файл для хранения SSL-сертификатов Let's Encrypt
chmod 600 acme.json # Устанавливаем строгие права для файла сертификатов
2. Настройка DNS
Прежде чем запускать Traefik с Let's Encrypt, вам необходимо настроить DNS-записи для ваших доменов. Для каждого домена (или поддомена), который вы планируете использовать, создайте A-запись, указывающую на IP-адрес вашего VPS.
Например, если ваш VPS имеет IP 192.0.2.1, а вы хотите использовать домен example.com и поддомен whoami.example.com, добавьте следующие записи в панели управления вашим DNS-провайдером:
example.comA192.0.2.1.example.comA192.0.2.1(для удобства использования поддоменов)whoami.example.comA192.0.2.1
3. Файл traefik.yml (основная конфигурация Traefik)
Этот файл определяет глобальные настройки Traefik, включая точки входа (entrypoints), провайдеры (Docker), и настройки сертификатов Let's Encrypt.
# traefik.yml
# Глобальная конфигурация Traefik
# Определяем точки входа для входящего трафика
entryPoints:
http:
address: ":80" # Входящий HTTP-трафик
http:
redirections:
entryPoint:
to: "https" # Перенаправляем весь HTTP на HTTPS
scheme: "https"
https:
address: ":443" # Входящий HTTPS-трафик
# Настройки API и дашборда Traefik
api:
dashboard: true # Включаем дашборд Traefik
insecure: false # Не разрешаем небезопасный доступ к API (используем аутентификацию)
# Настройки логов
log:
level: INFO # Уровень логирования (DEBUG, INFO, WARN, ERROR)
accessLog: {} # Включаем логи доступа
# Настройки провайдера Docker
providers:
docker:
endpoint: "unix:///var/run/docker.sock" # Путь к сокету Docker
exposedByDefault: false # По умолчанию не проксируем контейнеры, если нет меток
network: "web" # Указываем сеть, в которой Traefik будет искать контейнеры
# Настройки сертификатов Let's Encrypt
certificatesResolvers:
letsencrypt:
acme:
email: "ваш[email protected]" # Укажите ваш email для уведомлений Let's Encrypt
storage: "acme.json" # Файл для хранения сертификатов
httpChallenge:
entryPoint: "http" # Используем HTTP-челлендж через точку входа http
4. Файл docker-compose.yml
Этот файл определяет сервисы Traefik и тестового приложения whoami.
# docker-compose.yml
# Запускаем Traefik и тестовое приложение
version: '3.8'
services:
traefik:
image: traefik:v3.0 # Используем последнюю стабильную версию Traefik (на 2026 год v3.0+)
container_name: traefik
restart: unless-stopped
security_opt:
- no-new-privileges:true
ports:
- "80:80" # Открываем порт 80 для HTTP
- "443:443" # Открываем порт 443 для HTTPS
# - "8080:8080" # Порт для дашборда Traefik (не рекомендуется открывать публично без аутентификации)
volumes:
- /etc/localtime:/etc/localtime:ro # Синхронизация времени
- /var/run/docker.sock:/var/run/docker.sock:ro # Доступ к Docker сокету
- ./traefik.yml:/etc/traefik/traefik.yml:ro # Основной конфиг Traefik
- ./acme.json:/acme.json # Файл для сертификатов Let's Encrypt
networks:
- web # Подключаем Traefik к сети 'web'
labels:
# Метки для самого Traefik (чтобы он мог проксировать свой дашборд)
- "traefik.enable=true"
- "traefik.http.routers.traefik-dashboard.rule=Host(traefik.example.com)" # Домен для дашборда
- "traefik.http.routers.traefik-dashboard.entrypoints=https"
- "traefik.http.routers.traefik-dashboard.tls.certresolver=letsencrypt"
- "traefik.http.routers.traefik-dashboard.service=api@internal"
- "traefik.http.middlewares.traefik-auth.basicauth.users=admin:$$apr1$$HASH_ПАРОЛЯ" # Замените HASH_ПАРОЛЯ
- "traefik.http.routers.traefik-dashboard.middlewares=traefik-auth"
# Опционально: перенаправление HTTP на HTTPS для дашборда
- "traefik.http.routers.traefik-dashboard.middlewares=redirect-to-https@docker"
whoami:
image: traefik/whoami # Тестовое приложение, которое показывает информацию о запросе
container_name: whoami
restart: unless-stopped
networks:
- web # Подключаем к той же сети, что и Traefik
labels:
- "traefik.enable=true" # Включаем Traefik для этого контейнера
- "traefik.http.routers.whoami.rule=Host(whoami.example.com)" # Домен для whoami
- "traefik.http.routers.whoami.entrypoints=https" # Используем HTTPS
- "traefik.http.routers.whoami.tls.certresolver=letsencrypt" # Разрешаем сертификаты Let's Encrypt
- "traefik.http.services.whoami.loadbalancer.server.port=80" # Порт приложения внутри контейнера
networks:
web:
external: true # Используем внешнюю сеть (будет создана вручную)
Важно:
- Замените
ваш[email protected]на ваш реальный email. - Замените
traefik.example.comиwhoami.example.comна ваши домены. - Для
admin:$$apr1$$HASH_ПАРОЛЯсгенерируйте хеш пароля с помощью утилитыhtpasswdна вашей локальной машине. Например,echo $(htpasswd -nb admin мой_секретный_пароль) | sed -e s/\\$/\\$\\$/g. Скопируйте результат (например,admin:$$apr1$$abcdefghijklmnopqrs) и вставьте его вdocker-compose.yml.
5. Создание Docker-сети
Traefik и все контейнеры, которые он будет проксировать, должны находиться в одной Docker-сети.
docker network create web # Создаем внешнюю сеть Docker с именем 'web'
6. Запуск Traefik и сервисов
Запустите Traefik и контейнер whoami с помощью Docker Compose.
docker compose up -d # Запускаем контейнеры в фоновом режиме
7. Проверка работоспособности
Через несколько минут (Traefik нужно время для получения сертификатов) проверьте доступность ваших сервисов.
- Откройте в браузере
https://whoami.example.com(замените на ваш домен). Вы должны увидеть страницу с информацией о запросе, подтверждающую, что Traefik успешно проксировал запрос и выдал SSL-сертификат. - Откройте в браузере
https://traefik.example.com(замените на ваш домен). Вы должны увидеть запрос логина/пароля, а затем дашборд Traefik, показывающий статус ваших сервисов.
Вы также можете проверить логи Traefik:
docker compose logs -f traefik # Просмотр логов контейнера Traefik
В логах вы увидите сообщения о получении сертификатов от Let's Encrypt.
Бэкапы и обслуживание
Регулярное резервное копирование и своевременное обслуживание — ключ к стабильности и безопасности вашей инфраструктуры.
1. Что бэкапить
- Конфигурационные файлы Traefik:
traefik.yml,acme.json. Файлacme.jsonсодержит информацию о выданных SSL-сертификатах. - Данные Docker-контейнеров: Все persistent volumes, которые используют ваши приложения (например, базы данных, пользовательские загрузки, конфигурации приложений).
- Конфигурации сервера: Файлы SSH (
/etc/ssh/sshd_config), UFW (/etc/ufw/), Fail2Ban (/etc/fail2ban/).
2. Простой скрипт автобэкапа
Для бэкапа можно использовать rsync или специализированные инструменты вроде Restic/Borg. Рассмотрим простой пример с rsync для ключевых файлов и Docker-томов.
Создайте каталог для бэкапов и скрипт backup.sh:
mkdir -p ~/backups
nano ~/backups/backup.sh
Содержимое backup.sh:
#!/bin/bash
# Каталог для бэкапов на сервере
BACKUP_DIR="/home/ваш_пользователь/backups/data"
TIMESTAMP=$(date +%Y%m%d%H%M%S)
FULL_BACKUP_PATH="${BACKUP_DIR}/${TIMESTAMP}"
# Каталог Traefik
TRAEFIK_CONFIG_PATH="/home/ваш_пользователь/traefik"
# Каталог, где Docker хранит свои тома (volumes)
DOCKER_VOLUMES_PATH="/var/lib/docker/volumes"
# Создаем директорию для текущего бэкапа
mkdir -p "${FULL_BACKUP_PATH}/traefik"
mkdir -p "${FULL_BACKUP_PATH}/docker_volumes"
echo "Начинаем бэкап в ${FULL_BACKUP_PATH}"
# Копируем конфигурацию Traefik
cp -r "${TRAEFIK_CONFIG_PATH}/traefik.yml" "${FULL_BACKUP_PATH}/traefik/"
cp -r "${TRAEFIK_CONFIG_PATH}/acme.json" "${FULL_BACKUP_PATH}/traefik/"
cp -r "${TRAEFIK_CONFIG_PATH}/docker-compose.yml" "${FULL_BACKUP_PATH}/traefik/"
# Копируем Docker-тома (пример: для whoami, если бы у него был том)
# Для реальных приложений, вам нужно будет определить конкретные тома
# docker volume inspect -f '{{ .Mountpoint }}'
# Например, для приложения с томом 'my_app_data':
# rsync -av "${DOCKER_VOLUMES_PATH}/my_app_data/_data/" "${FULL_BACKUP_PATH}/docker_volumes/my_app_data/"
# Пример бэкапа всех Docker volumes (может быть очень большим)
# Лучше бэкапить только те, которые содержат важные данные
rsync -av --exclude '/_data/cache/' "${DOCKER_VOLUMES_PATH}/" "${FULL_BACKUP_PATH}/docker_volumes/"
echo "Бэкап завершен. Архивируем..."
tar -czf "${BACKUP_DIR}/backup_${TIMESTAMP}.tar.gz" -C "${FULL_BACKUP_PATH}" .
rm -rf "${FULL_BACKUP_PATH}" # Удаляем временную директорию
# Удаляем старые бэкапы (например, старше 7 дней)
find "${BACKUP_DIR}" -type f -name "backup_.tar.gz" -mtime +7 -delete
echo "Архивация и очистка завершены."
Сделайте скрипт исполняемым:
chmod +x ~/backups/backup.sh
Настройте cron для ежедневного запуска скрипта (например, в 3:00 ночи):
crontab -e # Открываем crontab
Добавьте строку:
0 3 * /home/ваш_пользователь/backups/backup.sh >> /home/ваш_пользователь/backups/backup.log 2>&1
3. Куда складывать бэкапы
Хранить бэкапы на том же сервере, что и оригинальные данные, рискованно. Рекомендуется использовать:
- Внешний S3-совместимый объектный сторадж: Дешево, надежно, масштабируемо (например, MinIO, Wasabi, Backblaze B2). Для автоматической отправки можно использовать
s3cmdилиrclone. - Отдельный VPS: Более дорогой, но дает полный контроль. Можно настроить
rsyncпо SSH на другой сервер. - Локальное хранилище (для домашнего использования): Если это личный проект, можно копировать бэкапы на домашний NAS или ПК.
4. Обновления: rolling vs maintenance window
- Обновление ОС: Регулярно запускайте
sudo apt update && sudo apt upgrade -y. Для LTS-версий Ubuntu это безопасно. - Обновление Docker и Traefik:
- Maintenance Window: Для критически важных сервисов планируйте окно обслуживания. Остановите сервисы, обновите Docker, Traefik, протестируйте.
- Rolling Updates (для кластеров): Если у вас несколько инстансов Traefik, можно обновлять их поочередно, минимизируя простой. На одном VPS это не применимо.
Для Traefik и Docker-контейнеров, просто обновите версии образов в docker-compose.yml и перезапустите сервисы:
cd ~/traefik
docker compose pull # Загрузить новые версии образов
docker compose up -d # Пересоздать контейнеры с новыми образами
Troubleshooting + FAQ
Что делать, если Traefik не стартует?
Проверьте логи контейнера Traefik. Чаще всего проблема связана с ошибками в файлах traefik.yml или docker-compose.yml. Используйте команду docker compose logs traefik, чтобы увидеть детальные сообщения об ошибках. Убедитесь, что порты 80 и 443 не заняты другим приложением и что Docker сокет доступен.
Почему Let's Encrypt не выдает сертификаты?
Наиболее частые причины:
- Неправильные DNS-записи: Убедитесь, что A-записи для вашего домена (и поддоменов) указывают на правильный IP-адрес вашего VPS. Проверьте через
dig yourdomain.com. - Проблемы с файрволом: Убедитесь, что порты 80 и 443 открыты в UFW (или другом файрволе) и доступны из интернета.
- Неправильный email или путь к
acme.json: Проверьте эти параметры вtraefik.yml. - Лимиты Let's Encrypt: Если вы часто запрашивали сертификаты для одного домена, могли столкнуться с лимитами. Используйте staging-сервер Let's Encrypt для тестирования (добавьте
caServer: "https://acme-staging-v02.api.letsencrypt.org/directory"в секциюacme).
Как добавить новый Docker-контейнер и проксировать его через Traefik?
Просто добавьте новый сервис в ваш docker-compose.yml и укажите необходимые Traefik-метки (labels). Убедитесь, что контейнер подключен к сети web. Traefik автоматически обнаружит новый контейнер и настроит проксирование и SSL.
my_new_app:
image: my/app:latest
container_name: my_new_app
restart: unless-stopped
networks:
- web
labels:
- "traefik.enable=true"
- "traefik.http.routers.my_new_app.rule=Host(app.example.com)"
- "traefik.http.routers.my_new_app.entrypoints=https"
- "traefik.http.routers.my_new_app.tls.certresolver=letsencrypt"
- "traefik.http.services.my_new_app.loadbalancer.server.port=8000" # Порт, на котором слушает ваше приложение
После сохранения файла выполните docker compose up -d.
Какой VPS-конфиг минимально подойдёт для Traefik с парой-тройкой сервисов?
Для Traefik и 2-3 легковесных Docker-сервисов (например, веб-сервер, небольшой API, блог) минимально подойдет VPS с 1 CPU-ядром, 2 ГБ RAM и 40-60 ГБ SSD. Этого будет достаточно для базовой работы и тестирования. Однако, для стабильной работы и возможности масштабирования, рекомендуется 2 ядра CPU и 4 ГБ RAM.
Что выбрать — VPS или dedicated для этой задачи?
Для большинства пользователей, настраивающих Traefik для личных проектов, стартапов или небольших команд, VPS является оптимальным выбором. Он экономичнее, проще в управлении и предлагает достаточную производительность. Выделенный сервер стоит рассматривать, если у вас очень высокая нагрузка (тысячи запросов в секунду), требуются специфические аппаратные ресурсы, или если вы хотите избежать любых потенциальных "соседских" эффектов, присущих виртуализации. Начните с VPS и масштабируйтесь до dedicated, если возникнет реальная необходимость.
Как защитить дашборд Traefik?
В нашем docker-compose.yml мы уже добавили базовую аутентификацию (Basic Auth) для дашборда Traefik через middleware. Убедитесь, что вы сгенерировали надежный хеш пароля с помощью htpasswd. Для дополнительной безопасности, можно также ограничить доступ к дашборду по IP-адресу, используя Traefik IPWhitelisting middleware, или использовать более сложные методы аутентификации, такие как OAuth.
Выводы и следующие шаги
Поздравляем! Вы успешно настроили Traefik на своем VPS, создав мощную и гибкую платформу для автоматического развертывания Docker-контейнеров с HTTPS. Теперь вы можете легко добавлять новые веб-сервисы, просто описывая их в файле docker-compose.yml с соответствующими метками, и Traefik автоматически возьмет на себя заботу о проксировании и управлении SSL-сертификатами.
Вот несколько шагов, куда можно двигаться дальше:
- Добавление большего количества сервисов: Разверните на своем VPS реальные приложения: GitLab, Mattermost, Nextcloud, WordPress, или ваш собственный SaaS-проект, используя Traefik для их публикации.
- Мониторинг и логирование: Интегрируйте Traefik с системами мониторинга, такими как Prometheus и Grafana, чтобы отслеживать производительность и состояние ваших сервисов. Настройте централизованное логирование (ELK Stack или Loki/Grafana) для удобного анализа логов.
- Расширенная безопасность: Изучите дополнительные функции безопасности Traefik, такие как IP Whitelisting, Rate Limiting, CORS, и интеграцию с внешними системами аутентификации для защиты ваших приложений.
- Автоматизация развертывания: Используйте CI/CD пайплайны (например, GitLab CI/CD, GitHub Actions) для автоматического развертывания новых версий ваших Docker-контейнеров на VPS.