# Настройка Traefik File Provider для Global-IT24 ## 📋 Архитектура ``` [Сервер с Traefik] [Сервер с приложением] Traefik docker-compose.yml (порт 80/443) ──────────► (порт 3000) + file provider - postgres + SSL/TLS - nextjs-app ``` ## 🔧 Настройка на сервере с Traefik ### 1. Структура файлов Traefik Обычно на сервере с Traefik: ``` /etc/traefik/ ├── traefik.yml # Статическая конфигурация └── dynamic/ # Динамическая конфигурация (file provider) └── global-it24.yml # ← Конфигурация для вашего приложения ``` ### 2. Проверьте traefik.yml (статическая конфигурация) Убедитесь, что включен file provider: ```yaml # /etc/traefik/traefik.yml providers: file: directory: /etc/traefik/dynamic watch: true # Автоматическая перезагрузка при изменении файлов certificatesResolvers: letsencrypt: acme: email: your-email@example.com storage: /etc/traefik/acme.json httpChallenge: entryPoint: web ``` ### 3. Создайте файл для приложения ```bash # На сервере с Traefik sudo nano /etc/traefik/dynamic/global-it24.yml ``` Скопируйте содержимое файла `traefik-file-provider.yml` из репозитория. **ВАЖНО:** Замените `IP_ХОСТА_С_ПРИЛОЖЕНИЕМ` на реальный IP: ```yaml http: services: global-it24-service: loadBalancer: servers: - url: "http://192.168.1.100:3000" # ← Ваш IP ``` ### 4. Проверьте конфигурацию ```bash # Проверка синтаксиса (если Traefik запущен локально) traefik validate --configFile=/etc/traefik/traefik.yml # Или просто проверьте логи после сохранения файла docker logs traefik --tail 50 -f ``` Должно появиться сообщение: ``` Configuration loaded from file: /etc/traefik/dynamic/global-it24.yml ``` ### 5. Проверка работы ```bash # Проверка DNS dig video.mscsrv.ru # Проверка доступности приложения curl -I http://IP_ХОСТА_С_ПРИЛОЖЕНИЕМ:3000 # Проверка через Traefik curl -I https://video.mscsrv.ru ``` ## 🔒 Firewall на сервере с приложением Разрешите доступ к порту 3000 **только** с IP сервера Traefik: ```bash # Узнайте IP сервера Traefik # Например: 203.0.113.50 # Разрешите доступ только с IP Traefik sudo ufw allow from 203.0.113.50 to any port 3000 proto tcp comment 'Traefik proxy' # Или если используете firewalld sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.50" port protocol="tcp" port="3000" accept' sudo firewall-cmd --reload ``` ## 📝 Изменение домена Если нужно изменить домен с `video.mscsrv.ru` на другой: ### На сервере с Traefik: ```bash sudo nano /etc/traefik/dynamic/global-it24.yml ``` Измените: ```yaml rule: "Host(`новый-домен.ru`)" ``` ### На сервере с приложением: 1. Измените `.env`: ```bash nano /home/ubuntu/global_it24_landing/.env ``` ```env NEXT_PUBLIC_SITE_URL=https://новый-домен.ru ``` 2. Пересоберите приложение: ```bash cd /home/ubuntu/global_it24_landing ./deploy-simple.sh ``` ## 🔍 Отладка ### Проблема: 502 Bad Gateway **Причины:** 1. Приложение не запущено 2. Неправильный IP в конфигурации 3. Firewall блокирует порт 3000 4. Приложение не отвечает на healthcheck **Проверка:** ```bash # На сервере с приложением cd /home/ubuntu/global_it24_landing ./status.sh # Должно показать: # ✅ global-it24-landing Up (healthy) # Проверка доступности с сервера Traefik # (выполните на сервере с Traefik) curl -I http://IP_ПРИЛОЖЕНИЯ:3000 ``` ### Проблема: 404 Not Found **Причина:** Traefik не нашел роутер для домена **Проверка:** ```bash # На сервере с Traefik cat /etc/traefik/dynamic/global-it24.yml | grep "Host(" # Должно показать: # rule: "Host(`video.mscsrv.ru`)" # Проверьте что домен резолвится на IP сервера Traefik dig video.mscsrv.ru +short ``` ### Проблема: SSL сертификат не выдается **Причины:** 1. DNS не настроен 2. Порт 80 недоступен (нужен для ACME challenge) 3. Неверный email в конфигурации **Проверка:** ```bash # Проверьте логи Traefik docker logs traefik | grep -i acme # Проверьте доступность порта 80 curl -I http://video.mscsrv.ru/.well-known/acme-challenge/test ``` ## 📊 Мониторинг ### На сервере с приложением: ```bash # Логи приложения cd /home/ubuntu/global_it24_landing ./logs.sh # Статус контейнеров ./status.sh # Использование ресурсов docker stats global-it24-landing global-it24-postgres ``` ### На сервере с Traefik: ```bash # Логи Traefik docker logs traefik --tail 100 -f # Dashboard Traefik (если включен) # https://traefik.mscsrv.ru/dashboard/ ``` ## 🔄 Обновление приложения ```bash # На сервере с приложением cd /home/ubuntu/global_it24_landing git pull origin master ./deploy-simple.sh # Traefik автоматически переключится на новую версию # после прохождения healthcheck ``` ## 🎯 Дополнительные настройки ### Rate Limiting (ограничение запросов) Добавьте в `/etc/traefik/dynamic/global-it24.yml`: ```yaml http: middlewares: global-it24-ratelimit: rateLimit: average: 100 # запросов в секунду burst: 200 period: 1s routers: global-it24-router: middlewares: - global-it24-compress - global-it24-headers - global-it24-ratelimit # ← Добавьте ``` ### IP Whitelist (разрешить доступ только с определенных IP) ```yaml http: middlewares: global-it24-ipwhitelist: ipWhiteList: sourceRange: - "203.0.113.0/24" - "198.51.100.50" routers: global-it24-router: middlewares: - global-it24-ipwhitelist # ← Добавьте ``` ### Редирект с www на без www Раскомментируйте секцию в конце файла `traefik-file-provider.yml`: ```yaml http: routers: global-it24-www-redirect: rule: "Host(`www.video.mscsrv.ru`)" service: noop@internal entryPoints: - websecure middlewares: - global-it24-www-to-non-www tls: certResolver: letsencrypt middlewares: global-it24-www-to-non-www: redirectRegex: regex: "^https://www\\.video\\.mscsrv\\.ru/(.*)" replacement: "https://video.mscsrv.ru/$${1}" permanent: true ``` ## 📞 Контакты **Репозиторий:** `git.mscsrv.ru/sa/global_it24_landing.git` --- **Последнее обновление:** $(date +"%Y-%m-%d")