Добавлена конфигурация для внешнего Traefik через file provider
This commit is contained in:
309
README.traefik.md
Normal file
309
README.traefik.md
Normal 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")
|
||||||
64
traefik-file-provider.yml
Normal file
64
traefik-file-provider.yml
Normal file
@@ -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
|
||||||
Reference in New Issue
Block a user