Files
second-mind-aep/Мой сервер/Инфраструктура/Обзор системы.md
2025-08-04 12:45:56 +04:00

227 lines
9.5 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.

## Описание
Инфраструктурные сервисы обеспечивают базовую функциональность для всех приложений в экосистеме aepif.ru. Включают в себя reverse proxy с автоматическими SSL сертификатами и систему аутентификации.
## Архитектура инфраструктуры
```mermaid
graph TB
A[Internet] --> B[Traefik Reverse Proxy]
B --> C[Authelia Auth Service]
B --> D[Second Mind]
B --> E[Other Services]
C --> F[Redis Session Store]
C --> G[SQLite User Database]
B --> H[Let's Encrypt]
H --> I[SSL Certificates]
subgraph "Network: proxy"
B
C
D
E
end
subgraph "Auth Network"
C
F
end
```
## Основные компоненты
### Traefik Reverse Proxy
- **Назначение**: Централизованная маршрутизация трафика
- **Домен**: `traefik.aepif.ru` (dashboard)
- **Порты**:
- 80 (HTTP) → автоматический редирект на HTTPS
- 443 (HTTPS)
- 2222 (SSH для Git)
- 8080 (Dashboard)
- **Функции**:
- Автоматическое получение SSL сертификатов от Let's Encrypt
- Load balancing между контейнерами
- TCP и HTTP маршрутизация
- Middleware для аутентификации
### Authelia Authentication
- **Назначение**: Централизованная аутентификация и авторизация
- **Домен**: `auth.aepif.ru`
- **Технология**: Forward Auth middleware
- **Функции**:
- Single Sign-On (SSO) для всех сервисов
- Two-factor authentication (TOTP)
- Session management через Redis
- Политики доступа по доменам
### Redis Session Store
- **Назначение**: Хранение пользовательских сессий
- **Технология**: Redis 7 Alpine
- **Особенности**:
- Персистентное хранение сессий
- Защита паролем
- Быстрый доступ к данным сессий
## Структура проектов
### Reverse Proxy
```
/DOCKER/reverse-proxy/
├── docker-compose.yml # Конфигурация Traefik
├── .env # Переменные окружения
└── volumes/
└── traefik_data/ # ACME сертификаты и конфиг
```
### Authentication Service
```
/DOCKER/auth/
├── docker-compose.yml # Конфигурация Authelia + Redis
├── .env # Переменные окружения и секреты
└── authelia/ # Конфигурация Authelia
├── configuration.yml # Основная конфигурация
├── users_database.yml # База пользователей
├── db.sqlite3 # SQLite база данных
└── notification.txt # Файл уведомлений
```
## Принцип работы
### Маршрутизация запросов
1. **Пользователь** обращается к любому поддомену `*.aepif.ru`
2. **Traefik** перехватывает запрос и анализирует Host header
3. **Traefik** проверяет, требуется ли аутентификация (middleware authelia)
4. Если нужна **аутентификация** → перенаправление на `auth.aepif.ru`
5. **Authelia** проверяет сессию или запрашивает логин/пароль
6. После успешной **аутентификации** → возврат к исходному сервису
7. **Traefik** проксирует запрос к целевому контейнеру
### SSL сертификаты
1. **Let's Encrypt ACME** автоматически получает сертификаты для новых доменов
2. **Traefik** автоматически обновляет сертификаты перед истечением
3. Все **HTTP запросы** автоматически перенаправляются на HTTPS
4. **Сертификаты сохраняются** в volume для персистентности
## Домены и маршрутизация
| Домен | Сервис | Аутентификация | Описание |
|-------|--------|---------------|----------|
| `traefik.aepif.ru` | Traefik Dashboard | Нет* | Панель управления Traefik |
| `auth.aepif.ru` | Authelia | Bypass | Страница входа в систему |
| `notes.aepif.ru` | Second Mind | ✅ Authelia | Заметки с защитой |
| `git.aepif.ru` | Gitea | Bypass | Git-сервер (собственная авторизация) |
| `webhook.aepif.ru` | Webhook Service | Bypass | API для автоматизации |
*Dashboard Traefik в production должен быть защищен
## Политики доступа
### Конфигурация в Authelia
```yaml
access_control:
default_policy: deny # По умолчанию запрещен доступ
rules:
- domain: notes.aepif.ru
policy: one_factor # Требует логин/пароль
- domain: git.aepif.ru
policy: bypass # Собственная авторизация Gitea
- domain: webhook.aepif.ru
policy: bypass # API с токеном
- domain: auth.aepif.ru
policy: bypass # Сама страница входа
```
### Типы политик
- **bypass**: Доступ без аутентификации через Authelia
- **one_factor**: Требует логин/пароль
- **two_factor**: Требует логин/пароль + TOTP код
- **deny**: Полный запрет доступа
## Пользователи и группы
### Структура пользователей
```yaml
users:
admin:
displayname: "Administrator"
password: "$argon2id$..." # Хешированный пароль
email: epifantsev1aa@gmail.com
groups:
- admins # Администраторская группа
- users # Базовая группа пользователей
```
### Управление паролями
- Пароли хранятся в формате **Argon2id** (безопасное хеширование)
- Поддержка **reset паролей** через email уведомления
- Интеграция с **TOTP** для двухфакторной аутентификации
## Безопасность
### Уровни защиты
1. **SSL/TLS**: Все соединения зашифрованы
2. **Forward Auth**: Централизованная проверка аутентификации
3. **Session Management**: Безопасное хранение сессий в Redis
4. **Password Hashing**: Argon2id для хранения паролей
5. **Rate Limiting**: Защита от брутфорса (3 попытки за 2 минуты)
6. **Session Expiration**: Автоматическое истечение сессий
### Настройки безопасности
```yaml
regulation:
max_retries: 3 # Максимум попыток входа
find_time: 2m # Период для подсчета попыток
ban_time: 5m # Время блокировки
session:
expiration: 1h # Время жизни сессии
inactivity: 5m # Время неактивности до выхода
```
## Мониторинг
### Доступные метрики
- **Traefik Dashboard**: Статистика запросов, ошибок, времени ответа
- **Authelia Logs**: Попытки входа, ошибки аутентификации
- **Redis Metrics**: Использование памяти, количество ключей
- **SSL Certificate Status**: Статус и срок действия сертификатов
### Health Checks
```bash
# Проверка Traefik
curl -I https://traefik.aepif.ru
# Проверка Authelia
curl -I https://auth.aepif.ru
# Проверка SSL сертификатов
openssl s_client -connect aepif.ru:443 -servername aepif.ru | openssl x509 -noout -dates
```
## Преимущества архитектуры
- **Централизация**: Единая точка входа для всех сервисов
- **Автоматизация SSL**: Не нужно вручную управлять сертификатами
- **Безопасность**: Единая система аутентификации
- **Масштабируемость**: Легко добавлять новые сервисы
- **Мониторинг**: Централизованная статистика
- **Zero Downtime**: Обновления без простоя сервисов
## Связанные документы
- [[Инфраструктура - Конфигурации]] - детальные настройки всех компонентов
- [[Инфраструктура - Развертывание]] - установка и первоначальная настройка
- [[Инфраструктура - Администрирование]] - обслуживание и мониторинг
- [[Second Mind - Обзор системы]] - основное приложение на этой инфраструктуре