Files
second-mind-aep/Мой сервер/Traefik Reverse Proxy/Обзор системы.md
2025-08-04 14:26:29 +04:00

239 lines
8.8 KiB
Markdown
Raw 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 Reverse Proxy - центральный компонент инфраструктуры aepif.ru, обеспечивающий маршрутизацию трафика, автоматические SSL сертификаты и интеграцию с системой аутентификации.
## Архитектура системы
```mermaid
graph TB
A[Internet] --> B[Traefik v3.0]
B --> C[Second Mind - notes.aepif.ru]
B --> D[Gitea - git.aepif.ru]
B --> E[Authelia - auth.aepif.ru]
B --> F[Webhook Service - webhook.aepif.ru]
B --> G[Traefik Dashboard - traefik.aepif.ru]
H[Let's Encrypt] --> B
I[Docker Socket] --> B
subgraph "SSL Certificates"
H
J[ACME Storage]
end
subgraph "Service Discovery"
I
K[Docker Labels]
end
```
## Основные функции
### Reverse Proxy
- **Назначение**: Централизованная точка входа для всех сервисов
- **Технология**: Traefik v3.0
- **Порты**:
- 80 (HTTP) - автоматический редирект на HTTPS
- 443 (HTTPS) - основной трафик
- 8080 - Dashboard (небезопасен в production)
- 2222 - SSH для Git-сервера
### SSL Management
- **Let's Encrypt**: Автоматическое получение и обновление сертификатов
- **ACME Challenge**: TLS challenge для валидации доменов
- **Автоматический редирект**: HTTP → HTTPS для всех сервисов
- **Хранение**: Персистентные сертификаты в volume
### Service Discovery
- **Docker Integration**: Автоматическое обнаружение сервисов через Docker API
- **Label-based Configuration**: Настройка маршрутизации через Docker labels
- **Dynamic Configuration**: Изменения конфигурации без перезапуска
## Конфигурация
### Docker Compose
Основная конфигурация в `/DOCKER/reverse-proxy/docker-compose.yml`:
```yaml
services:
traefik:
image: traefik:v3.0
command:
- --api.dashboard=true
- --providers.docker=true
- --providers.docker.exposedbydefault=false
- --entrypoints.web.address=:80
- --entrypoints.websecure.address=:443
- --entrypoints.ssh.address=:2222
- --certificatesresolvers.letsencrypt.acme.tlschallenge=true
ports:
- "80:80"
- "443:443"
- "8080:8080"
- "2222:2222"
```
### Entrypoints
- **web** (80): HTTP трафик с редиректом на HTTPS
- **websecure** (443): HTTPS трафик
- **ssh** (2222): TCP трафик для Git SSH
### Middlewares
- **redirect-to-https**: Автоматический редирект HTTP → HTTPS
- **authelia@docker**: Интеграция с Forward Auth
## Маршрутизация
### HTTP Routes
| Домен | Сервис | Middleware | Порт |
|-------|--------|------------|------|
| `notes.aepif.ru` | Second Mind | authelia@docker | 80 |
| `git.aepif.ru` | Gitea | - | 3000 |
| `auth.aepif.ru` | Authelia | - | 9091 |
| `webhook.aepif.ru` | Webhook Service | - | 3000 |
| `traefik.aepif.ru` | Dashboard | - | api@internal |
### TCP Routes
- **SSH Git Access**: `git.aepif.ru:2222` → Gitea container port 22
## Сетевая архитектура
### Proxy Network
```yaml
networks:
proxy:
name: proxy
driver: bridge
```
Все сервисы, которые должны быть доступны через Traefik, подключаются к сети `proxy`.
### Labels Configuration
Пример конфигурации сервиса через labels:
```yaml
labels:
- traefik.enable=true
- traefik.http.routers.service.rule=Host(`service.aepif.ru`)
- traefik.http.routers.service.tls.certresolver=letsencrypt
- traefik.http.services.service.loadbalancer.server.port=80
```
## SSL Сертификаты
### Let's Encrypt Integration
- **Email**: `your_email@aepif.ru` для уведомлений
- **Challenge Type**: TLS Challenge
- **Storage**: `/data/acme.json` в контейнере
- **Автоматическое обновление**: Traefik обновляет сертификаты автоматически
### Wildcard Certificates
Для поддержки wildcard сертификатов потребуется DNS Challenge с API ключами DNS провайдера.
## Dashboard
### Доступ
- **URL**: `https://traefik.aepif.ru`
- **Порт**: 8080 (insecure mode)
- **Функции**: Мониторинг роутеров, сервисов, middleware
### Безопасность
⚠️ **Внимание**: Dashboard в текущей конфигурации доступен без аутентификации. В production рекомендуется:
- Отключить insecure API (`--api.insecure=false`)
- Добавить middleware для аутентификации
- Ограничить доступ по IP
## Мониторинг
### Metrics
- **Prometheus**: Встроенная поддержка метрик Prometheus
- **Health Checks**: Автоматические проверки состояния backend сервисов
- **Access Logs**: Детальные логи запросов
### Troubleshooting
```bash
# Проверка статуса Traefik
curl -I https://traefik.aepif.ru
# Логи Traefik
docker logs traefik -f
# Проверка конфигурации
docker exec traefik traefik version
```
## Безопасность
### TLS Configuration
- **Минимальная версия**: TLS 1.2
- **Cipher Suites**: Современные безопасные шифры
- **HSTS**: HTTP Strict Transport Security headers
### Rate Limiting
Можно настроить ограничение запросов через middleware:
```yaml
labels:
- traefik.http.middlewares.ratelimit.ratelimit.burst=100
- traefik.http.middlewares.ratelimit.ratelimit.average=50
```
## Производительность
### Load Balancing
- **Алгоритм**: Round Robin (по умолчанию)
- **Health Checks**: Автоматическое исключение неисправных backend'ов
- **Connection Pooling**: Переиспользование соединений
### Caching
- **Static Content**: Заголовки кеширования для статических файлов
- **Compression**: Автоматическое сжатие ответов
## Структура файлов
```
/DOCKER/reverse-proxy/
├── docker-compose.yml # Основная конфигурация Traefik
└── volumes/
└── traefik_data/ # ACME сертификаты и данные
└── acme.json # Let's Encrypt сертификаты
```
## Интеграции
### Docker Integration
- **Automatic Service Discovery**: Обнаружение сервисов через Docker API
- **Label-based Configuration**: Настройка через labels в docker-compose
- **Hot Reload**: Изменения применяются без перезапуска
### Authelia Integration
- **Forward Auth**: Интеграция с Authelia для централизованной аутентификации
- **Headers**: Передача информации о пользователе в backend сервисы
## Backup и восстановление
### Критически важные данные
- **acme.json**: SSL сертификаты Let's Encrypt
- **docker-compose.yml**: Конфигурация сервиса
- **traefik.yml**: Статическая конфигурация (если используется)
### Процедура backup
```bash
# Backup SSL сертификатов
docker cp traefik:/data/acme.json ./backup/acme.json
# Backup всего volume
docker run --rm -v traefik_data:/data -v $(pwd):/backup alpine tar czf /backup/traefik_data.tar.gz -C /data .
```
## Связанные сервисы
- **[[Мой сервер/Authelia Authentication/Обзор системы|Authelia]]** - аутентификация через Forward Auth
- **[[Мой сервер/Second Mind Setup/Обзор системы|Second Mind]]** - защищенный доступ к заметкам
- **[[Мой сервер/Git Service/Обзор системы|Git Service]]** - HTTP и SSH доступ к Git
## Связанные документы
- **[[Traefik Reverse Proxy - Конфигурации]]** - детальные настройки и параметры
- **[[Traefik Reverse Proxy - Развертывание]]** - пошаговая установка
- **[[Traefik Reverse Proxy - Администрирование]]** - обслуживание и мониторинг