From cbc07cb30433367751b39a9ef6daeee38474c473 Mon Sep 17 00:00:00 2001 From: DeepAgent Date: Tue, 28 Oct 2025 10:34:04 +0000 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=D1=83=D1=80?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D0=B4=D0=BB=D1=8F=20=D0=B2=D0=BD?= =?UTF-8?q?=D0=B5=D1=88=D0=BD=D0=B5=D0=B3=D0=BE=20Traefik=20=D1=87=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=B7=20file=20provider?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.traefik.md | 309 ++++++++++++++++++++++++++++++++++++++ traefik-file-provider.yml | 64 ++++++++ 2 files changed, 373 insertions(+) create mode 100644 README.traefik.md create mode 100644 traefik-file-provider.yml diff --git a/README.traefik.md b/README.traefik.md new file mode 100644 index 0000000..f2562cc --- /dev/null +++ b/README.traefik.md @@ -0,0 +1,309 @@ +# Настройка 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") diff --git a/traefik-file-provider.yml b/traefik-file-provider.yml new file mode 100644 index 0000000..f19ff9f --- /dev/null +++ b/traefik-file-provider.yml @@ -0,0 +1,64 @@ +# Конфигурация для Traefik File Provider +# Разместите этот файл на хосте с Traefik в папке dynamic конфигурации +# Например: /etc/traefik/dynamic/global-it24.yml + +http: + routers: + global-it24-router: + rule: "Host(`video.mscsrv.ru`)" + service: global-it24-service + entryPoints: + - websecure + tls: + certResolver: letsencrypt # или ваш certResolver + middlewares: + - global-it24-compress + - global-it24-headers + + services: + global-it24-service: + loadBalancer: + servers: + # Замените IP_ХОСТА_С_ПРИЛОЖЕНИЕМ на реальный IP сервера + # где развернут docker-compose с приложением + - url: "http://IP_ХОСТА_С_ПРИЛОЖЕНИЕМ:3000" + healthCheck: + path: / + interval: 30s + timeout: 10s + + middlewares: + global-it24-compress: + compress: {} + + global-it24-headers: + headers: + customResponseHeaders: + X-Frame-Options: "SAMEORIGIN" + X-Content-Type-Options: "nosniff" + X-XSS-Protection: "1; mode=block" + Referrer-Policy: "strict-origin-when-cross-origin" + sslRedirect: true + stsSeconds: 31536000 + stsIncludeSubdomains: true + stsPreload: true + +# Для HTTP редиректа (опционально, если нужен редирект с www) +# 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