Files
second-mind-aep/Мой сервер/Traefik Reverse Proxy/Развертывание.md
2025-08-04 16:12:28 +04:00

9.8 KiB
Raw Blame History

Traefik Reverse Proxy - Развертывание

Обзор системы

Предварительные требования

Системные требования

  • Docker: версия 20.10+
  • Docker Compose: версия 2.0+
  • Операционная система: Linux (Ubuntu 20.04+ рекомендуется)
  • RAM: минимум 512MB для Traefik
  • Дисковое пространство: 1GB для логов и SSL сертификатов

Сетевые требования

  • Публичный IP: Для Let's Encrypt ACME challenge
  • Открытые порты: 80, 443, 2222 (для SSH Git), 8080 (Dashboard)
  • Доступ к DNS: Для настройки A-записей

DNS настройка

Перед развертыванием настройте DNS записи:

# A записи для всех поддоменов
traefik.aepif.ru    IN A    YOUR_SERVER_IP
auth.aepif.ru       IN A    YOUR_SERVER_IP
notes.aepif.ru      IN A    YOUR_SERVER_IP
git.aepif.ru        IN A    YOUR_SERVER_IP
webhook.aepif.ru    IN A    YOUR_SERVER_IP

Создание сети proxy

Шаг 1: Создание Docker network

# Создаем external сеть для всех сервисов
docker network create proxy

# Проверяем создание
docker network ls | grep proxy

Важность proxy сети

Сеть proxy позволяет:

  • Изолировать веб-трафик от внутренних сетей
  • Автоматически подключать сервисы к Traefik
  • Обеспечить безопасность через сегментацию сети

Подготовка файлов

Шаг 2: Создание директории

# Создаем рабочую директорию
mkdir -p /docker/reverse-proxy
cd /docker/reverse-proxy

Шаг 3: Создание docker-compose.yml

