vault backup: 2025-08-04 14:26:29
This commit is contained in:
4
index.md
4
index.md
@@ -1,2 +1,4 @@
|
||||
|
||||
тут я буду вести лог с помощью аи агента
|
||||
# Мои заметки
|
||||
|
||||
Добро пожаловать в мою систему заметок! Здесь я веду записи по различным аспектам жизни и работы.
|
||||
|
||||
35
Мой сервер/Authelia Authentication/Администрирование.md
Normal file
35
Мой сервер/Authelia Authentication/Администрирование.md
Normal file
@@ -0,0 +1,35 @@
|
||||
# Authelia Authentication - Администрирование
|
||||
|
||||
## Ежедневное администрирование Authelia
|
||||
|
||||
*Документация будет дополнена процедурами администрирования*
|
||||
|
||||
## Управление пользователями
|
||||
*Добавление, изменение, удаление пользователей*
|
||||
|
||||
## Управление группами и правами
|
||||
*Настройка access control правил*
|
||||
|
||||
## Мониторинг аутентификации
|
||||
*Анализ логов входа и безопасности*
|
||||
|
||||
## Password reset процедуры
|
||||
*Сброс паролей пользователей*
|
||||
|
||||
## Управление TOTP
|
||||
*Настройка и сброс двухфакторной аутентификации*
|
||||
|
||||
## Мониторинг Redis
|
||||
*Контроль хранилища сессий*
|
||||
|
||||
## Troubleshooting
|
||||
*Решение проблем с аутентификацией*
|
||||
|
||||
## Backup пользователей
|
||||
*Резервное копирование базы пользователей*
|
||||
|
||||
## Обновления Authelia
|
||||
*Процедуры обновления сервиса*
|
||||
|
||||
---
|
||||
*Эта страница находится в разработке*
|
||||
29
Мой сервер/Authelia Authentication/Конфигурации.md
Normal file
29
Мой сервер/Authelia Authentication/Конфигурации.md
Normal file
@@ -0,0 +1,29 @@
|
||||
# Authelia Authentication - Конфигурации
|
||||
|
||||
## Детальные настройки конфигурации Authelia
|
||||
|
||||
*Документация будет дополнена деталями конфигурации*
|
||||
|
||||
## Docker Compose конфигурация
|
||||
*Настройки контейнеров Authelia и Redis*
|
||||
|
||||
## Основной файл configuration.yml
|
||||
*Разбор всех параметров конфигурации*
|
||||
|
||||
## User Database
|
||||
*Управление файлом users_database.yml*
|
||||
|
||||
## Access Control Rules
|
||||
*Детальная настройка политик доступа*
|
||||
|
||||
## Session Configuration
|
||||
*Настройки сессий и Redis интеграции*
|
||||
|
||||
## TOTP Configuration
|
||||
*Конфигурация двухфакторной аутентификации*
|
||||
|
||||
## Notifier Settings
|
||||
*Настройка уведомлений*
|
||||
|
||||
---
|
||||
*Эта страница находится в разработке*
|
||||
314
Мой сервер/Authelia Authentication/Обзор системы.md
Normal file
314
Мой сервер/Authelia Authentication/Обзор системы.md
Normal file
@@ -0,0 +1,314 @@
|
||||
## Описание
|
||||
|
||||
Authelia Authentication - централизованная система аутентификации и авторизации для всех сервисов экосистемы aepif.ru. Обеспечивает Single Sign-On (SSO), двухфакторную аутентификацию и гранулярное управление доступом.
|
||||
|
||||
## Архитектура системы
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
A[User Request] --> B[Traefik Reverse Proxy]
|
||||
B --> C{Authelia Middleware}
|
||||
C -->|Authenticated| D[Target Service]
|
||||
C -->|Not Authenticated| E[Authelia Login Page]
|
||||
|
||||
E --> F[User Authentication]
|
||||
F --> G[Session Storage - Redis]
|
||||
F --> H[User Database - File]
|
||||
|
||||
G --> I[Session Validation]
|
||||
I --> D
|
||||
|
||||
subgraph "Authelia Container"
|
||||
E
|
||||
F
|
||||
I
|
||||
J[TOTP 2FA]
|
||||
K[Password Reset]
|
||||
end
|
||||
|
||||
subgraph "Redis Container"
|
||||
G
|
||||
L[Session Data]
|
||||
end
|
||||
|
||||
subgraph "Configuration"
|
||||
H
|
||||
M[Access Control Rules]
|
||||
N[Notification Settings]
|
||||
end
|
||||
```
|
||||
|
||||
## Основные компоненты
|
||||
|
||||
### Authelia Server
|
||||
- **Назначение**: Центральный сервер аутентификации
|
||||
- **Домен**: `auth.aepif.ru`
|
||||
- **Порт**: 9091
|
||||
- **Технология**: Go-based authentication server
|
||||
- **Особенности**:
|
||||
- Forward Authentication integration с Traefik
|
||||
- TOTP двухфакторная аутентификация
|
||||
- Password reset через файловые уведомления
|
||||
- Детальные политики доступа
|
||||
|
||||
### Redis Session Store
|
||||
- **Назначение**: Хранение пользовательских сессий
|
||||
- **Технология**: Redis 7 Alpine
|
||||
- **Контейнер**: `auth_redis`
|
||||
- **Особенности**:
|
||||
- Персистентное хранение сессий
|
||||
- Защита паролем (`Ll8qlQ3rgBFo4Syq`)
|
||||
- Быстрый доступ к данным сессий
|
||||
- Автоматическое истечение сессий
|
||||
|
||||
### File-based User Database
|
||||
- **Назначение**: Хранение пользователей и их данных
|
||||
- **Файл**: `/config/users_database.yml`
|
||||
- **Особенности**:
|
||||
- Argon2id хеширование паролей
|
||||
- Группы пользователей для управления доступом
|
||||
- Email адреса для уведомлений
|
||||
|
||||
## Конфигурация
|
||||
|
||||
### Docker Compose
|
||||
Основная конфигурация в `/DOCKER/auth/docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
container_name: auth_redis
|
||||
command: redis-server --requirepass Ll8qlQ3rgBFo4Syq
|
||||
|
||||
authelia:
|
||||
image: authelia/authelia:latest
|
||||
container_name: authelia
|
||||
depends_on:
|
||||
- redis
|
||||
volumes:
|
||||
- ./authelia:/config
|
||||
networks:
|
||||
- proxy # Подключение к Traefik
|
||||
```
|
||||
|
||||
### Основная конфигурация
|
||||
Файл `/DOCKER/auth/authelia/configuration.yml`:
|
||||
|
||||
```yaml
|
||||
jwt_secret: 4odTQ0TqW2Ej8m8Cm3K6Wn3VTvg09Mb2Yi4CUzuIPUsHB3fpF54+NbIAqo6+CREA
|
||||
default_redirection_url: https://notes.aepif.ru
|
||||
|
||||
server:
|
||||
host: 0.0.0.0
|
||||
port: 9091
|
||||
|
||||
totp:
|
||||
issuer: aepif.ru
|
||||
|
||||
session:
|
||||
domain: aepif.ru
|
||||
expiration: 1h
|
||||
inactivity: 5m
|
||||
redis:
|
||||
host: redis
|
||||
port: 6379
|
||||
password: Ll8qlQ3rgBFo4Syq
|
||||
```
|
||||
|
||||
## Политики доступа
|
||||
|
||||
### Access Control Rules
|
||||
Текущие правила доступа:
|
||||
|
||||
```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**: Полный запрет доступа
|
||||
|
||||
## Пользователи и группы
|
||||
|
||||
### Структура пользователей
|
||||
Файл `users_database.yml`:
|
||||
|
||||
```yaml
|
||||
users:
|
||||
admin:
|
||||
displayname: "Administrator"
|
||||
password: "$argon2id$..." # Хешированный пароль Argon2id
|
||||
email: epifantsev1aa@gmail.com
|
||||
groups:
|
||||
- admins # Администраторская группа
|
||||
- users # Базовая группа пользователей
|
||||
```
|
||||
|
||||
### Управление паролями
|
||||
- **Хеширование**: Argon2id (высокий уровень безопасности)
|
||||
- **Reset процедура**: Через файловые уведомления
|
||||
- **Требования**: Минимальная длина, сложность
|
||||
|
||||
## Двухфакторная аутентификация
|
||||
|
||||
### TOTP Configuration
|
||||
- **Issuer**: `aepif.ru`
|
||||
- **QR Code**: Автоматическая генерация для настройки
|
||||
- **Backup Codes**: Коды восстановления доступа
|
||||
- **Приложения**: Google Authenticator, Authy, 1Password
|
||||
|
||||
### Настройка TOTP
|
||||
1. Первый вход с логином/паролем
|
||||
2. Сканирование QR кода мобильным приложением
|
||||
3. Подтверждение TOTP кода
|
||||
4. Сохранение backup кодов
|
||||
|
||||
## Интеграция с Traefik
|
||||
|
||||
### Forward Auth Middleware
|
||||
Traefik labels для защищенных сервисов:
|
||||
|
||||
```yaml
|
||||
labels:
|
||||
- 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
|
||||
```
|
||||
|
||||
### Headers передача
|
||||
Authelia передает в backend сервисы:
|
||||
- **Remote-User**: Username аутентифицированного пользователя
|
||||
- **Remote-Groups**: Группы пользователя
|
||||
- **Remote-Name**: Display name
|
||||
- **Remote-Email**: Email адрес
|
||||
|
||||
## Сессии и безопасность
|
||||
|
||||
### Session Management
|
||||
- **Время жизни**: 1 час активной сессии
|
||||
- **Неактивность**: 5 минут до автоматического выхода
|
||||
- **Хранение**: Redis с паролем
|
||||
- **Domain**: `.aepif.ru` (работает для всех поддоменов)
|
||||
|
||||
### Regulation (Rate Limiting)
|
||||
Защита от брутфорса:
|
||||
|
||||
```yaml
|
||||
regulation:
|
||||
max_retries: 3 # Максимум попыток входа
|
||||
find_time: 2m # Период для подсчета попыток
|
||||
ban_time: 5m # Время блокировки
|
||||
```
|
||||
|
||||
### Безопасность
|
||||
- **JWT Secret**: Секретный ключ для подписи токенов
|
||||
- **Session Secret**: Ключ для шифрования сессий
|
||||
- **Encryption Key**: Ключ для шифрования хранилища
|
||||
- **Secure Headers**: Автоматические заголовки безопасности
|
||||
|
||||
## Уведомления
|
||||
|
||||
### File Notifier
|
||||
- **Файл**: `/config/notification.txt`
|
||||
- **Назначение**: Password reset уведомления
|
||||
- **Формат**: Простой текстовый файл
|
||||
|
||||
### Email Integration (Future)
|
||||
Для полноценных email уведомлений потребуется настройка SMTP:
|
||||
- Password reset emails
|
||||
- 2FA setup notifications
|
||||
- Security alerts
|
||||
|
||||
## Мониторинг
|
||||
|
||||
### Health Checks
|
||||
```bash
|
||||
# Проверка доступности Authelia
|
||||
curl -I https://auth.aepif.ru
|
||||
|
||||
# Проверка API здоровья
|
||||
curl https://auth.aepif.ru/api/health
|
||||
|
||||
# Логи Authelia
|
||||
docker logs authelia -f
|
||||
|
||||
# Проверка Redis
|
||||
docker exec auth_redis redis-cli -a Ll8qlQ3rgBFo4Syq ping
|
||||
```
|
||||
|
||||
### Metrics
|
||||
- **Authentication attempts**: Успешные/неуспешные попытки входа
|
||||
- **Session statistics**: Активные сессии, время жизни
|
||||
- **2FA usage**: Статистика использования TOTP
|
||||
- **Access denials**: Заблокированные запросы
|
||||
|
||||
## Структура файлов
|
||||
|
||||
```
|
||||
/DOCKER/auth/
|
||||
├── docker-compose.yml # Конфигурация Authelia + Redis
|
||||
├── authelia/ # Конфигурация Authelia
|
||||
│ ├── configuration.yml # Основная конфигурация
|
||||
│ ├── users_database.yml # База пользователей
|
||||
│ ├── db.sqlite3 # SQLite база данных (для хранения состояния)
|
||||
│ └── notification.txt # Файл уведомлений
|
||||
└── volumes/
|
||||
└── redis_data/ # Данные Redis
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Общие проблемы
|
||||
1. **Не работает аутентификация**: Проверить сеть `proxy`, статус контейнеров
|
||||
2. **Сессии не сохраняются**: Проверить подключение к Redis
|
||||
3. **TOTP не работает**: Синхронизировать время на сервере и устройстве
|
||||
4. **Password reset**: Проверить файл уведомлений
|
||||
|
||||
### Логи отладки
|
||||
```yaml
|
||||
# В configuration.yml для детальных логов
|
||||
log:
|
||||
level: debug
|
||||
```
|
||||
|
||||
## Backup и восстановление
|
||||
|
||||
### Критически важные данные
|
||||
- **configuration.yml**: Основная конфигурация
|
||||
- **users_database.yml**: База пользователей
|
||||
- **db.sqlite3**: Состояние системы (2FA secrets, etc.)
|
||||
- **redis_data**: Активные сессии
|
||||
|
||||
### Процедура backup
|
||||
```bash
|
||||
# Backup конфигурации Authelia
|
||||
tar czf authelia_config_backup.tar.gz -C /DOCKER/auth/authelia .
|
||||
|
||||
# Backup Redis данных
|
||||
docker exec auth_redis redis-cli -a Ll8qlQ3rgBFo4Syq BGSAVE
|
||||
```
|
||||
|
||||
## Связанные сервисы
|
||||
|
||||
- **[[Мой сервер/Traefik Reverse Proxy/Обзор системы|Traefik]]** - интеграция через Forward Auth middleware
|
||||
- **[[Мой сервер/Second Mind Setup/Обзор системы|Second Mind]]** - защита доступа к заметкам
|
||||
- **Redis** - хранение сессий и состояния
|
||||
|
||||
## Связанные документы
|
||||
|
||||
- **[[Authelia Authentication - Конфигурации]]** - детальные настройки всех компонентов
|
||||
- **[[Authelia Authentication - Развертывание]]** - пошаговая установка
|
||||
- **[[Authelia Authentication - Администрирование]]** - управление пользователями и мониторинг
|
||||
32
Мой сервер/Authelia Authentication/Развертывание.md
Normal file
32
Мой сервер/Authelia Authentication/Развертывание.md
Normal file
@@ -0,0 +1,32 @@
|
||||
# Authelia Authentication - Развертывание
|
||||
|
||||
## Пошаговая установка Authelia
|
||||
|
||||
*Документация будет дополнена инструкциями по развертыванию*
|
||||
|
||||
## Предварительные требования
|
||||
*Системные требования, Traefik, сеть proxy*
|
||||
|
||||
## Подготовка конфигурации
|
||||
*Создание файлов configuration.yml и users_database.yml*
|
||||
|
||||
## Генерация секретов
|
||||
*Создание JWT и session секретов*
|
||||
|
||||
## Создание пользователей
|
||||
*Настройка первичных пользователей*
|
||||
|
||||
## Развертывание контейнеров
|
||||
*Запуск Authelia и Redis*
|
||||
|
||||
## Интеграция с Traefik
|
||||
*Настройка Forward Auth middleware*
|
||||
|
||||
## Тестирование аутентификации
|
||||
*Проверка работы системы*
|
||||
|
||||
## Настройка TOTP
|
||||
*Конфигурация двухфакторной аутентификации*
|
||||
|
||||
---
|
||||
*Эта страница находится в разработке*
|
||||
60
Мой сервер/Git Service/Администрирование.md
Normal file
60
Мой сервер/Git Service/Администрирование.md
Normal file
@@ -0,0 +1,60 @@
|
||||
# Git Service - Администрирование
|
||||
|
||||
## Ежедневное администрирование
|
||||
|
||||
Этот документ содержит информацию по управлению и обслуживанию Git Service.
|
||||
|
||||
## Управление пользователями
|
||||
|
||||
### Создание пользователей
|
||||
*Процедуры добавления новых пользователей*
|
||||
|
||||
### Управление правами доступа
|
||||
*Настройка прав и ролей*
|
||||
|
||||
### Сброс паролей
|
||||
*Процедуры восстановления доступа*
|
||||
|
||||
## Управление репозиториями
|
||||
|
||||
### Создание репозиториев
|
||||
*Настройка новых репозиториев*
|
||||
|
||||
### Backup репозиториев
|
||||
*Процедуры резервного копирования*
|
||||
|
||||
### Миграция репозиториев
|
||||
*Перенос репозиториев*
|
||||
|
||||
## Мониторинг
|
||||
|
||||
### Проверка состояния сервиса
|
||||
*Health checks и мониторинг*
|
||||
|
||||
### Анализ логов
|
||||
*Работа с логами Gitea и PostgreSQL*
|
||||
|
||||
### Метрики производительности
|
||||
*Мониторинг ресурсов*
|
||||
|
||||
## Обслуживание
|
||||
|
||||
### Обновления
|
||||
*Процедуры обновления Gitea*
|
||||
|
||||
### Backup и восстановление
|
||||
*Полное резервное копирование*
|
||||
|
||||
### Troubleshooting
|
||||
*Решение типовых проблем*
|
||||
|
||||
## Интеграции
|
||||
|
||||
### Настройка Webhooks
|
||||
*Конфигурация уведомлений*
|
||||
|
||||
### Интеграция с CI/CD
|
||||
*Подключение систем автоматизации*
|
||||
|
||||
---
|
||||
*Эта страница находится в разработке*
|
||||
37
Мой сервер/Git Service/Конфигурации.md
Normal file
37
Мой сервер/Git Service/Конфигурации.md
Normal file
@@ -0,0 +1,37 @@
|
||||
# Git Service - Конфигурации
|
||||
|
||||
## Обзор конфигураций
|
||||
|
||||
Этот документ содержит детальную информацию о настройках всех компонентов Git Service.
|
||||
|
||||
## Docker Compose конфигурация
|
||||
|
||||
### Основной файл: `/DOCKER/git/docker-compose.yml`
|
||||
|
||||
*Документация будет дополнена с деталями конфигурации*
|
||||
|
||||
## Gitea конфигурация
|
||||
|
||||
### Переменные окружения
|
||||
*Настройки Gitea через environment variables*
|
||||
|
||||
### Базовые настройки
|
||||
*Конфигурация через app.ini*
|
||||
|
||||
## PostgreSQL конфигурация
|
||||
|
||||
### Настройки базы данных
|
||||
*Параметры PostgreSQL для Gitea*
|
||||
|
||||
## Networking
|
||||
|
||||
### Сетевые настройки
|
||||
*Конфигурация сетей Docker*
|
||||
|
||||
## Volumes и Storage
|
||||
|
||||
### Хранение данных
|
||||
*Настройки volumes для персистентности данных*
|
||||
|
||||
---
|
||||
*Эта страница находится в разработке*
|
||||
204
Мой сервер/Git Service/Обзор системы.md
Normal file
204
Мой сервер/Git Service/Обзор системы.md
Normal file
@@ -0,0 +1,204 @@
|
||||
## Описание
|
||||
|
||||
Git Service - отдельный сервис на базе Gitea, обеспечивающий централизованное хранение кода и заметок. Работает независимо от других сервисов и предоставляет Git-интерфейс для всех проектов в экосистеме aepif.ru.
|
||||
|
||||
## Архитектура системы
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
A[Users] --> B[Traefik Proxy]
|
||||
B --> C[Gitea Web Interface]
|
||||
C --> D[Git Repositories]
|
||||
C --> E[PostgreSQL Database]
|
||||
F[SSH Clients] --> G[Gitea SSH:2222]
|
||||
G --> D
|
||||
|
||||
subgraph "Git Service Container"
|
||||
C
|
||||
D
|
||||
end
|
||||
|
||||
subgraph "Database Container"
|
||||
E
|
||||
end
|
||||
|
||||
H[Webhook Consumers] --> C
|
||||
C --> I[Webhook Notifications]
|
||||
```
|
||||
|
||||
## Основные компоненты
|
||||
|
||||
### Gitea Server
|
||||
- **Назначение**: Web-интерфейс для управления Git-репозиториями
|
||||
- **Домен**: `git.aepif.ru`
|
||||
- **Технология**: Gitea (Go-based Git service)
|
||||
- **Особенности**:
|
||||
- Web-интерфейс для просмотра кода
|
||||
- Issue tracking
|
||||
- Pull/Merge requests
|
||||
- Webhook notifications
|
||||
- User management
|
||||
|
||||
### PostgreSQL Database
|
||||
- **Назначение**: Хранение метаданных Gitea
|
||||
- **Технология**: PostgreSQL 14
|
||||
- **Данные**:
|
||||
- Информация о пользователях
|
||||
- Метаданные репозиториев
|
||||
- Issues и комментарии
|
||||
- Настройки системы
|
||||
|
||||
### SSH Access
|
||||
- **Порт**: 2222 (внешний доступ)
|
||||
- **Назначение**: Git operations через SSH
|
||||
- **Особенности**: Отдельный порт для избежания конфликтов
|
||||
|
||||
## Конфигурация
|
||||
|
||||
### Docker Compose
|
||||
```yaml
|
||||
services:
|
||||
gitea:
|
||||
image: gitea/gitea:latest
|
||||
environment:
|
||||
- GITEA__database__DB_TYPE=postgres
|
||||
- GITEA__database__HOST=db:5432
|
||||
- GITEA__server__SSH_DOMAIN=git.aepif.ru
|
||||
- GITEA__server__SSH_PORT=2222
|
||||
networks:
|
||||
- proxy # Подключение к Traefik
|
||||
- default
|
||||
```
|
||||
|
||||
### Traefik Labels
|
||||
- **HTTP routing**: `git.aepif.ru` → port 3000
|
||||
- **TCP routing**: SSH на порту 2222
|
||||
- **SSL**: Автоматические сертификаты
|
||||
|
||||
## Репозитории
|
||||
|
||||
### Активные репозитории
|
||||
- **second-mind-aep**: Заметки для Second Mind
|
||||
- **configs**: Конфигурационные файлы сервера
|
||||
- **scripts**: Вспомогательные скрипты
|
||||
|
||||
### Структура URL
|
||||
- **HTTP Clone**: `https://git.aepif.ru/username/repo.git`
|
||||
- **SSH Clone**: `git@git.aepif.ru:username/repo.git`
|
||||
- **Internal URL**: `http://gitea:3000/username/repo.git`
|
||||
|
||||
## Интеграции
|
||||
|
||||
### Webhook Integration
|
||||
- **Second Mind**: автоматическая пересборка при push
|
||||
- **CI/CD**: потенциальная интеграция с системами автоматизации
|
||||
- **Notifications**: уведомления в внешние системы
|
||||
|
||||
### Authentication
|
||||
- **Bypass Authelia**: Собственная система аутентификации Gitea
|
||||
- **Local Users**: Управление пользователями внутри Gitea
|
||||
- **SSH Keys**: Управление SSH ключами для каждого пользователя
|
||||
|
||||
## Домены и доступ
|
||||
|
||||
| Протокол | Endpoint | Описание | Порт |
|
||||
|----------|----------|----------|------|
|
||||
| HTTPS | `git.aepif.ru` | Web-интерфейс Gitea | 443 |
|
||||
| SSH | `git.aepif.ru:2222` | Git SSH operations | 2222 |
|
||||
| HTTP | `gitea:3000` | Internal container access | 3000 |
|
||||
|
||||
## Workflow использования
|
||||
|
||||
### Веб-интерфейс
|
||||
1. **Доступ** через `git.aepif.ru`
|
||||
2. **Аутентификация** с помощью логина/пароля Gitea
|
||||
3. **Управление** репозиториями через Web UI
|
||||
4. **Настройка** webhooks для автоматизации
|
||||
|
||||
### Git Operations
|
||||
```bash
|
||||
# SSH клонирование
|
||||
git clone git@git.aepif.ru:2222/username/repo.git
|
||||
|
||||
# HTTPS клонирование
|
||||
git clone https://git.aepif.ru/username/repo.git
|
||||
|
||||
# Push изменений
|
||||
git push origin main
|
||||
```
|
||||
|
||||
## Структура файлов
|
||||
|
||||
```
|
||||
/DOCKER/git/
|
||||
├── docker-compose.yml # Конфигурация Gitea + PostgreSQL
|
||||
└── volumes/
|
||||
├── gitea_data/ # Данные Gitea (repos, config)
|
||||
└── postgres_data/ # База данных PostgreSQL
|
||||
```
|
||||
|
||||
## Безопасность
|
||||
|
||||
### Уровни защиты
|
||||
- **SSL/TLS**: Все HTTPS соединения зашифрованы
|
||||
- **SSH Keys**: Аутентификация по ключам для Git operations
|
||||
- **User Management**: Контроль доступа на уровне пользователей
|
||||
- **Repository Permissions**: Детальные права доступа к репозиториям
|
||||
|
||||
### Backup Strategy
|
||||
- **Database**: Регулярные дампы PostgreSQL
|
||||
- **Repositories**: Backup директории `gitea_data`
|
||||
- **External Mirrors**: Синхронизация с внешними Git-сервисами
|
||||
|
||||
## Мониторинг
|
||||
|
||||
### Доступные метрики
|
||||
- **Repository Usage**: Размер и активность репозиториев
|
||||
- **User Activity**: Статистика commits, pushes, pulls
|
||||
- **System Health**: Состояние базы данных и сервиса
|
||||
|
||||
### Health Checks
|
||||
```bash
|
||||
# Проверка веб-интерфейса
|
||||
curl -I https://git.aepif.ru
|
||||
|
||||
# Проверка SSH доступа
|
||||
ssh -T git@git.aepif.ru -p 2222
|
||||
|
||||
# Проверка контейнеров
|
||||
docker ps | grep gitea
|
||||
```
|
||||
|
||||
## Администрирование
|
||||
|
||||
### Создание пользователей
|
||||
1. Доступ к админ-панели Gitea
|
||||
2. User Management → Create User
|
||||
3. Настройка прав доступа
|
||||
|
||||
### Настройка репозиториев
|
||||
1. Создание репозитория через Web UI
|
||||
2. Настройка webhooks для интеграций
|
||||
3. Управление коллаборацией
|
||||
|
||||
### Обновления
|
||||
```bash
|
||||
# Обновление образа
|
||||
docker-compose pull
|
||||
docker-compose up -d
|
||||
|
||||
# Проверка версии
|
||||
docker exec gitea gitea --version
|
||||
```
|
||||
|
||||
## Связанные сервисы
|
||||
|
||||
- **[[Мой сервер/Second Mind Setup/Обзор системы|Second Mind]]** - использует Git Service для хранения заметок
|
||||
- **[[Мой сервер/Инфраструктура/Обзор системы|Traefik]]** - обеспечивает маршрутизацию и SSL
|
||||
- **Potential CI/CD** - будущие интеграции с системами автоматизации
|
||||
|
||||
## Связанные документы
|
||||
|
||||
- **[[Git Service - Конфигурации]]** - детальные настройки
|
||||
- **[[Git Service - Развертывание]]** - пошаговая установка
|
||||
- **[[Git Service - Администрирование]]** - управление и обслуживание
|
||||
46
Мой сервер/Git Service/Развертывание.md
Normal file
46
Мой сервер/Git Service/Развертывание.md
Normal file
@@ -0,0 +1,46 @@
|
||||
# Git Service - Развертывание
|
||||
|
||||
## Пошаговая установка
|
||||
|
||||
Этот документ содержит инструкции по развертыванию Git Service с нуля.
|
||||
|
||||
## Предварительные требования
|
||||
|
||||
### Системные требования
|
||||
*Минимальные требования к серверу*
|
||||
|
||||
### Зависимости
|
||||
*Необходимое ПО и сервисы*
|
||||
|
||||
## Установка
|
||||
|
||||
### Шаг 1: Подготовка среды
|
||||
*Подготовка окружения для развертывания*
|
||||
|
||||
### Шаг 2: Конфигурация
|
||||
*Настройка файлов конфигурации*
|
||||
|
||||
### Шаг 3: Развертывание контейнеров
|
||||
*Запуск Docker Compose*
|
||||
|
||||
### Шаг 4: Первоначальная настройка
|
||||
*Настройка Gitea через веб-интерфейс*
|
||||
|
||||
## Интеграция с инфраструктурой
|
||||
|
||||
### Подключение к Traefik
|
||||
*Настройка reverse proxy*
|
||||
|
||||
### Настройка SSL
|
||||
*Конфигурация сертификатов*
|
||||
|
||||
## Тестирование
|
||||
|
||||
### Проверка доступности
|
||||
*Тесты работоспособности сервиса*
|
||||
|
||||
### Создание тестового репозитория
|
||||
*Валидация функциональности*
|
||||
|
||||
---
|
||||
*Эта страница находится в разработке*
|
||||
@@ -6,23 +6,31 @@ Second Mind - система автоматической публикации
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
A[Gitea Repository] --> B[Webhook Service]
|
||||
A[External Gitea Repository] --> B[Webhook Service]
|
||||
B --> C[Quartz Builder]
|
||||
C --> D[Static Files]
|
||||
D --> E[Nginx Server]
|
||||
F[PostgreSQL] --> A
|
||||
G[Traefik Proxy] --> A
|
||||
G --> E
|
||||
G --> B
|
||||
F[Traefik Proxy] --> E
|
||||
F --> B
|
||||
|
||||
subgraph "Second Mind Container"
|
||||
B
|
||||
C
|
||||
end
|
||||
|
||||
subgraph "External Services"
|
||||
A
|
||||
F
|
||||
end
|
||||
```
|
||||
|
||||
## Основные компоненты
|
||||
|
||||
### Git-сервер (Gitea)
|
||||
### External Git-сервер (Gitea)
|
||||
- **Назначение**: Хранение и версионирование заметок
|
||||
- **Домен**: `git.aepif.ru`
|
||||
- **База данных**: PostgreSQL
|
||||
- **Особенности**: SSH доступ на порту 2222, webhook'и при push
|
||||
- **Домен**: `git.aepif.ru`
|
||||
- **Особенности**: Отдельный сервис, SSH доступ на порту 2222, webhook'и при push
|
||||
- **Репозиторий**: `http://gitea:3000/admin/second-mind-aep.git`
|
||||
|
||||
### Webhook Service
|
||||
- **Назначение**: Автоматическая пересборка при изменениях
|
||||
@@ -69,17 +77,18 @@ graph TB
|
||||
|
||||
```
|
||||
/DOCKER/second-mind/
|
||||
├── docker-compose.yml # Основная конфигурация
|
||||
├── Dockerfile # Образ для webhook сервиса
|
||||
├── .env # Переменные окружения
|
||||
├── nginx.conf # Конфигурация Nginx
|
||||
├── docker-compose.yml # Основная конфигурация (только Nginx + Webhook)
|
||||
├── Dockerfile # Кастомный образ для webhook сервиса
|
||||
├── nginx.conf # Конфигурация Nginx для статических файлов
|
||||
├── webhook-server/ # Код webhook сервиса
|
||||
│ ├── server.js
|
||||
│ └── package.json
|
||||
├── obsidian_repo/ # Локальная копия репозитория
|
||||
└── quartz_build/ # Собранный статический сайт
|
||||
│ ├── server.js # Node.js сервер для обработки webhooks
|
||||
│ └── package.json # Зависимости Node.js
|
||||
├── obsidian_repo/ # Локальная копия Git-репозитория
|
||||
└── quartz_build/ # Собранные статические файлы для Nginx
|
||||
```
|
||||
|
||||
**Примечание**: Gitea и PostgreSQL развернуты отдельно в `/DOCKER/git/`
|
||||
|
||||
## Преимущества решения
|
||||
|
||||
- **Автоматизация**: Публикация происходит автоматически при push
|
||||
|
||||
29
Мой сервер/Traefik Reverse Proxy/Администрирование.md
Normal file
29
Мой сервер/Traefik Reverse Proxy/Администрирование.md
Normal file
@@ -0,0 +1,29 @@
|
||||
# Traefik Reverse Proxy - Администрирование
|
||||
|
||||
## Ежедневное администрирование Traefik
|
||||
|
||||
*Документация будет дополнена процедурами администрирования*
|
||||
|
||||
## Мониторинг Dashboard
|
||||
*Работа с веб-интерфейсом Traefik*
|
||||
|
||||
## Управление SSL сертификатами
|
||||
*Мониторинг и обновление сертификатов*
|
||||
|
||||
## Анализ логов
|
||||
*Работа с логами доступа и ошибок*
|
||||
|
||||
## Добавление новых сервисов
|
||||
*Процедура подключения новых сервисов*
|
||||
|
||||
## Troubleshooting
|
||||
*Решение типовых проблем*
|
||||
|
||||
## Обновления
|
||||
*Процедуры обновления Traefik*
|
||||
|
||||
## Backup и восстановление
|
||||
*Резервное копирование конфигурации*
|
||||
|
||||
---
|
||||
*Эта страница находится в разработке*
|
||||
26
Мой сервер/Traefik Reverse Proxy/Конфигурации.md
Normal file
26
Мой сервер/Traefik Reverse Proxy/Конфигурации.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# Traefik Reverse Proxy - Конфигурации
|
||||
|
||||
## Детальные настройки конфигурации Traefik
|
||||
|
||||
*Документация будет дополнена деталями конфигурации*
|
||||
|
||||
## Docker Compose конфигурация
|
||||
*Разбор всех параметров docker-compose.yml*
|
||||
|
||||
## Command Line Arguments
|
||||
*Детальное описание всех флагов запуска*
|
||||
|
||||
## Static Configuration
|
||||
*Настройки, которые не изменяются во время выполнения*
|
||||
|
||||
## Dynamic Configuration
|
||||
*Конфигурация через Docker labels*
|
||||
|
||||
## SSL/TLS Configuration
|
||||
*Настройки сертификатов и шифрования*
|
||||
|
||||
## Middleware Configuration
|
||||
*Конфигурация middleware для различных задач*
|
||||
|
||||
---
|
||||
*Эта страница находится в разработке*
|
||||
239
Мой сервер/Traefik Reverse Proxy/Обзор системы.md
Normal file
239
Мой сервер/Traefik Reverse Proxy/Обзор системы.md
Normal file
@@ -0,0 +1,239 @@
|
||||
## Описание
|
||||
|
||||
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 - Администрирование]]** - обслуживание и мониторинг
|
||||
26
Мой сервер/Traefik Reverse Proxy/Развертывание.md
Normal file
26
Мой сервер/Traefik Reverse Proxy/Развертывание.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# Traefik Reverse Proxy - Развертывание
|
||||
|
||||
## Пошаговая установка Traefik
|
||||
|
||||
*Документация будет дополнена инструкциями по развертыванию*
|
||||
|
||||
## Предварительные требования
|
||||
*Системные требования и зависимости*
|
||||
|
||||
## Создание сети proxy
|
||||
*Настройка Docker network*
|
||||
|
||||
## Конфигурация Docker Compose
|
||||
*Подготовка файлов конфигурации*
|
||||
|
||||
## Первый запуск
|
||||
*Процедура начального запуска*
|
||||
|
||||
## Настройка DNS
|
||||
*Настройка доменных записей*
|
||||
|
||||
## Тестирование
|
||||
*Проверка работоспособности*
|
||||
|
||||
---
|
||||
*Эта страница находится в разработке*
|
||||
85
Мой сервер/index.md
Normal file
85
Мой сервер/index.md
Normal file
@@ -0,0 +1,85 @@
|
||||
# Документация сервера aepif.ru
|
||||
|
||||
Техническая документация инфраструктуры и сервисов домена aepif.ru. Здесь собрана вся информация о развернутых системах.
|
||||
|
||||
## Обзор архитектуры
|
||||
|
||||
Система построена на микросервисной архитектуре с использованием Docker и состоит из следующих основных компонентов:
|
||||
|
||||
### Инфраструктурные сервисы
|
||||
- **[[Traefik Reverse Proxy/Обзор системы|Traefik Reverse Proxy]]** - централизованная маршрутизация и SSL
|
||||
- **[[Authelia Authentication/Обзор системы|Authelia Authentication]]** - единая система аутентификации и авторизации
|
||||
- **Redis** - хранение сессий и кэширование
|
||||
|
||||
### Основные приложения
|
||||
- **[[Second Mind Setup/Обзор системы|Second Mind]]** - система публикации заметок Obsidian через Quartz
|
||||
- **[[Git Service/Обзор системы|Git Service]]** - Git-сервер на базе Gitea для хранения кода и заметок
|
||||
|
||||
## Структура документации
|
||||
|
||||
### 🏗️ Общий обзор инфраструктуры
|
||||
- **[[Обзор инфраструктуры]]** - архитектура высокого уровня и принципы системы
|
||||
|
||||
### 📋 Инфраструктурные сервисы
|
||||
Базовые сервисы, обеспечивающие работу всей системы:
|
||||
|
||||
#### 🌐 Traefik Reverse Proxy
|
||||
- **[[Traefik Reverse Proxy/Обзор системы]]** - архитектура и функции
|
||||
- **[[Traefik Reverse Proxy/Конфигурации]]** - настройки маршрутизации и SSL
|
||||
- **[[Traefik Reverse Proxy/Развертывание]]** - установка reverse proxy
|
||||
- **[[Traefik Reverse Proxy/Администрирование]]** - управление трафиком
|
||||
|
||||
#### 🔐 Authelia Authentication
|
||||
- **[[Authelia Authentication/Обзор системы]]** - система аутентификации
|
||||
- **[[Authelia Authentication/Конфигурации]]** - настройки доступа и пользователей
|
||||
- **[[Authelia Authentication/Развертывание]]** - установка системы авторизации
|
||||
- **[[Authelia Authentication/Администрирование]]** - управление пользователями
|
||||
|
||||
### 📝 Second Mind Setup
|
||||
Система автоматической публикации заметок:
|
||||
- **[[Second Mind Setup/Обзор системы]]** - концепция и архитектура
|
||||
- **[[Second Mind Setup/Конфигурации]]** - настройки компонентов
|
||||
- **[[Second Mind Setup/Развертывание]]** - пошаговая установка
|
||||
- **[[Second Mind Setup/Администрирование]]** - управление и поддержка
|
||||
|
||||
### 🗂️ Git Service
|
||||
Централизованное хранение кода и версионирование:
|
||||
- **[[Git Service/Обзор системы]]** - архитектура Git-сервера
|
||||
- **[[Git Service/Конфигурации]]** - настройки Gitea и PostgreSQL
|
||||
- **[[Git Service/Развертывание]]** - установка и первоначальная настройка
|
||||
- **[[Git Service/Администрирование]]** - управление пользователями и репозиториями
|
||||
|
||||
## Домены и сервисы
|
||||
|
||||
| Домен | Сервис | Описание | Статус |
|
||||
|-------|--------|----------|--------|
|
||||
| `notes.aepif.ru` | Second Mind | Опубликованные заметки | 🟢 Активен |
|
||||
| `git.aepif.ru` | Gitea | Git-сервер | 🟢 Активен |
|
||||
| `auth.aepif.ru` | Authelia | Система входа | 🟢 Активен |
|
||||
| `traefik.aepif.ru` | Traefik Dashboard | Мониторинг прокси | 🟢 Активен |
|
||||
| `webhook.aepif.ru` | Webhook Service | API автоматизации | 🟢 Активен |
|
||||
|
||||
## Быстрый старт
|
||||
|
||||
1. **Развертывание Traefik**: [[Traefik Reverse Proxy/Развертывание]]
|
||||
2. **Настройка аутентификации**: [[Authelia Authentication/Развертывание]]
|
||||
3. **Установка Git Service**: [[Git Service/Развертывание]]
|
||||
4. **Установка Second Mind**: [[Second Mind Setup/Развертывание]]
|
||||
5. **Первая публикация**: [[Second Mind Setup/Администрирование]]
|
||||
|
||||
## Мониторинг и безопасность
|
||||
|
||||
- Все сервисы защищены SSL сертификатами от Let's Encrypt
|
||||
- Централизованная аутентификация через Authelia
|
||||
- Мониторинг доступен через Traefik Dashboard
|
||||
- Логи сервисов доступны через `docker logs`
|
||||
|
||||
## Полезные ссылки
|
||||
|
||||
- [Опубликованная версия заметок](https://notes.aepif.ru) 🔒
|
||||
- [Git-репозиторий](https://git.aepif.ru) 🔒
|
||||
- [Административная панель](https://traefik.aepif.ru) 🔒
|
||||
|
||||
---
|
||||
|
||||
*Документация обновлена: {{ date | date('YYYY-MM-DD') }}*
|
||||
@@ -1,506 +0,0 @@
|
||||
## Мониторинг системы
|
||||
|
||||
### Проверка статуса всех сервисов
|
||||
|
||||
```bash
|
||||
# Статус инфраструктурных сервисов
|
||||
cd /DOCKER/reverse-proxy && docker-compose ps
|
||||
cd /DOCKER/auth && docker-compose ps
|
||||
|
||||
# Общий статус системы
|
||||
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
|
||||
|
||||
# Использование ресурсов
|
||||
docker stats --no-stream traefik authelia auth_redis
|
||||
```
|
||||
|
||||
### Мониторинг Traefik
|
||||
|
||||
#### Dashboard и метрики
|
||||
|
||||
```bash
|
||||
# Проверка Traefik dashboard
|
||||
curl -I https://traefik.aepif.ru/dashboard/
|
||||
|
||||
# Просмотр конфигурации маршрутов
|
||||
curl https://traefik.aepif.ru/api/http/routers | jq
|
||||
|
||||
# Проверка SSL сертификатов
|
||||
curl https://traefik.aepif.ru/api/http/routers | jq '.[] | select(.tls) | {name, rule, tls}'
|
||||
|
||||
# Статистика сервисов
|
||||
curl https://traefik.aepif.ru/api/http/services | jq
|
||||
```
|
||||
|
||||
#### Логи Traefik
|
||||
|
||||
```bash
|
||||
# Просмотр логов в реальном времени
|
||||
cd /DOCKER/reverse-proxy
|
||||
docker-compose logs -f traefik
|
||||
|
||||
# Поиск ошибок SSL
|
||||
docker-compose logs traefik | grep -i "acme\|ssl\|tls"
|
||||
|
||||
# Анализ трафика
|
||||
docker-compose logs traefik | grep -E "GET|POST" | tail -20
|
||||
```
|
||||
|
||||
### Мониторинг Authelia
|
||||
|
||||
#### Проверка аутентификации
|
||||
|
||||
```bash
|
||||
# Health check Authelia
|
||||
curl https://auth.aepif.ru/api/health
|
||||
|
||||
# Проверка конфигурации
|
||||
cd /DOCKER/auth
|
||||
docker exec authelia authelia validate-config /config/configuration.yml
|
||||
|
||||
# Статистика пользователей
|
||||
docker exec authelia sqlite3 /config/db.sqlite3 "SELECT * FROM user_preferences;"
|
||||
```
|
||||
|
||||
#### Анализ логов аутентификации
|
||||
|
||||
```bash
|
||||
# Логи Authelia
|
||||
cd /DOCKER/auth
|
||||
docker-compose logs -f authelia
|
||||
|
||||
# Поиск неуспешных попыток входа
|
||||
docker-compose logs authelia | grep -i "authentication\|failed\|banned"
|
||||
|
||||
# Статистика входов по пользователям
|
||||
docker-compose logs authelia | grep "Successful" | cut -d' ' -f8 | sort | uniq -c
|
||||
```
|
||||
|
||||
### Мониторинг Redis
|
||||
|
||||
```bash
|
||||
# Статус Redis
|
||||
cd /DOCKER/auth
|
||||
docker exec -it auth_redis redis-cli -a "$REDIS_PASSWORD" info
|
||||
|
||||
# Количество активных сессий
|
||||
docker exec -it auth_redis redis-cli -a "$REDIS_PASSWORD" info keyspace
|
||||
|
||||
# Список ключей сессий
|
||||
docker exec -it auth_redis redis-cli -a "$REDIS_PASSWORD" keys "authelia*"
|
||||
|
||||
# Время жизни сессий
|
||||
docker exec -it auth_redis redis-cli -a "$REDIS_PASSWORD" keys "*" | head -5 | xargs -I {} docker exec -it auth_redis redis-cli -a "$REDIS_PASSWORD" ttl {}
|
||||
```
|
||||
|
||||
## Обслуживание SSL сертификатов
|
||||
|
||||
### Проверка статуса сертификатов
|
||||
|
||||
```bash
|
||||
# Просмотр всех сертификатов
|
||||
cd /DOCKER/reverse-proxy
|
||||
docker exec traefik cat /data/acme.json | jq '.letsencrypt.Certificates[] | {domains: .domain.main, expires: .certificate}' 2>/dev/null || echo "Нет сертификатов"
|
||||
|
||||
# Проверка срока действия сертификата
|
||||
echo | openssl s_client -connect aepif.ru:443 2>/dev/null | openssl x509 -noout -dates
|
||||
|
||||
# Проверка для всех доменов
|
||||
for domain in traefik.aepif.ru auth.aepif.ru notes.aepif.ru git.aepif.ru webhook.aepif.ru; do
|
||||
echo "=== $domain ==="
|
||||
echo | openssl s_client -connect $domain:443 -servername $domain 2>/dev/null | openssl x509 -noout -subject -dates
|
||||
echo
|
||||
done
|
||||
```
|
||||
|
||||
### Принудительное обновление сертификатов
|
||||
|
||||
```bash
|
||||
# Удаление старых сертификатов (ОСТОРОЖНО!)
|
||||
cd /DOCKER/reverse-proxy
|
||||
docker-compose stop traefik
|
||||
docker volume rm reverse-proxy_traefik_data
|
||||
docker volume create traefik_data
|
||||
docker-compose up -d traefik
|
||||
|
||||
# Проверка получения новых сертификатов
|
||||
docker-compose logs -f traefik | grep -i acme
|
||||
```
|
||||
|
||||
## Управление пользователями
|
||||
|
||||
### Добавление нового пользователя
|
||||
|
||||
```bash
|
||||
# Генерация хеша пароля
|
||||
NEW_PASSWORD="secure-password-123"
|
||||
PASSWORD_HASH=$(docker run --rm authelia/authelia:latest authelia hash-password "$NEW_PASSWORD")
|
||||
|
||||
# Редактирование базы пользователей
|
||||
cd /DOCKER/auth
|
||||
cp authelia/users_database.yml authelia/users_database.yml.backup
|
||||
|
||||
cat >> authelia/users_database.yml << EOF
|
||||
|
||||
newuser:
|
||||
displayname: "New User"
|
||||
password: "$PASSWORD_HASH"
|
||||
email: newuser@aepif.ru
|
||||
groups:
|
||||
- users
|
||||
EOF
|
||||
|
||||
# Применение изменений
|
||||
docker-compose restart authelia
|
||||
|
||||
# Проверка
|
||||
docker-compose logs authelia | grep -i "user\|config"
|
||||
```
|
||||
|
||||
### Смена пароля пользователя
|
||||
|
||||
```bash
|
||||
# Генерация нового хеша
|
||||
NEW_PASSWORD="new-secure-password"
|
||||
PASSWORD_HASH=$(docker run --rm authelia/authelia:latest authelia hash-password "$NEW_PASSWORD")
|
||||
|
||||
# Редактирование файла пользователей
|
||||
cd /DOCKER/auth
|
||||
nano authelia/users_database.yml
|
||||
|
||||
# Замените строку password для нужного пользователя
|
||||
# Перезапуск Authelia
|
||||
docker-compose restart authelia
|
||||
```
|
||||
|
||||
### Удаление пользователя
|
||||
|
||||
```bash
|
||||
# Создание резервной копии
|
||||
cd /DOCKER/auth
|
||||
cp authelia/users_database.yml authelia/users_database.yml.backup
|
||||
|
||||
# Редактирование (удалить секцию пользователя)
|
||||
nano authelia/users_database.yml
|
||||
|
||||
# Очистка сессий пользователя из Redis
|
||||
docker exec -it auth_redis redis-cli -a "$REDIS_PASSWORD" keys "*username*" | xargs docker exec -it auth_redis redis-cli -a "$REDIS_PASSWORD" del
|
||||
|
||||
# Перезапуск
|
||||
docker-compose restart authelia
|
||||
```
|
||||
|
||||
## Управление политиками доступа
|
||||
|
||||
### Добавление нового защищенного сервиса
|
||||
|
||||
```bash
|
||||
# Редактирование конфигурации Authelia
|
||||
cd /DOCKER/auth
|
||||
nano authelia/configuration.yml
|
||||
|
||||
# Добавить новое правило в секцию access_control.rules:
|
||||
# - domain: newservice.aepif.ru
|
||||
# policy: one_factor
|
||||
|
||||
# Применение изменений
|
||||
docker-compose restart authelia
|
||||
```
|
||||
|
||||
### Изменение политик безопасности
|
||||
|
||||
```bash
|
||||
# Для более строгой безопасности (требует 2FA)
|
||||
cd /DOCKER/auth
|
||||
nano authelia/configuration.yml
|
||||
|
||||
# Изменить policy с one_factor на two_factor для нужных доменов
|
||||
# - domain: notes.aepif.ru
|
||||
# policy: two_factor
|
||||
|
||||
# Перезапуск
|
||||
docker-compose restart authelia
|
||||
```
|
||||
|
||||
## Обновления
|
||||
|
||||
### Обновление Traefik
|
||||
|
||||
```bash
|
||||
cd /DOCKER/reverse-proxy
|
||||
|
||||
# Проверка текущей версии
|
||||
docker exec traefik traefik version
|
||||
|
||||
# Получение новой версии
|
||||
docker-compose pull traefik
|
||||
|
||||
# Обновление с сохранением конфигурации
|
||||
docker-compose up -d traefik
|
||||
|
||||
# Проверка логов
|
||||
docker-compose logs -f traefik
|
||||
```
|
||||
|
||||
### Обновление Authelia
|
||||
|
||||
```bash
|
||||
cd /DOCKER/auth
|
||||
|
||||
# Создание резервной копии конфигурации
|
||||
tar czf authelia_backup_$(date +%Y%m%d).tar.gz authelia/
|
||||
|
||||
# Проверка текущей версии
|
||||
docker exec authelia authelia --version
|
||||
|
||||
# Получение новой версии
|
||||
docker-compose pull authelia
|
||||
|
||||
# Обновление
|
||||
docker-compose up -d authelia
|
||||
|
||||
# Проверка совместимости конфигурации
|
||||
docker exec authelia authelia validate-config /config/configuration.yml
|
||||
```
|
||||
|
||||
### Обновление Redis
|
||||
|
||||
```bash
|
||||
cd /DOCKER/auth
|
||||
|
||||
# Создание дампа данных
|
||||
docker exec auth_redis redis-cli -a "$REDIS_PASSWORD" save
|
||||
|
||||
# Обновление образа
|
||||
docker-compose pull redis
|
||||
docker-compose up -d redis
|
||||
|
||||
# Проверка работоспособности
|
||||
docker exec -it auth_redis redis-cli -a "$REDIS_PASSWORD" ping
|
||||
```
|
||||
|
||||
## Резервное копирование
|
||||
|
||||
### Автоматический backup скрипт
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# /opt/scripts/infrastructure_backup.sh
|
||||
|
||||
BACKUP_DIR="/opt/backups/infrastructure"
|
||||
DATE=$(date +%Y%m%d_%H%M%S)
|
||||
|
||||
mkdir -p $BACKUP_DIR
|
||||
|
||||
echo "Starting infrastructure backup - $DATE"
|
||||
|
||||
# Backup Traefik data (SSL сертификаты)
|
||||
echo "Backing up Traefik data..."
|
||||
docker run --rm -v reverse-proxy_traefik_data:/data -v $BACKUP_DIR:/backup alpine \
|
||||
tar czf /backup/traefik_data_$DATE.tar.gz -C /data .
|
||||
|
||||
# Backup Authelia configuration
|
||||
echo "Backing up Authelia config..."
|
||||
tar czf $BACKUP_DIR/authelia_config_$DATE.tar.gz -C /DOCKER/auth authelia/
|
||||
|
||||
# Backup Redis data
|
||||
echo "Backing up Redis data..."
|
||||
docker exec auth_redis redis-cli -a "$REDIS_PASSWORD" save
|
||||
docker run --rm -v auth_redis_data:/data -v $BACKUP_DIR:/backup alpine \
|
||||
tar czf /backup/redis_data_$DATE.tar.gz -C /data .
|
||||
|
||||
# Backup environment files
|
||||
echo "Backing up environment files..."
|
||||
tar czf $BACKUP_DIR/env_files_$DATE.tar.gz \
|
||||
/DOCKER/reverse-proxy/.env \
|
||||
/DOCKER/auth/.env \
|
||||
/DOCKER/reverse-proxy/docker-compose.yml \
|
||||
/DOCKER/auth/docker-compose.yml
|
||||
|
||||
# Cleanup old backups (keep 7 days)
|
||||
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete
|
||||
|
||||
echo "Infrastructure backup completed - $DATE"
|
||||
```
|
||||
|
||||
### Настройка автоматического backup
|
||||
|
||||
```bash
|
||||
# Создание скрипта
|
||||
sudo mkdir -p /opt/scripts
|
||||
sudo nano /opt/scripts/infrastructure_backup.sh
|
||||
sudo chmod +x /opt/scripts/infrastructure_backup.sh
|
||||
|
||||
# Создание директории для бэкапов
|
||||
sudo mkdir -p /opt/backups/infrastructure
|
||||
|
||||
# Добавление в crontab (ежедневно в 2:00)
|
||||
echo "0 2 * * * /opt/scripts/infrastructure_backup.sh >> /var/log/infrastructure_backup.log 2>&1" | sudo crontab -
|
||||
```
|
||||
|
||||
### Восстановление из backup
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# Восстановление инфраструктуры из backup
|
||||
|
||||
BACKUP_DATE="20250804_020000" # Измените на нужную дату
|
||||
BACKUP_DIR="/opt/backups/infrastructure"
|
||||
|
||||
# Остановка сервисов
|
||||
cd /DOCKER/reverse-proxy && docker-compose down
|
||||
cd /DOCKER/auth && docker-compose down
|
||||
|
||||
# Восстановление Traefik data
|
||||
docker volume rm reverse-proxy_traefik_data
|
||||
docker volume create reverse-proxy_traefik_data
|
||||
docker run --rm -v reverse-proxy_traefik_data:/data -v $BACKUP_DIR:/backup alpine \
|
||||
tar xzf /backup/traefik_data_$BACKUP_DATE.tar.gz -C /data
|
||||
|
||||
# Восстановление Authelia config
|
||||
rm -rf /DOCKER/auth/authelia
|
||||
tar xzf $BACKUP_DIR/authelia_config_$BACKUP_DATE.tar.gz -C /DOCKER/auth/
|
||||
|
||||
# Восстановление Redis data
|
||||
docker volume rm auth_redis_data
|
||||
docker volume create auth_redis_data
|
||||
docker run --rm -v auth_redis_data:/data -v $BACKUP_DIR:/backup alpine \
|
||||
tar xzf /backup/redis_data_$BACKUP_DATE.tar.gz -C /data
|
||||
|
||||
# Восстановление env файлов
|
||||
tar xzf $BACKUP_DIR/env_files_$BACKUP_DATE.tar.gz -C /
|
||||
|
||||
# Запуск сервисов
|
||||
cd /DOCKER/reverse-proxy && docker-compose up -d
|
||||
cd /DOCKER/auth && docker-compose up -d
|
||||
|
||||
echo "Восстановление завершено"
|
||||
```
|
||||
|
||||
## Диагностика проблем
|
||||
|
||||
### Проблемы с маршрутизацией
|
||||
|
||||
```bash
|
||||
# Проверка правил маршрутизации в Traefik
|
||||
curl https://traefik.aepif.ru/api/http/routers | jq '.[] | {name, rule, service}'
|
||||
|
||||
# Проверка состояния сервисов
|
||||
curl https://traefik.aepif.ru/api/http/services | jq '.[] | {name, status}'
|
||||
|
||||
# Тест конкретного маршрута
|
||||
curl -H "Host: notes.aepif.ru" http://localhost/
|
||||
```
|
||||
|
||||
### Проблемы с аутентификацией
|
||||
|
||||
```bash
|
||||
# Проверка Forward Auth middleware
|
||||
curl -v https://notes.aepif.ru/
|
||||
|
||||
# Проверка сессий в Redis
|
||||
docker exec -it auth_redis redis-cli -a "$REDIS_PASSWORD" keys "*"
|
||||
|
||||
# Тест API Authelia
|
||||
curl -v https://auth.aepif.ru/api/verify
|
||||
|
||||
# Сброс заблокированного пользователя
|
||||
docker exec -it auth_redis redis-cli -a "$REDIS_PASSWORD" keys "*banned*" | xargs docker exec -it auth_redis redis-cli -a "$REDIS_PASSWORD" del
|
||||
```
|
||||
|
||||
### Проблемы с SSL
|
||||
|
||||
```bash
|
||||
# Проверка ACME логов
|
||||
docker logs traefik 2>&1 | grep -i acme
|
||||
|
||||
# Тест получения сертификата вручную
|
||||
docker exec traefik sh -c "curl -I http://test.aepif.ru/.well-known/acme-challenge/test"
|
||||
|
||||
# Проверка файла acme.json
|
||||
docker exec traefik ls -la /data/
|
||||
docker exec traefik cat /data/acme.json | jq '.letsencrypt.Certificates | length'
|
||||
```
|
||||
|
||||
## Мониторинг производительности
|
||||
|
||||
### Настройка метрик
|
||||
|
||||
```bash
|
||||
# Добавление Prometheus метрик в Traefik
|
||||
cd /DOCKER/reverse-proxy
|
||||
nano docker-compose.yml
|
||||
|
||||
# Добавить в command секцию:
|
||||
# - --metrics.prometheus=true
|
||||
# - --metrics.prometheus.addEntryPointsLabels=true
|
||||
# - --metrics.prometheus.addServicesLabels=true
|
||||
|
||||
docker-compose up -d traefik
|
||||
```
|
||||
|
||||
### Анализ производительности
|
||||
|
||||
```bash
|
||||
# Статистика запросов к Traefik
|
||||
curl https://traefik.aepif.ru/metrics
|
||||
|
||||
# Анализ времени ответа
|
||||
curl -w "@curl-format.txt" -o /dev/null -s https://notes.aepif.ru/
|
||||
|
||||
# Создание файла curl-format.txt:
|
||||
cat > curl-format.txt << 'EOF'
|
||||
time_namelookup: %{time_namelookup}s\n
|
||||
time_connect: %{time_connect}s\n
|
||||
time_appconnect: %{time_appconnect}s\n
|
||||
time_pretransfer: %{time_pretransfer}s\n
|
||||
time_redirect: %{time_redirect}s\n
|
||||
time_starttransfer: %{time_starttransfer}s\n
|
||||
----------\n
|
||||
time_total: %{time_total}s\n
|
||||
EOF
|
||||
```
|
||||
|
||||
## Автоматизация обслуживания
|
||||
|
||||
### Скрипт проверки системы
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# /opt/scripts/infrastructure_health_check.sh
|
||||
|
||||
echo "=== Infrastructure Health Check $(date) ==="
|
||||
|
||||
# Проверка статуса контейнеров
|
||||
echo "Container Status:"
|
||||
docker ps --filter "name=traefik" --filter "name=authelia" --filter "name=auth_redis" --format "table {{.Names}}\t{{.Status}}"
|
||||
|
||||
# Проверка доступности сервисов
|
||||
echo -e "\nService Availability:"
|
||||
for service in traefik.aepif.ru auth.aepif.ru; do
|
||||
if curl -s -o /dev/null -w "%{http_code}" https://$service | grep -q "200\|302"; then
|
||||
echo "$service: OK"
|
||||
else
|
||||
echo "$service: FAILED"
|
||||
fi
|
||||
done
|
||||
|
||||
# Проверка SSL сертификатов (срок действия)
|
||||
echo -e "\nSSL Certificates:"
|
||||
for domain in traefik.aepif.ru auth.aepif.ru; do
|
||||
expiry=$(echo | openssl s_client -connect $domain:443 -servername $domain 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2)
|
||||
echo "$domain expires: $expiry"
|
||||
done
|
||||
|
||||
# Проверка использования диска
|
||||
echo -e "\nDisk Usage:"
|
||||
df -h /var/lib/docker | tail -1
|
||||
|
||||
echo -e "\n=== End Health Check ==="
|
||||
```
|
||||
|
||||
Система администрирования настроена! Теперь у вас есть полный контроль над инфраструктурой.
|
||||
|
||||
Связанные документы:
|
||||
- [[Инфраструктура - Обзор системы]]
|
||||
- [[Second Mind - Администрирование]]
|
||||
@@ -1,415 +0,0 @@
|
||||
## 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
|
||||
```
|
||||
|
||||
Следующий документ: [[Инфраструктура - Развертывание]]
|
||||
@@ -1,227 +0,0 @@
|
||||
## Описание
|
||||
|
||||
Инфраструктурные сервисы обеспечивают базовую функциональность для всех приложений в экосистеме 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 - Обзор системы]] - основное приложение на этой инфраструктуре
|
||||
@@ -1,148 +0,0 @@
|
||||
## Предварительные требования
|
||||
|
||||
### Системные требования
|
||||
- Ubuntu/Debian сервер с минимум 2GB RAM
|
||||
- Docker и Docker Compose установлены
|
||||
- Открыты порты: 80, 443, 2222, 8080
|
||||
- Настроены DNS записи для поддоменов
|
||||
|
||||
### Подготовка DNS
|
||||
|
||||
Создайте A-записи для всех поддоменов:
|
||||
```dns
|
||||
traefik.aepif.ru IN A YOUR_SERVER_IP
|
||||
auth.aepif.ru IN A YOUR_SERVER_IP
|
||||
notes.aepif.ru IN A YOUR_SERVER_IP
|
||||
git.aepif.ru IN A YOUR_SERVER_IP
|
||||
webhook.aepif.ru IN A YOUR_SERVER_IP
|
||||
```
|
||||
|
||||
## Порядок развертывания
|
||||
|
||||
⚠️ **Важно**: Инфраструктурные сервисы должны быть развернуты **первыми**, так как все остальные приложения зависят от них.
|
||||
|
||||
### Последовательность установки:
|
||||
1. **Traefik Reverse Proxy** (сначала)
|
||||
2. **Authelia Authentication** (после Traefik)
|
||||
3. **Second Mind** (после обеих частей инфраструктуры)
|
||||
|
||||
## 1. Развертывание Traefik
|
||||
|
||||
### Подготовка директорий
|
||||
|
||||
```bash
|
||||
# Создание директории проекта
|
||||
mkdir -p /DOCKER/reverse-proxy
|
||||
cd /DOCKER/reverse-proxy
|
||||
|
||||
# Создание volume для данных Traefik
|
||||
docker volume create traefik_data
|
||||
```
|
||||
|
||||
### Создание .env файла
|
||||
|
||||
```bash
|
||||
cat > .env << 'EOF'
|
||||
DOMAIN=aepif.ru
|
||||
ADMIN_EMAIL=epifantsev1aa@gmail.com
|
||||
EOF
|
||||
```
|
||||
|
||||
### Создание docker-compose.yml
|
||||
|
||||
```bash
|
||||
cat > docker-compose.yml << 'EOF'
|
||||
version: '3.8'
|
||||
services:
|
||||
traefik:
|
||||
image: traefik:v3.0
|
||||
container_name: traefik
|
||||
command:
|
||||
- --api.dashboard=true
|
||||
- --providers.docker=true
|
||||
- --providers.docker.exposedbydefault=false
|
||||
- --providers.docker.network=proxy
|
||||
- --entrypoints.web.address=:80
|
||||
- --entrypoints.websecure.address=:443
|
||||
- --entrypoints.ssh.address=:2222
|
||||
- --certificatesresolvers.letsencrypt.acme.email=epifantsev1aa@gmail.com
|
||||
- --certificatesresolvers.letsencrypt.acme.storage=/data/acme.json
|
||||
- --certificatesresolvers.letsencrypt.acme.tlschallenge=true
|
||||
- --providers.docker.exposedByDefault=false
|
||||
- --api.insecure=true
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
- "8080:8080"
|
||||
- "2222:2222"
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
- traefik_data:/data
|
||||
networks:
|
||||
- proxy
|
||||
labels:
|
||||
- traefik.enable=true
|
||||
- traefik.http.routers.traefik.rule=Host(`traefik.aepif.ru`)
|
||||
- traefik.http.routers.traefik.tls.certresolver=letsencrypt
|
||||
- traefik.http.routers.traefik.service=api@internal
|
||||
- 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
|
||||
EOF
|
||||
```
|
||||
|
||||
### Создание сети и запуск
|
||||
|
||||
```bash
|
||||
# Создание внешней сети proxy
|
||||
docker network create proxy
|
||||
|
||||
# Запуск Traefik
|
||||
docker-compose up -d
|
||||
|
||||
# Проверка статуса
|
||||
docker-compose ps
|
||||
docker-compose logs -f
|
||||
```
|
||||
|
||||
### Проверка работы Traefik
|
||||
|
||||
```bash
|
||||
# Проверка HTTP → HTTPS редиректа
|
||||
curl -I http://traefik.aepif.ru
|
||||
|
||||
# Проверка HTTPS
|
||||
curl -I https://traefik.aepif.ru
|
||||
|
||||
# Проверка dashboard (должен быть доступен)
|
||||
curl -I https://traefik.aepif.ru/dashboard/
|
||||
```
|
||||
|
||||
## 2. Развертывание Authelia
|
||||
|
||||
### Подготовка директорий
|
||||
|
||||
```bash
|
||||
# Создание директории проекта
|
||||
mkdir -p /DOCKER/auth/authelia
|
||||
cd /DOCKER/auth
|
||||
```
|
||||
|
||||
### Генерация секретов
|
||||
|
||||
```bash
|
||||
# Генерация всех необходимых секретов
|
||||
JWT_SECRET=$(openssl rand -base64 48)
|
||||
SESSION_SECRET=$(openssl rand -base64 48)
|
||||
STORAGE_KEY=$(openssl rand -base64 24)
|
||||
REDIS_PASSWORD=$(
|
||||
259
Мой сервер/Обзор инфраструктуры.md
Normal file
259
Мой сервер/Обзор инфраструктуры.md
Normal file
@@ -0,0 +1,259 @@
|
||||
# Обзор инфраструктуры aepif.ru
|
||||
|
||||
## Введение
|
||||
|
||||
Данный документ представляет общий обзор инфраструктуры домена aepif.ru и служит связующим звеном между отдельными компонентами системы.
|
||||
|
||||
← **[[index|Вернуться к документации сервера]]**
|
||||
|
||||
## Архитектура высокого уровня
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
A[Internet] --> B[Traefik Reverse Proxy]
|
||||
|
||||
B --> C[Authelia Authentication]
|
||||
B --> D[Second Mind - notes.aepif.ru]
|
||||
B --> E[Git Service - git.aepif.ru]
|
||||
B --> F[Webhook Service - webhook.aepif.ru]
|
||||
|
||||
C --> G[Redis Session Store]
|
||||
C --> H[User Database]
|
||||
|
||||
E --> I[PostgreSQL Database]
|
||||
E --> J[Git Repositories]
|
||||
|
||||
D --> K[Nginx Static Server]
|
||||
D --> L[Quartz Builder]
|
||||
|
||||
F --> L
|
||||
F --> J
|
||||
|
||||
subgraph "Infrastructure Layer"
|
||||
B
|
||||
C
|
||||
G
|
||||
end
|
||||
|
||||
subgraph "Application Layer"
|
||||
D
|
||||
E
|
||||
F
|
||||
end
|
||||
|
||||
subgraph "Data Layer"
|
||||
H
|
||||
I
|
||||
J
|
||||
K
|
||||
end
|
||||
```
|
||||
|
||||
## Принципы архитектуры
|
||||
|
||||
### Микросервисная архитектура
|
||||
- **Разделение ответственности**: Каждый сервис выполняет специфическую функцию
|
||||
- **Независимое развертывание**: Сервисы можно обновлять и масштабировать независимо
|
||||
- **Контейнеризация**: Все сервисы работают в Docker контейнерах
|
||||
- **Service Discovery**: Автоматическое обнаружение сервисов через Docker
|
||||
|
||||
### Централизованная инфраструктура
|
||||
- **Single Point of Entry**: Traefik как единая точка входа
|
||||
- **Unified Authentication**: Authelia для всех защищенных сервисов
|
||||
- **Automated SSL**: Let's Encrypt для всех доменов
|
||||
- **Shared Networks**: Общие Docker сети для взаимодействия
|
||||
|
||||
### DevOps практики
|
||||
- **Infrastructure as Code**: Конфигурация через docker-compose файлы
|
||||
- **Automated Deployment**: Git-based deployment для заметок
|
||||
- **Monitoring**: Централизованный мониторинг через Traefik Dashboard
|
||||
- **Security First**: Принцип минимальных привилегий и защита по умолчанию
|
||||
|
||||
## Компоненты системы
|
||||
|
||||
### Уровень инфраструктуры
|
||||
|
||||
#### Traefik Reverse Proxy
|
||||
- **Роль**: Центральный маршрутизатор трафика
|
||||
- **Документация**: [[Мой сервер/Traefik Reverse Proxy/Обзор системы]]
|
||||
- **Функции**: SSL termination, load balancing, service discovery
|
||||
- **Интеграции**: Docker API, Let's Encrypt, Authelia middleware
|
||||
|
||||
#### Authelia Authentication
|
||||
- **Роль**: Централизованная аутентификация и авторизация
|
||||
- **Документация**: [[Мой сервер/Authelia Authentication/Обзор системы]]
|
||||
- **Функции**: SSO, 2FA, access control, session management
|
||||
- **Интеграции**: Traefik Forward Auth, Redis, file-based users
|
||||
|
||||
### Уровень приложений
|
||||
|
||||
#### Second Mind
|
||||
- **Роль**: Система публикации заметок Obsidian
|
||||
- **Документация**: [[Мой сервер/Second Mind Setup/Обзор системы]]
|
||||
- **Функции**: Статическая генерация сайта, webhook processing
|
||||
- **Интеграции**: Git Service, Quartz, Nginx
|
||||
|
||||
#### Git Service
|
||||
- **Роль**: Централизованное хранение кода и документации
|
||||
- **Документация**: [[Мой сервер/Git Service/Обзор системы]]
|
||||
- **Функции**: Git repositories, web interface, webhook notifications
|
||||
- **Интеграции**: PostgreSQL, Traefik, SSH access
|
||||
|
||||
## Сетевая архитектура
|
||||
|
||||
### Docker Networks
|
||||
|
||||
#### Proxy Network
|
||||
```yaml
|
||||
networks:
|
||||
proxy:
|
||||
name: proxy
|
||||
driver: bridge
|
||||
external: true
|
||||
```
|
||||
|
||||
- **Назначение**: Связывает все публичные сервисы с Traefik
|
||||
- **Подключенные сервисы**: Traefik, Authelia, Second Mind, Git Service
|
||||
- **Безопасность**: Изолированная сеть для веб-трафика
|
||||
|
||||
#### Internal Networks
|
||||
- **auth_default**: Внутренняя сеть для Authelia и Redis
|
||||
- **git_default**: Внутренняя сеть для Git Service и PostgreSQL
|
||||
- **second-mind_default**: Внутренняя сеть для Second Mind компонентов
|
||||
|
||||
### Port Mapping
|
||||
| Порт | Сервис | Протокол | Назначение |
|
||||
|------|--------|----------|------------|
|
||||
| 80 | Traefik | HTTP | Редирект на HTTPS |
|
||||
| 443 | Traefik | HTTPS | Основной веб-трафик |
|
||||
| 2222 | Traefik → Git | SSH | Git operations |
|
||||
| 8080 | Traefik | HTTP | Dashboard (insecure) |
|
||||
|
||||
## Управление доменами
|
||||
|
||||
### Domain Structure
|
||||
```
|
||||
aepif.ru
|
||||
├── notes.aepif.ru → Second Mind (защищено Authelia)
|
||||
├── git.aepif.ru → Git Service (собственная авторизация)
|
||||
├── auth.aepif.ru → Authelia (публичная страница входа)
|
||||
├── webhook.aepif.ru → Webhook Service (API без авторизации)
|
||||
└── traefik.aepif.ru → Traefik Dashboard (небезопасно)
|
||||
```
|
||||
|
||||
### SSL Certificate Management
|
||||
- **Провайдер**: Let's Encrypt ACME
|
||||
- **Challenge Type**: TLS Challenge
|
||||
- **Автоматическое обновление**: Traefik управляет жизненным циклом
|
||||
- **Хранение**: Persistent volume в Traefik контейнере
|
||||
|
||||
## Data Flow
|
||||
|
||||
### User Authentication Flow
|
||||
1. **User Request** → Traefik получает запрос к защищенному ресурсу
|
||||
2. **Middleware Check** → Traefik проверяет Authelia middleware
|
||||
3. **Auth Validation** → Authelia валидирует сессию в Redis
|
||||
4. **Authentication** → При необходимости перенаправление на auth.aepif.ru
|
||||
5. **Access Grant** → После успешной аутентификации доступ к ресурсу
|
||||
|
||||
### Content Publishing Flow
|
||||
1. **Git Push** → Изменения отправляются в Git Service
|
||||
2. **Webhook Trigger** → Git Service отправляет webhook
|
||||
3. **Content Pull** → Webhook Service получает изменения
|
||||
4. **Site Build** → Quartz генерирует статический сайт
|
||||
5. **Content Deploy** → Nginx раздает обновленный контент
|
||||
|
||||
## Security Model
|
||||
|
||||
### Принципы безопасности
|
||||
- **Zero Trust**: Проверка каждого запроса
|
||||
- **Least Privilege**: Минимальные необходимые права
|
||||
- **Defense in Depth**: Многоуровневая защита
|
||||
- **Secure by Default**: Безопасные настройки по умолчанию
|
||||
|
||||
### Security Layers
|
||||
1. **Network Level**: Firewall, isolated networks
|
||||
2. **Transport Level**: TLS encryption, HSTS
|
||||
3. **Application Level**: Authentication, authorization
|
||||
4. **Data Level**: Encrypted storage, secure secrets
|
||||
|
||||
### Access Control
|
||||
- **Public Access**: webhook.aepif.ru (API with token)
|
||||
- **Bypass Authelia**: git.aepif.ru, auth.aepif.ru
|
||||
- **Protected by Authelia**: notes.aepif.ru
|
||||
- **Admin Only**: traefik.aepif.ru (должен быть защищен в production)
|
||||
|
||||
## Monitoring и Observability
|
||||
|
||||
### Available Metrics
|
||||
- **Traefik Dashboard**: Request metrics, response times, error rates
|
||||
- **Container Logs**: Application logs через `docker logs`
|
||||
- **Health Checks**: Automatic service health monitoring
|
||||
- **SSL Certificate Status**: Expiration monitoring
|
||||
|
||||
### Monitoring Endpoints
|
||||
```bash
|
||||
# Health checks
|
||||
curl -I https://notes.aepif.ru/health
|
||||
curl -I https://git.aepif.ru/
|
||||
curl -I https://auth.aepif.ru/api/health
|
||||
|
||||
# Traefik metrics
|
||||
curl https://traefik.aepif.ru/api/rawdata
|
||||
```
|
||||
|
||||
## Disaster Recovery
|
||||
|
||||
### Backup Strategy
|
||||
1. **Configuration Files**: All docker-compose.yml and config files
|
||||
2. **SSL Certificates**: Traefik ACME data
|
||||
3. **User Data**: Authelia user database and config
|
||||
4. **Git Repositories**: Git Service data and PostgreSQL
|
||||
5. **Application Data**: Second Mind built content
|
||||
|
||||
### Recovery Procedures
|
||||
1. **Infrastructure**: Redeploy Traefik and Authelia
|
||||
2. **Certificates**: Restore ACME data or let auto-renewal
|
||||
3. **Services**: Redeploy application services
|
||||
4. **Data**: Restore databases and repositories
|
||||
5. **Testing**: Validate all services are functional
|
||||
|
||||
## Развертывание (High Level)
|
||||
|
||||
### Порядок развертывания
|
||||
1. **[[Мой сервер/Traefik Reverse Proxy/Развертывание|Traefik Deployment]]** - Базовая инфраструктура
|
||||
2. **[[Мой сервер/Authelia Authentication/Развертывание|Authelia Deployment]]** - Система аутентификации
|
||||
3. **[[Мой сервер/Git Service/Развертывание|Git Service Deployment]]** - Git сервер
|
||||
4. **[[Мой сервер/Second Mind Setup/Развертывание|Second Mind Deployment]]** - Система публикации
|
||||
|
||||
### Prerequisites
|
||||
- Docker и Docker Compose
|
||||
- Доступ к серверу с публичным IP
|
||||
- Настроенные DNS записи для всех поддоменов
|
||||
- Открытые порты 80, 443, 2222
|
||||
|
||||
## Масштабирование
|
||||
|
||||
### Horizontal Scaling
|
||||
- **Load Balancing**: Traefik поддерживает несколько backend instances
|
||||
- **Database Scaling**: PostgreSQL можно масштабировать с репликами
|
||||
- **Static Content**: CDN для Second Mind статического контента
|
||||
|
||||
### Performance Optimization
|
||||
- **Caching**: Nginx кеширование статического контента
|
||||
- **Compression**: Gzip compression в Traefik/Nginx
|
||||
- **Connection Pooling**: Оптимизированные подключения к БД
|
||||
|
||||
## Связанные документы
|
||||
|
||||
### Компоненты инфраструктуры
|
||||
- **[[Traefik Reverse Proxy/Обзор системы]]** - Reverse proxy и SSL
|
||||
- **[[Authelia Authentication/Обзор системы]]** - Аутентификация и авторизация
|
||||
|
||||
### Прикладные сервисы
|
||||
- **[[Second Mind Setup/Обзор системы]]** - Система публикации заметок
|
||||
- **[[Git Service/Обзор системы]]** - Git сервер и репозитории
|
||||
|
||||
### Развертывание и администрирование
|
||||
- **[[Traefik Reverse Proxy/Администрирование]]** - Управление трафиком
|
||||
- **[[Authelia Authentication/Администрирование]]** - Управление пользователями
|
||||
Reference in New Issue
Block a user