From 05f63cdf0ef5c87c865220eaa8855a9fa22b6efa Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Mon, 4 Aug 2025 14:26:29 +0400 Subject: [PATCH] vault backup: 2025-08-04 14:26:29 --- index.md | 4 +- .../Authelia Authentication/Администрирование.md | 35 ++ .../Authelia Authentication/Конфигурации.md | 29 + .../Authelia Authentication/Обзор системы.md | 314 +++++++++++ .../Authelia Authentication/Развертывание.md | 32 ++ Мой сервер/Git Service/Администрирование.md | 60 +++ Мой сервер/Git Service/Конфигурации.md | 37 ++ Мой сервер/Git Service/Обзор системы.md | 204 +++++++ Мой сервер/Git Service/Развертывание.md | 46 ++ Мой сервер/Second Mind Setup/Обзор системы.md | 43 +- .../Traefik Reverse Proxy/Администрирование.md | 29 + .../Traefik Reverse Proxy/Конфигурации.md | 26 + .../Traefik Reverse Proxy/Обзор системы.md | 239 +++++++++ .../Traefik Reverse Proxy/Развертывание.md | 26 + Мой сервер/index.md | 85 +++ .../Инфраструктура/Администрирование.md | 506 ------------------ Мой сервер/Инфраструктура/Конфигурации.md | 415 -------------- Мой сервер/Инфраструктура/Обзор системы.md | 227 -------- Мой сервер/Инфраструктура/Развертывание.md | 148 ----- Мой сервер/Обзор инфраструктуры.md | 259 +++++++++ 20 files changed, 1450 insertions(+), 1314 deletions(-) create mode 100644 Мой сервер/Authelia Authentication/Администрирование.md create mode 100644 Мой сервер/Authelia Authentication/Конфигурации.md create mode 100644 Мой сервер/Authelia Authentication/Обзор системы.md create mode 100644 Мой сервер/Authelia Authentication/Развертывание.md create mode 100644 Мой сервер/Git Service/Администрирование.md create mode 100644 Мой сервер/Git Service/Конфигурации.md create mode 100644 Мой сервер/Git Service/Обзор системы.md create mode 100644 Мой сервер/Git Service/Развертывание.md create mode 100644 Мой сервер/Traefik Reverse Proxy/Администрирование.md create mode 100644 Мой сервер/Traefik Reverse Proxy/Конфигурации.md create mode 100644 Мой сервер/Traefik Reverse Proxy/Обзор системы.md create mode 100644 Мой сервер/Traefik Reverse Proxy/Развертывание.md create mode 100644 Мой сервер/index.md delete mode 100644 Мой сервер/Инфраструктура/Администрирование.md delete mode 100644 Мой сервер/Инфраструктура/Конфигурации.md delete mode 100644 Мой сервер/Инфраструктура/Обзор системы.md delete mode 100644 Мой сервер/Инфраструктура/Развертывание.md create mode 100644 Мой сервер/Обзор инфраструктуры.md diff --git a/index.md b/index.md index 28e5547..d247023 100644 --- a/index.md +++ b/index.md @@ -1,2 +1,4 @@ -тут я буду вести лог с помощью аи агента \ No newline at end of file +# Мои заметки + +Добро пожаловать в мою систему заметок! Здесь я веду записи по различным аспектам жизни и работы. diff --git a/Мой сервер/Authelia Authentication/Администрирование.md b/Мой сервер/Authelia Authentication/Администрирование.md new file mode 100644 index 0000000..a7aee3e --- /dev/null +++ b/Мой сервер/Authelia Authentication/Администрирование.md @@ -0,0 +1,35 @@ +# Authelia Authentication - Администрирование + +## Ежедневное администрирование Authelia + +*Документация будет дополнена процедурами администрирования* + +## Управление пользователями +*Добавление, изменение, удаление пользователей* + +## Управление группами и правами +*Настройка access control правил* + +## Мониторинг аутентификации +*Анализ логов входа и безопасности* + +## Password reset процедуры +*Сброс паролей пользователей* + +## Управление TOTP +*Настройка и сброс двухфакторной аутентификации* + +## Мониторинг Redis +*Контроль хранилища сессий* + +## Troubleshooting +*Решение проблем с аутентификацией* + +## Backup пользователей +*Резервное копирование базы пользователей* + +## Обновления Authelia +*Процедуры обновления сервиса* + +--- +*Эта страница находится в разработке* \ No newline at end of file diff --git a/Мой сервер/Authelia Authentication/Конфигурации.md b/Мой сервер/Authelia Authentication/Конфигурации.md new file mode 100644 index 0000000..af003d6 --- /dev/null +++ b/Мой сервер/Authelia Authentication/Конфигурации.md @@ -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 +*Настройка уведомлений* + +--- +*Эта страница находится в разработке* \ No newline at end of file diff --git a/Мой сервер/Authelia Authentication/Обзор системы.md b/Мой сервер/Authelia Authentication/Обзор системы.md new file mode 100644 index 0000000..c0d7bee --- /dev/null +++ b/Мой сервер/Authelia Authentication/Обзор системы.md @@ -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 - Администрирование]]** - управление пользователями и мониторинг \ No newline at end of file diff --git a/Мой сервер/Authelia Authentication/Развертывание.md b/Мой сервер/Authelia Authentication/Развертывание.md new file mode 100644 index 0000000..8d699d8 --- /dev/null +++ b/Мой сервер/Authelia Authentication/Развертывание.md @@ -0,0 +1,32 @@ +# Authelia Authentication - Развертывание + +## Пошаговая установка Authelia + +*Документация будет дополнена инструкциями по развертыванию* + +## Предварительные требования +*Системные требования, Traefik, сеть proxy* + +## Подготовка конфигурации +*Создание файлов configuration.yml и users_database.yml* + +## Генерация секретов +*Создание JWT и session секретов* + +## Создание пользователей +*Настройка первичных пользователей* + +## Развертывание контейнеров +*Запуск Authelia и Redis* + +## Интеграция с Traefik +*Настройка Forward Auth middleware* + +## Тестирование аутентификации +*Проверка работы системы* + +## Настройка TOTP +*Конфигурация двухфакторной аутентификации* + +--- +*Эта страница находится в разработке* \ No newline at end of file diff --git a/Мой сервер/Git Service/Администрирование.md b/Мой сервер/Git Service/Администрирование.md new file mode 100644 index 0000000..2aea44b --- /dev/null +++ b/Мой сервер/Git Service/Администрирование.md @@ -0,0 +1,60 @@ +# Git Service - Администрирование + +## Ежедневное администрирование + +Этот документ содержит информацию по управлению и обслуживанию Git Service. + +## Управление пользователями + +### Создание пользователей +*Процедуры добавления новых пользователей* + +### Управление правами доступа +*Настройка прав и ролей* + +### Сброс паролей +*Процедуры восстановления доступа* + +## Управление репозиториями + +### Создание репозиториев +*Настройка новых репозиториев* + +### Backup репозиториев +*Процедуры резервного копирования* + +### Миграция репозиториев +*Перенос репозиториев* + +## Мониторинг + +### Проверка состояния сервиса +*Health checks и мониторинг* + +### Анализ логов +*Работа с логами Gitea и PostgreSQL* + +### Метрики производительности +*Мониторинг ресурсов* + +## Обслуживание + +### Обновления +*Процедуры обновления Gitea* + +### Backup и восстановление +*Полное резервное копирование* + +### Troubleshooting +*Решение типовых проблем* + +## Интеграции + +### Настройка Webhooks +*Конфигурация уведомлений* + +### Интеграция с CI/CD +*Подключение систем автоматизации* + +--- +*Эта страница находится в разработке* \ No newline at end of file diff --git a/Мой сервер/Git Service/Конфигурации.md b/Мой сервер/Git Service/Конфигурации.md new file mode 100644 index 0000000..2fc2e87 --- /dev/null +++ b/Мой сервер/Git Service/Конфигурации.md @@ -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 для персистентности данных* + +--- +*Эта страница находится в разработке* \ No newline at end of file diff --git a/Мой сервер/Git Service/Обзор системы.md b/Мой сервер/Git Service/Обзор системы.md new file mode 100644 index 0000000..41bcbd6 --- /dev/null +++ b/Мой сервер/Git Service/Обзор системы.md @@ -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 - Администрирование]]** - управление и обслуживание \ No newline at end of file diff --git a/Мой сервер/Git Service/Развертывание.md b/Мой сервер/Git Service/Развертывание.md new file mode 100644 index 0000000..1a06f0b --- /dev/null +++ b/Мой сервер/Git Service/Развертывание.md @@ -0,0 +1,46 @@ +# Git Service - Развертывание + +## Пошаговая установка + +Этот документ содержит инструкции по развертыванию Git Service с нуля. + +## Предварительные требования + +### Системные требования +*Минимальные требования к серверу* + +### Зависимости +*Необходимое ПО и сервисы* + +## Установка + +### Шаг 1: Подготовка среды +*Подготовка окружения для развертывания* + +### Шаг 2: Конфигурация +*Настройка файлов конфигурации* + +### Шаг 3: Развертывание контейнеров +*Запуск Docker Compose* + +### Шаг 4: Первоначальная настройка +*Настройка Gitea через веб-интерфейс* + +## Интеграция с инфраструктурой + +### Подключение к Traefik +*Настройка reverse proxy* + +### Настройка SSL +*Конфигурация сертификатов* + +## Тестирование + +### Проверка доступности +*Тесты работоспособности сервиса* + +### Создание тестового репозитория +*Валидация функциональности* + +--- +*Эта страница находится в разработке* \ No newline at end of file diff --git a/Мой сервер/Second Mind Setup/Обзор системы.md b/Мой сервер/Second Mind Setup/Обзор системы.md index f749de3..e60fb1a 100644 --- a/Мой сервер/Second Mind Setup/Обзор системы.md +++ b/Мой сервер/Second Mind Setup/Обзор системы.md @@ -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 diff --git a/Мой сервер/Traefik Reverse Proxy/Администрирование.md b/Мой сервер/Traefik Reverse Proxy/Администрирование.md new file mode 100644 index 0000000..7303b9c --- /dev/null +++ b/Мой сервер/Traefik Reverse Proxy/Администрирование.md @@ -0,0 +1,29 @@ +# Traefik Reverse Proxy - Администрирование + +## Ежедневное администрирование Traefik + +*Документация будет дополнена процедурами администрирования* + +## Мониторинг Dashboard +*Работа с веб-интерфейсом Traefik* + +## Управление SSL сертификатами +*Мониторинг и обновление сертификатов* + +## Анализ логов +*Работа с логами доступа и ошибок* + +## Добавление новых сервисов +*Процедура подключения новых сервисов* + +## Troubleshooting +*Решение типовых проблем* + +## Обновления +*Процедуры обновления Traefik* + +## Backup и восстановление +*Резервное копирование конфигурации* + +--- +*Эта страница находится в разработке* \ No newline at end of file diff --git a/Мой сервер/Traefik Reverse Proxy/Конфигурации.md b/Мой сервер/Traefik Reverse Proxy/Конфигурации.md new file mode 100644 index 0000000..cdc8b9b --- /dev/null +++ b/Мой сервер/Traefik Reverse Proxy/Конфигурации.md @@ -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 для различных задач* + +--- +*Эта страница находится в разработке* \ No newline at end of file diff --git a/Мой сервер/Traefik Reverse Proxy/Обзор системы.md b/Мой сервер/Traefik Reverse Proxy/Обзор системы.md new file mode 100644 index 0000000..cce6507 --- /dev/null +++ b/Мой сервер/Traefik Reverse Proxy/Обзор системы.md @@ -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 - Администрирование]]** - обслуживание и мониторинг \ No newline at end of file diff --git a/Мой сервер/Traefik Reverse Proxy/Развертывание.md b/Мой сервер/Traefik Reverse Proxy/Развертывание.md new file mode 100644 index 0000000..f108a8d --- /dev/null +++ b/Мой сервер/Traefik Reverse Proxy/Развертывание.md @@ -0,0 +1,26 @@ +# Traefik Reverse Proxy - Развертывание + +## Пошаговая установка Traefik + +*Документация будет дополнена инструкциями по развертыванию* + +## Предварительные требования +*Системные требования и зависимости* + +## Создание сети proxy +*Настройка Docker network* + +## Конфигурация Docker Compose +*Подготовка файлов конфигурации* + +## Первый запуск +*Процедура начального запуска* + +## Настройка DNS +*Настройка доменных записей* + +## Тестирование +*Проверка работоспособности* + +--- +*Эта страница находится в разработке* \ No newline at end of file diff --git a/Мой сервер/index.md b/Мой сервер/index.md new file mode 100644 index 0000000..1cd5867 --- /dev/null +++ b/Мой сервер/index.md @@ -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') }}* \ No newline at end of file diff --git a/Мой сервер/Инфраструктура/Администрирование.md b/Мой сервер/Инфраструктура/Администрирование.md deleted file mode 100644 index 0540b71..0000000 --- a/Мой сервер/Инфраструктура/Администрирование.md +++ /dev/null @@ -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 - Администрирование]] \ No newline at end of file diff --git a/Мой сервер/Инфраструктура/Конфигурации.md b/Мой сервер/Инфраструктура/Конфигурации.md deleted file mode 100644 index 829e766..0000000 --- a/Мой сервер/Инфраструктура/Конфигурации.md +++ /dev/null @@ -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 -``` - -Следующий документ: [[Инфраструктура - Развертывание]] \ No newline at end of file diff --git a/Мой сервер/Инфраструктура/Обзор системы.md b/Мой сервер/Инфраструктура/Обзор системы.md deleted file mode 100644 index f4a600b..0000000 --- a/Мой сервер/Инфраструктура/Обзор системы.md +++ /dev/null @@ -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 - Обзор системы]] - основное приложение на этой инфраструктуре \ No newline at end of file diff --git a/Мой сервер/Инфраструктура/Развертывание.md b/Мой сервер/Инфраструктура/Развертывание.md deleted file mode 100644 index e38759b..0000000 --- a/Мой сервер/Инфраструктура/Развертывание.md +++ /dev/null @@ -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=$( \ No newline at end of file diff --git a/Мой сервер/Обзор инфраструктуры.md b/Мой сервер/Обзор инфраструктуры.md new file mode 100644 index 0000000..e20e06c --- /dev/null +++ b/Мой сервер/Обзор инфраструктуры.md @@ -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/Администрирование]]** - Управление пользователями \ No newline at end of file