version: '3.8'
services:
  traefik:
    image: traefik:v3.0
    container_name: traefik
    command:
      # API и Dashboard
      - --api.dashboard=true
      - --api.insecure=true
      
      # Docker Provider
      - --providers.docker=true
      - --providers.docker.exposedbydefault=false
      - --providers.docker.network=proxy
      
      # Entrypoints
      - --entrypoints.web.address=:80
      - --entrypoints.websecure.address=:443
      - --entrypoints.ssh.address=:2222
      
      # SSL Configuration - ЗАМЕНИТЕ EMAIL!
      - --certificatesresolvers.letsencrypt.acme.email=YOUR_EMAIL@domain.com
      - --certificatesresolvers.letsencrypt.acme.storage=/data/acme.json
      - --certificatesresolvers.letsencrypt.acme.tlschallenge=true
      
      # Logging
      - --log.level=INFO
      - --accesslog=true
    
    ports:
      - "80:80"
      - "443:443"
      - "8080:8080"
      - "2222:2222"
    
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - traefik_data:/data
    
    networks:
      - proxy
    
    labels:
      - traefik.enable=true
      - traefik.http.routers.traefik.rule=Host(`traefik.aepif.ru`)
      - traefik.http.routers.traefik.tls.certresolver=letsencrypt
      - traefik.http.routers.traefik.service=api@internal
      
      # Global HTTP to HTTPS redirect
      - traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`)
      - traefik.http.routers.http-catchall.entrypoints=web
      - traefik.http.routers.http-catchall.middlewares=redirect-to-https
      - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https
    
    restart: unless-stopped

volumes:
  traefik_data:

networks:
  proxy:
    external: true

⚠️ Важно: Замените YOUR_EMAIL@domain.com на свой email адрес!

Первый запуск

Шаг 4: Запуск Traefik

# Переходим в директорию с конфигурацией
cd /docker/reverse-proxy

# Запускаем в detached режиме
docker-compose up -d

# Проверяем статус
docker-compose ps

Шаг 5: Проверка логов

# Смотрим логи запуска
docker-compose logs -f traefik

# Должны увидеть сообщения о:
# - Создании routers и services
# - Успешном запуске API
# - Подключении к Docker provider

Проверка работоспособности

Шаг 6: Тестирование Dashboard

# Проверяем доступность Dashboard
curl -I http://YOUR_SERVER_IP:8080

# Проверяем HTTPS редирект
curl -I http://traefik.aepif.ru
# Должен вернуть 301/302 редирект на HTTPS

Шаг 7: Проверка SSL сертификатов

# Проверяем получение SSL сертификата
curl -I https://traefik.aepif.ru

# Проверяем детали сертификата
openssl s_client -connect traefik.aepif.ru:443 -servername traefik.aepif.ru | openssl x509 -noout -text

Настройка firewall

Шаг 8: Конфигурация UFW (Ubuntu)

# Разрешаем необходимые порты
sudo ufw allow 22/tcp      # SSH
sudo ufw allow 80/tcp      # HTTP
sudo ufw allow 443/tcp     # HTTPS
sudo ufw allow 2222/tcp    # Git SSH
sudo ufw allow 8080/tcp    # Dashboard (временно)

# Включаем firewall
sudo ufw enable

# Проверяем статус
sudo ufw status

Мониторинг и диагностика

Проверка состояния

# Статус контейнера
docker ps | grep traefik

# Использование ресурсов
docker stats traefik --no-stream

# Логи в реальном времени
docker logs traefik -f

Dashboard интерфейс

  • URL: http://YOUR_SERVER_IP:8080 или https://traefik.aepif.ru
  • Разделы:
    • HTTP Routers: Настроенные маршруты
    • HTTP Services: Backend сервисы
    • HTTP Middlewares: Промежуточное ПО
    • TLS: SSL сертификаты

Устранение проблем

Проблема: Сертификат не получается

# Проверяем DNS записи
nslookup traefik.aepif.ru

# Проверяем доступность порта 443 извне
telnet YOUR_SERVER_IP 443

# Смотрим логи ACME
docker logs traefik | grep acme

Проблема: Dashboard недоступен

# Проверяем, что контейнер запущен
docker ps | grep traefik

# Проверяем порт
netstat -tulpn | grep :8080

# Проверяем логи
docker logs traefik --tail 50

Проблема: Сервисы не обнаруживаются

# Проверяем сеть proxy
docker network inspect proxy

# Проверяем подключение Traefik к Docker socket
docker logs traefik | grep docker

# Проверяем labels сервисов
docker inspect SERVICE_CONTAINER | grep -A 10 Labels

Безопасность после установки

Рекомендации по безопасности

  1. Закрыть порт 8080: Настроить аутентификацию для Dashboard
  2. Ограничить доступ к Docker socket: Использовать Docker socket proxy
  3. Настроить логирование: Централизованный сбор логов
  4. Мониторинг: Настроить алерты на проблемы с сертификатами

Закрытие небезопасного Dashboard

После настройки всех сервисов, отредактируйте docker-compose.yml:

command:
  - --api.dashboard=true
  # Убираем эту строку:
  # - --api.insecure=true

И добавьте middleware для аутентификации:

labels:
  - traefik.http.routers.traefik.middlewares=authelia@docker

Следующие шаги

После успешного развертывания Traefik:

  1. ../Authelia Authentication/Развертывание - Настройка аутентификации
  2. ../Git Service/Развертывание - Развертывание Git сервера
  3. ../Second Mind Setup/Развертывание - Настройка системы заметок
  4. Администрирование - Ежедневное управление

Автоматизация развертывания

Скрипт развертывания

#!/bin/bash
# deploy-traefik.sh

set -e

echo "🚀 Развертывание Traefik Reverse Proxy"

# Проверяем Docker
if ! command -v docker &> /dev/null; then
    echo "❌ Docker не установлен"
    exit 1
fi

# Создаем сеть
docker network create proxy 2>/dev/null || echo "Сеть proxy уже существует"

# Создаем директорию
mkdir -p /docker/reverse-proxy
cd /docker/reverse-proxy

# Запрашиваем email
read -p "📧 Введите email для Let's Encrypt: " ACME_EMAIL

# Создаем docker-compose.yml с введенным email
cat > docker-compose.yml << EOF
# Вставляем конфигурацию с заменой email
EOF

# Запускаем
docker-compose up -d

echo "✅ Traefik развернут успешно"
echo "🌐 Dashboard: http://$(curl -s ipinfo.io/ip):8080"

Связанные документы