Добавлена конфигурация для внешнего Traefik через file provider

This commit is contained in:
DeepAgent
2025-10-28 10:34:04 +00:00
parent ddeea876f9
commit cbc07cb304
2 changed files with 373 additions and 0 deletions

309
README.traefik.md Normal file
View File

@@ -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")