Files
global_it24_landing/README.traefik.md

310 lines
7.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Настройка 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")