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

Отримати VPS arrow_forward
eco Початковий Туторіал

Налаштування Traefik на

calendar_month Jun 10, 2026 schedule 16 хв. читання visibility 50 переглядів
Настройка 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 # Перестворити контейнери з новими образами

Вирішення проблем + 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.