vault backup: 2025-08-04 12:45:56
This commit is contained in:
@@ -447,4 +447,4 @@ http {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Система администрирования настроена! Для дальнейшего изучения см. [[Обзор системы]]
|
Система администрирования настроена! Для дальнейшего изучения см. [[Мой сервер/Second Mind Setup/Обзор системы]]
|
||||||
@@ -93,6 +93,6 @@ graph TB
|
|||||||
## Следующие шаги
|
## Следующие шаги
|
||||||
|
|
||||||
Для развертывания системы изучите:
|
Для развертывания системы изучите:
|
||||||
- [[Конфигурации]] - настройки всех сервисов
|
- [[Мой сервер/Second Mind Setup/Конфигурации]] - настройки всех сервисов
|
||||||
- [[Развертывание]] - пошаговая инструкция установки
|
- [[Развертывание]] - пошаговая инструкция установки
|
||||||
- [[Администрирование]] - обслуживание и мониторинг
|
- [[Администрирование]] - обслуживание и мониторинг
|
||||||
415
Мой сервер/Инфраструктура/Конфигурации.md
Normal file
415
Мой сервер/Инфраструктура/Конфигурации.md
Normal file
@@ -0,0 +1,415 @@
|
|||||||
|
## Traefik Reverse Proxy
|
||||||
|
|
||||||
|
### docker-compose.yml
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
version: '3.8'
|
||||||
|
services:
|
||||||
|
traefik:
|
||||||
|
image: traefik:v3.0
|
||||||
|
container_name: traefik
|
||||||
|
command:
|
||||||
|
# API и Dashboard
|
||||||
|
- --api.dashboard=true
|
||||||
|
- --api.insecure=true
|
||||||
|
|
||||||
|
# Docker provider
|
||||||
|
- --providers.docker=true
|
||||||
|
- --providers.docker.exposedbydefault=false
|
||||||
|
- --providers.docker.network=proxy
|
||||||
|
|
||||||
|
# Entrypoints (порты входа)
|
||||||
|
- --entrypoints.web.address=:80
|
||||||
|
- --entrypoints.websecure.address=:443
|
||||||
|
- --entrypoints.ssh.address=:2222
|
||||||
|
|
||||||
|
# SSL сертификаты Let's Encrypt
|
||||||
|
- --certificatesresolvers.letsencrypt.acme.email=your_email@aepif.ru
|
||||||
|
- --certificatesresolvers.letsencrypt.acme.storage=/data/acme.json
|
||||||
|
- --certificatesresolvers.letsencrypt.acme.tlschallenge=true
|
||||||
|
|
||||||
|
# TCP routing
|
||||||
|
- --providers.docker.exposedByDefault=false
|
||||||
|
ports:
|
||||||
|
- "80:80" # HTTP
|
||||||
|
- "443:443" # HTTPS
|
||||||
|
- "8080:8080" # Dashboard
|
||||||
|
- "2222:2222" # SSH для Git
|
||||||
|
volumes:
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||||
|
- traefik_data:/data
|
||||||
|
networks:
|
||||||
|
- proxy
|
||||||
|
labels:
|
||||||
|
- traefik.enable=true
|
||||||
|
|
||||||
|
# Dashboard маршрут
|
||||||
|
- traefik.http.routers.traefik.rule=Host(`traefik.aepif.ru`)
|
||||||
|
- traefik.http.routers.traefik.tls.certresolver=letsencrypt
|
||||||
|
- traefik.http.routers.traefik.service=api@internal
|
||||||
|
|
||||||
|
# HTTP → HTTPS редирект
|
||||||
|
- traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`)
|
||||||
|
- traefik.http.routers.http-catchall.entrypoints=web
|
||||||
|
- traefik.http.routers.http-catchall.middlewares=redirect-to-https
|
||||||
|
- traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
traefik_data:
|
||||||
|
|
||||||
|
networks:
|
||||||
|
proxy:
|
||||||
|
name: proxy
|
||||||
|
driver: bridge
|
||||||
|
```
|
||||||
|
|
||||||
|
### Переменные окружения (.env)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
DOMAIN=aepif.ru
|
||||||
|
ADMIN_EMAIL=epifantsev1aa@gmail.com
|
||||||
|
```
|
||||||
|
|
||||||
|
### Важные особенности конфигурации
|
||||||
|
|
||||||
|
#### Entrypoints (точки входа)
|
||||||
|
- **web** (80): HTTP трафик, автоматически редиректится на HTTPS
|
||||||
|
- **websecure** (443): HTTPS трафик для веб-сервисов
|
||||||
|
- **ssh** (2222): TCP трафик для SSH доступа к Git
|
||||||
|
|
||||||
|
#### Labels для автоматического SSL
|
||||||
|
```yaml
|
||||||
|
# Для любого сервиса добавить эти labels:
|
||||||
|
labels:
|
||||||
|
- traefik.enable=true
|
||||||
|
- traefik.http.routers.service-name.rule=Host(`subdomain.aepif.ru`)
|
||||||
|
- traefik.http.routers.service-name.tls.certresolver=letsencrypt
|
||||||
|
- traefik.http.services.service-name.loadbalancer.server.port=SERVICE_PORT
|
||||||
|
```
|
||||||
|
|
||||||
|
## Authelia Authentication Service
|
||||||
|
|
||||||
|
### docker-compose.yml
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
version: '3.8'
|
||||||
|
services:
|
||||||
|
redis:
|
||||||
|
image: redis:7-alpine
|
||||||
|
container_name: auth_redis
|
||||||
|
volumes:
|
||||||
|
- redis_data:/data
|
||||||
|
networks:
|
||||||
|
- default
|
||||||
|
command: redis-server --requirepass Ll8qlQ3rgBFo4Syq
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
authelia:
|
||||||
|
image: authelia/authelia:latest
|
||||||
|
container_name: authelia
|
||||||
|
depends_on:
|
||||||
|
- redis
|
||||||
|
volumes:
|
||||||
|
- ./authelia:/config
|
||||||
|
networks:
|
||||||
|
- default
|
||||||
|
- proxy
|
||||||
|
labels:
|
||||||
|
- traefik.enable=true
|
||||||
|
- traefik.http.routers.authelia.rule=Host(`auth.aepif.ru`)
|
||||||
|
- traefik.http.routers.authelia.tls.certresolver=letsencrypt
|
||||||
|
- traefik.http.services.authelia.loadbalancer.server.port=9091
|
||||||
|
|
||||||
|
# Forward Auth Middleware
|
||||||
|
- traefik.http.middlewares.authelia.forwardauth.address=http://authelia:9091/api/verify?rd=https://auth.aepif.ru
|
||||||
|
- traefik.http.middlewares.authelia.forwardauth.trustForwardHeader=true
|
||||||
|
- traefik.http.middlewares.authelia.forwardauth.authResponseHeaders=Remote-User,Remote-Groups,Remote-Name,Remote-Email
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
- TZ=Europe/Moscow
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
redis_data:
|
||||||
|
|
||||||
|
networks:
|
||||||
|
proxy:
|
||||||
|
external: true
|
||||||
|
default:
|
||||||
|
driver: bridge
|
||||||
|
```
|
||||||
|
|
||||||
|
### Переменные окружения (.env)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
DOMAIN=aepif.ru
|
||||||
|
ADMIN_EMAIL=epifantsev1aa@gmail.com
|
||||||
|
|
||||||
|
# JWT секрет для токенов
|
||||||
|
JWT_SECRET=4odTQ0TqW2Ej8m8Cm3K6Wn3VTvg09Mb2Yi4CUzuIPUsHB3fpF54+NbIAqo6+CREA
|
||||||
|
|
||||||
|
# Секрет для сессий
|
||||||
|
SESSION_SECRET=91Zc/PM0EogwZbsX0tsDGLpr4Wg7zwtQUzcp5tYP5dNdRNTlpkXBfJr9EivuD+A4
|
||||||
|
|
||||||
|
# Ключ шифрования для хранилища
|
||||||
|
STORAGE_KEY=sWLemnH0QNsYsYvbav59mQOWxLOeUvSl
|
||||||
|
|
||||||
|
# Пароль Redis
|
||||||
|
REDIS_PASSWORD=Ll8qlQ3rgBFo4Syq
|
||||||
|
|
||||||
|
# Пароль администратора
|
||||||
|
AUTHELIA_ADMIN_PASSWORD=Creonila1
|
||||||
|
```
|
||||||
|
|
||||||
|
## Конфигурация Authelia
|
||||||
|
|
||||||
|
### configuration.yml
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
---
|
||||||
|
# Тема интерфейса (auto, light, dark)
|
||||||
|
theme: auto
|
||||||
|
|
||||||
|
# JWT секрет для подписи токенов
|
||||||
|
jwt_secret: 4odTQ0TqW2Ej8m8Cm3K6Wn3VTvg09Mb2Yi4CUzuIPUsHB3fpF54+NbIAqo6+CREA
|
||||||
|
|
||||||
|
# URL по умолчанию после входа
|
||||||
|
default_redirection_url: https://notes.aepif.ru
|
||||||
|
|
||||||
|
# Настройки сервера
|
||||||
|
server:
|
||||||
|
host: 0.0.0.0
|
||||||
|
port: 9091
|
||||||
|
|
||||||
|
# Логирование
|
||||||
|
log:
|
||||||
|
level: info
|
||||||
|
|
||||||
|
# TOTP настройки (двухфакторная аутентификация)
|
||||||
|
totp:
|
||||||
|
issuer: aepif.ru
|
||||||
|
|
||||||
|
# Бэкенд аутентификации
|
||||||
|
authentication_backend:
|
||||||
|
file:
|
||||||
|
path: /config/users_database.yml
|
||||||
|
|
||||||
|
# Политики доступа
|
||||||
|
access_control:
|
||||||
|
default_policy: deny
|
||||||
|
rules:
|
||||||
|
- domain: notes.aepif.ru
|
||||||
|
policy: one_factor
|
||||||
|
- domain: git.aepif.ru
|
||||||
|
policy: bypass
|
||||||
|
- domain: webhook.aepif.ru
|
||||||
|
policy: bypass
|
||||||
|
- domain: auth.aepif.ru
|
||||||
|
policy: bypass
|
||||||
|
|
||||||
|
# Настройки сессий
|
||||||
|
session:
|
||||||
|
name: authelia_session
|
||||||
|
domain: aepif.ru
|
||||||
|
secret: 91Zc/PM0EogwZbsX0tsDGLpr4Wg7zwtQUzcp5tYP5dNdRNTlpkXBfJr9EivuD+A4
|
||||||
|
expiration: 1h
|
||||||
|
inactivity: 5m
|
||||||
|
redis:
|
||||||
|
host: redis
|
||||||
|
port: 6379
|
||||||
|
password: Ll8qlQ3rgBFo4Syq
|
||||||
|
|
||||||
|
# Защита от брутфорса
|
||||||
|
regulation:
|
||||||
|
max_retries: 3
|
||||||
|
find_time: 2m
|
||||||
|
ban_time: 5m
|
||||||
|
|
||||||
|
# Хранилище данных
|
||||||
|
storage:
|
||||||
|
encryption_key: sWLemnH0QNsYsYvbav59mQOWxLOeUvSl
|
||||||
|
local:
|
||||||
|
path: /config/db.sqlite3
|
||||||
|
|
||||||
|
# Уведомления
|
||||||
|
notifier:
|
||||||
|
filesystem:
|
||||||
|
filename: /config/notification.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
### users_database.yml
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
---
|
||||||
|
users:
|
||||||
|
admin:
|
||||||
|
displayname: "Administrator"
|
||||||
|
# Хешированный пароль (Argon2id)
|
||||||
|
password: "$argon2id$v=19$m=65536,t=3,p=4$iF/2ZnDiY1seRau4Vf5MHw$JbKU6i/2uhvpN0CWg73eD0lzUs7NkcHw6INCH0+YFTA"
|
||||||
|
email: epifantsev1aa@gmail.com
|
||||||
|
groups:
|
||||||
|
- admins
|
||||||
|
- users
|
||||||
|
```
|
||||||
|
|
||||||
|
## Middleware конфигурации
|
||||||
|
|
||||||
|
### Использование Authelia middleware
|
||||||
|
|
||||||
|
Для защиты сервиса через Authelia добавьте в docker-compose.yml сервиса:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
labels:
|
||||||
|
- traefik.enable=true
|
||||||
|
- traefik.http.routers.service-name.rule=Host(`service.aepif.ru`)
|
||||||
|
- traefik.http.routers.service-name.tls.certresolver=letsencrypt
|
||||||
|
- traefik.http.routers.service-name.middlewares=authelia@docker # Защита Authelia
|
||||||
|
- traefik.http.services.service-name.loadbalancer.server.port=SERVICE_PORT
|
||||||
|
```
|
||||||
|
|
||||||
|
### Дополнительные middleware
|
||||||
|
|
||||||
|
#### Rate Limiting
|
||||||
|
```yaml
|
||||||
|
# В Traefik можно добавить rate limiting
|
||||||
|
- traefik.http.middlewares.rate-limit.ratelimit.burst=100
|
||||||
|
- traefik.http.middlewares.rate-limit.ratelimit.average=50
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Security Headers
|
||||||
|
```yaml
|
||||||
|
# Безопасные заголовки
|
||||||
|
- traefik.http.middlewares.security.headers.browserXssFilter=true
|
||||||
|
- traefik.http.middlewares.security.headers.contentTypeNosniff=true
|
||||||
|
- traefik.http.middlewares.security.headers.frameDeny=true
|
||||||
|
```
|
||||||
|
|
||||||
|
## Сетевая конфигурация
|
||||||
|
|
||||||
|
### Сеть proxy
|
||||||
|
|
||||||
|
Сеть `proxy` является центральной для всей инфраструктуры:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
networks:
|
||||||
|
proxy:
|
||||||
|
name: proxy
|
||||||
|
driver: bridge
|
||||||
|
external: true # Сеть используется несколькими docker-compose файлами
|
||||||
|
```
|
||||||
|
|
||||||
|
### Создание сети
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Создание внешней сети (выполнить один раз)
|
||||||
|
docker network create proxy
|
||||||
|
```
|
||||||
|
|
||||||
|
### Подключение сервисов
|
||||||
|
|
||||||
|
Все сервисы, которые должны быть доступны через Traefik, подключаются к сети `proxy`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
services:
|
||||||
|
your-service:
|
||||||
|
# ... конфигурация сервиса
|
||||||
|
networks:
|
||||||
|
- default # Внутренняя сеть для связи с базой данных
|
||||||
|
- proxy # Внешняя сеть для Traefik
|
||||||
|
```
|
||||||
|
|
||||||
|
## SSL/TLS конфигурация
|
||||||
|
|
||||||
|
### ACME настройки
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# В команде Traefik:
|
||||||
|
- --certificatesresolvers.letsencrypt.acme.email=epifantsev1aa@gmail.com
|
||||||
|
- --certificatesresolvers.letsencrypt.acme.storage=/data/acme.json
|
||||||
|
- --certificatesresolvers.letsencrypt.acme.tlschallenge=true
|
||||||
|
```
|
||||||
|
|
||||||
|
### Хранение сертификатов
|
||||||
|
|
||||||
|
Сертификаты сохраняются в `/data/acme.json` внутри контейнера, который маппится на volume `traefik_data`.
|
||||||
|
|
||||||
|
### Автоматическое обновление
|
||||||
|
|
||||||
|
Traefik автоматически обновляет сертификаты за 30 дней до истечения.
|
||||||
|
|
||||||
|
## Генерация секретов
|
||||||
|
|
||||||
|
### Создание случайных секретов
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# JWT секрет (64 символа)
|
||||||
|
openssl rand -base64 48
|
||||||
|
|
||||||
|
# Session секрет (64 символа)
|
||||||
|
openssl rand -base64 48
|
||||||
|
|
||||||
|
# Storage ключ (32 символа)
|
||||||
|
openssl rand -base64 24
|
||||||
|
|
||||||
|
# Redis пароль (16 символов)
|
||||||
|
openssl rand -base64 12
|
||||||
|
```
|
||||||
|
|
||||||
|
### Хеширование паролей для Authelia
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Установка authelia CLI (опционально)
|
||||||
|
docker run --rm -it authelia/authelia:latest authelia hash-password 'your-password'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Файловая структура
|
||||||
|
|
||||||
|
### Полная структура проектов
|
||||||
|
|
||||||
|
```
|
||||||
|
/DOCKER/
|
||||||
|
├── reverse-proxy/
|
||||||
|
│ ├── docker-compose.yml
|
||||||
|
│ ├── .env
|
||||||
|
│ └── volumes/
|
||||||
|
│ └── traefik_data/
|
||||||
|
│ ├── acme.json # SSL сертификаты
|
||||||
|
│ └── traefik.log # Логи Traefik
|
||||||
|
│
|
||||||
|
├── auth/
|
||||||
|
│ ├── docker-compose.yml
|
||||||
|
│ ├── .env
|
||||||
|
│ └── authelia/
|
||||||
|
│ ├── configuration.yml # Основная конфигурация
|
||||||
|
│ ├── users_database.yml # База пользователей
|
||||||
|
│ ├── db.sqlite3 # SQLite база данных
|
||||||
|
│ └── notification.txt # Файл уведомлений
|
||||||
|
│
|
||||||
|
└── second-mind/
|
||||||
|
├── docker-compose.yml
|
||||||
|
├── .env
|
||||||
|
├── nginx.conf
|
||||||
|
├── Dockerfile
|
||||||
|
├── webhook-server/
|
||||||
|
├── obsidian_repo/
|
||||||
|
└── quartz_build/
|
||||||
|
```
|
||||||
|
|
||||||
|
## Права доступа
|
||||||
|
|
||||||
|
### Важные права файлов
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# ACME файл должен быть доступен только Traefik
|
||||||
|
chmod 600 /var/lib/docker/volumes/reverse-proxy_traefik_data/_data/acme.json
|
||||||
|
|
||||||
|
# Конфигурационные файлы Authelia
|
||||||
|
chmod 644 /DOCKER/auth/authelia/configuration.yml
|
||||||
|
chmod 644 /DOCKER/auth/authelia/users_database.yml
|
||||||
|
chmod 600 /DOCKER/auth/.env
|
||||||
|
|
||||||
|
# База данных SQLite
|
||||||
|
chmod 644 /DOCKER/auth/authelia/db.sqlite3
|
||||||
|
```
|
||||||
|
|
||||||
|
Следующий документ: [[Инфраструктура - Развертывание]]
|
||||||
227
Мой сервер/Инфраструктура/Обзор системы.md
Normal file
227
Мой сервер/Инфраструктура/Обзор системы.md
Normal file
@@ -0,0 +1,227 @@
|
|||||||
|
## Описание
|
||||||
|
|
||||||
|
Инфраструктурные сервисы обеспечивают базовую функциональность для всех приложений в экосистеме 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 - Обзор системы]] - основное приложение на этой инфраструктуре
|
||||||
Reference in New Issue
Block a user