bolt Valebyte VPS от $4/мес — NVMe, запуск за 60 секунд.

Получить VPS arrow_forward
eco Начальный Туториал

Настройка Traefik на VPS для автоматического проксирования Docker-контейнеров с SSL

calendar_month Jun 10, 2026 schedule 16 мин. чтения visibility 30 просмотров
Настройка Traefik на VPS для автоматического проксирования Docker-контейнеров с SSL
info

Нужен сервер для этого гайда? Мы предлагаем выделенные серверы и VPS в 50+ странах с мгновенной настройкой.

Нужен сервер для этого гайда?

Разверните VPS или выделенный сервер за минуты.

Настройка 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-конфиг нужен под эту задачу
Схема: Какой 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.com A 192.0.2.1
  • .example.com A 192.0.2.1 (для удобства использования поддоменов)
  • whoami.example.com A 192.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 не выдает сертификаты?

Наиболее частые причины:

  1. Неправильные DNS-записи: Убедитесь, что A-записи для вашего домена (и поддоменов) указывают на правильный IP-адрес вашего VPS. Проверьте через dig yourdomain.com.
  2. Проблемы с файрволом: Убедитесь, что порты 80 и 443 открыты в UFW (или другом файрволе) и доступны из интернета.
  3. Неправильный email или путь к acme.json: Проверьте эти параметры в traefik.yml.
  4. Лимиты 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.

Поделиться этой записью:

настройка traefik на vps для автоматического проксирования docker-контейнеров с ssl
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.