Реорганизация структуры заметок v2.0

- Создана новая организационная структура с эмодзи-папками
- Добавлена система Inbox для быстрого захвата идей
- Созданы шаблоны для всех типов заметок с YAML метаданными
- Перенесен весь контент из старой структуры в новую
- Добавлен главный дашборд с динамическими запросами
- Создано подробное руководство по использованию системы
- Техническая документация реорганизована по типам

Основные улучшения:
 Inbox-first подход для новых заметок
 Тематическая организация по 8 областям знаний
 Шаблоны с метаданными для структурированности
 Система связей между заметками
 Динамические дашборды с аналитикой
 Централизованная техническая документация без дублирования
This commit is contained in:
Andrey Epifancev
2025-08-09 22:11:50 +04:00
parent d2d511276f
commit e96fec3709
37 changed files with 1001 additions and 6 deletions

View File

@@ -0,0 +1,35 @@
# Authelia Authentication - Администрирование
## Ежедневное администрирование Authelia
*Документация будет дополнена процедурами администрирования*
## Управление пользователями
*Добавление, изменение, удаление пользователей*
## Управление группами и правами
*Настройка access control правил*
## Мониторинг аутентификации
*Анализ логов входа и безопасности*
## Password reset процедуры
*Сброс паролей пользователей*
## Управление TOTP
*Настройка и сброс двухфакторной аутентификации*
## Мониторинг Redis
*Контроль хранилища сессий*
## Troubleshooting
*Решение проблем с аутентификацией*
## Backup пользователей
*Резервное копирование базы пользователей*
## Обновления Authelia
*Процедуры обновления сервиса*
---
*Эта страница находится в разработке*

View File

@@ -0,0 +1,407 @@
# Authelia Authentication - Конфигурации
**[[Обзор системы|← Назад к обзору]]**
## Docker Compose конфигурация
### Основной файл: `/DOCKER/auth/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
- 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
```
## Основной файл configuration.yml
### Полная конфигурация: `/DOCKER/auth/authelia/configuration.yml`
```yaml
---
theme: auto
jwt_secret: 4odTQ0TqW2Ej8m8Cm3K6Wn3VTvg09Mb2Yi4CUzuIPUsHB3fpF54+NbIAqo6+CREA
default_redirection_url: https://notes.aepif.ru
server:
host: 0.0.0.0
port: 9091
log:
level: info
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
```
### Разбор конфигурации по разделам
#### Server Configuration
```yaml
server:
host: 0.0.0.0 # Слушать на всех интерфейсах
port: 9091 # Внутренний порт контейнера
```
#### JWT и безопасность
```yaml
jwt_secret: 4odTQ0TqW2Ej8m8Cm3K6Wn3VTvg09Mb2Yi4CUzuIPUsHB3fpF54+NbIAqo6+CREA
default_redirection_url: https://notes.aepif.ru
theme: auto # Автоматическая тема (dark/light)
```
#### Logging
```yaml
log:
level: info # Уровни: trace, debug, info, warn, error
```
## User Database Configuration
### Файл пользователей: `/DOCKER/auth/authelia/users_database.yml`
```yaml
users:
admin:
displayname: "Administrator"
password: "$argon2id$v=19$m=65536,t=3,p=4$..." # Argon2id hash
email: epifantsev1aa@gmail.com
groups:
- admins
- users
```
### Генерация паролей
```bash
# Использование authelia для генерации хеша пароля
docker run --rm authelia/authelia:latest authelia crypto hash generate argon2 --password 'your_password'
# Результат вставляется в users_database.yml
```
### Структура пользователей
- **displayname**: Отображаемое имя пользователя
- **password**: Argon2id хеш пароля
- **email**: Email для уведомлений и 2FA
- **groups**: Массив групп для контроля доступа
## Access Control Rules
### Политики доступа
```yaml
access_control:
default_policy: deny # По умолчанию запрещено
rules:
- domain: notes.aepif.ru
policy: one_factor # Требует логин + пароль
- domain: git.aepif.ru
policy: bypass # Без проверки Authelia
- domain: webhook.aepif.ru
policy: bypass # API сервис
- domain: auth.aepif.ru
policy: bypass # Сама страница входа
```
### Типы политик
- **deny**: Полный запрет доступа
- **bypass**: Доступ без аутентификации через Authelia
- **one_factor**: Только логин + пароль
- **two_factor**: Логин + пароль + TOTP
### Расширенные правила доступа
```yaml
# Пример дополнительных правил
access_control:
rules:
# Ограничение по группам
- domain: admin.aepif.ru
policy: two_factor
subject: "group:admins"
# Ограничение по пользователям
- domain: private.aepif.ru
policy: one_factor
subject: "user:admin"
# Ограничение по IP/сети
- domain: internal.aepif.ru
policy: one_factor
networks:
- "192.168.1.0/24"
# Ограничение по методам HTTP
- domain: api.aepif.ru
policy: one_factor
methods:
- "GET"
- "POST"
```
## Session Configuration
### Настройки сессий
```yaml
session:
name: authelia_session # Имя cookie
domain: aepif.ru # Домен для cookie (все поддомены)
secret: 91Zc/PM0EogwZbsX0tsDGLpr4Wg7zwtQUzcp5tYP5dNdRNTlpkXBfJr9EivuD+A4
expiration: 1h # Время жизни сессии
inactivity: 5m # Время неактивности до выхода
redis:
host: redis # Хост Redis контейнера
port: 6379 # Порт Redis
password: Ll8qlQ3rgBFo4Syq # Пароль Redis
```
### Дополнительные настройки сессий
```yaml
session:
# Дополнительные опции безопасности
same_site: lax # Политика SameSite cookie
secure: true # Только HTTPS (автоматически в production)
remember_me_duration: 1M # Время "запомнить меня"
```
## TOTP Configuration
### Двухфакторная аутентификация
```yaml
totp:
issuer: aepif.ru # Отображается в приложении аутентификации
algorithm: sha1 # sha1, sha256, sha512
digits: 6 # Количество цифр в коде
period: 30 # Период действия кода в секундах
skew: 1 # Допуск на рассинхронизацию времени
```
### Поддерживаемые приложения
- Google Authenticator
- Authy
- Microsoft Authenticator
- 1Password
- Bitwarden
## Redis Configuration
### Настройки Redis контейнера
```yaml
redis:
image: redis:7-alpine
command: redis-server --requirepass Ll8qlQ3rgBFo4Syq
volumes:
- redis_data:/data # Персистентное хранение
```
### Дополнительные настройки Redis
```yaml
# В configuration.yml для дополнительных опций Redis
session:
redis:
host: redis
port: 6379
password: Ll8qlQ3rgBFo4Syq
database_index: 0 # Номер базы данных
maximum_active_connections: 8
minimum_idle_connections: 0
```
## Regulation (Rate Limiting)
### Защита от брутфорса
```yaml
regulation:
max_retries: 3 # Максимум попыток входа
find_time: 2m # Временное окно для подсчета попыток
ban_time: 5m # Время блокировки после превышения лимита
```
### Расширенная конфигурация
```yaml
regulation:
max_retries: 3
find_time: 2m
ban_time: 5m
# Дополнительные настройки
bantime_multiplier: 2 # Увеличение времени блокировки при повторных нарушениях
cleanup_interval: 1h # Интервал очистки старых записей
```
## Storage Configuration
### Локальное хранилище
```yaml
storage:
encryption_key: sWLemnH0QNsYsYvbav59mQOWxLOeUvSl
local:
path: /config/db.sqlite3
```
### База данных содержит
- TOTP секреты пользователей
- U2F/WebAuthn данные
- Статистика авторизации
- Конфигурация двухфакторной аутентификации
## Notifier Configuration
### Файловые уведомления
```yaml
notifier:
filesystem:
filename: /config/notification.txt
```
### SMTP уведомления (альтернатива)
```yaml
notifier:
smtp:
username: your_email@gmail.com
password: your_app_password
host: smtp.gmail.com
port: 587
sender: your_email@gmail.com
startup_check_address: your_email@gmail.com
disable_require_tls: false
disable_html_emails: false
subject: "[Authelia] {title}"
templates_path: /config/templates
```
## Traefik Integration Labels
### Forward Auth Middleware
```yaml
labels:
# Основная конфигурация 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
```
### Применение к сервисам
```yaml
# Для защищенного сервиса
labels:
- traefik.http.routers.protected-service.middlewares=authelia@docker
```
## Environment Variables
### Переменные окружения
```yaml
environment:
- TZ=Europe/Moscow # Часовой пояс
- AUTHELIA_JWT_SECRET_FILE=/run/secrets/jwt_secret # Секреты через файлы
- AUTHELIA_SESSION_SECRET_FILE=/run/secrets/session_secret
```
## Безопасность конфигурации
### Генерация секретов
```bash
# Генерация случайных секретов
openssl rand -base64 64 # Для JWT и session secrets
openssl rand -hex 32 # Для encryption key
```
### Рекомендации по безопасности
1. **Используйте сильные пароли**: Все секреты должны быть случайными
2. **Ротация секретов**: Регулярно обновляйте JWT и session секреты
3. **Ограничьте доступ к файлам**: Конфигурационные файлы должны быть доступны только контейнеру
4. **Мониторинг попыток входа**: Настройте алерты на подозрительную активность
### Защита конфигурационных файлов
```bash
# Правильные права доступа
chmod 600 /DOCKER/auth/authelia/configuration.yml
chmod 600 /DOCKER/auth/authelia/users_database.yml
chown root:root /DOCKER/auth/authelia/*.yml
```
## Связанные файлы
- **[[Развертывание]]** - инструкции по установке и настройке
- **[[Администрирование]]** - управление пользователями и мониторинг
- **[[../Traefik Reverse Proxy/Конфигурации]]** - интеграция с reverse proxy

View 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 - Администрирование]]** - управление пользователями и мониторинг

View File

@@ -0,0 +1,32 @@
# Authelia Authentication - Развертывание
## Пошаговая установка Authelia
*Документация будет дополнена инструкциями по развертыванию*
## Предварительные требования
*Системные требования, Traefik, сеть proxy*
## Подготовка конфигурации
*Создание файлов configuration.yml и users_database.yml*
## Генерация секретов
*Создание JWT и session секретов*
## Создание пользователей
*Настройка первичных пользователей*
## Развертывание контейнеров
*Запуск Authelia и Redis*
## Интеграция с Traefik
*Настройка Forward Auth middleware*
## Тестирование аутентификации
*Проверка работы системы*
## Настройка TOTP
*Конфигурация двухфакторной аутентификации*
---
*Эта страница находится в разработке*

View File

@@ -0,0 +1,60 @@
# Git Service - Администрирование
## Ежедневное администрирование
Этот документ содержит информацию по управлению и обслуживанию Git Service.
## Управление пользователями
### Создание пользователей
*Процедуры добавления новых пользователей*
### Управление правами доступа
*Настройка прав и ролей*
### Сброс паролей
*Процедуры восстановления доступа*
## Управление репозиториями
### Создание репозиториев
*Настройка новых репозиториев*
### Backup репозиториев
*Процедуры резервного копирования*
### Миграция репозиториев
*Перенос репозиториев*
## Мониторинг
### Проверка состояния сервиса
*Health checks и мониторинг*
### Анализ логов
*Работа с логами Gitea и PostgreSQL*
### Метрики производительности
*Мониторинг ресурсов*
## Обслуживание
### Обновления
*Процедуры обновления Gitea*
### Backup и восстановление
*Полное резервное копирование*
### Troubleshooting
*Решение типовых проблем*
## Интеграции
### Настройка Webhooks
*Конфигурация уведомлений*
### Интеграция с CI/CD
*Подключение систем автоматизации*
---
*Эта страница находится в разработке*

View File

@@ -0,0 +1,409 @@
# Git Service - Конфигурации
**[[Обзор системы|← Назад к обзору]]**
## Docker Compose конфигурация
### Основной файл: `/DOCKER/git/docker-compose.yml`
```yaml
version: '3.8'
services:
gitea:
image: gitea/gitea:latest
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=postgres
- GITEA__database__HOST=db:5432
- GITEA__database__NAME=gitea
- GITEA__database__USER=gitea
- GITEA__database__PASSWORD=sG7hZXBQDAtRab9A
- GITEA__server__SSH_DOMAIN=git.aepif.ru
- GITEA__server__SSH_PORT=2222
volumes:
- gitea_data:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
depends_on:
- db
networks:
- default
- proxy
labels:
- traefik.enable=true
# HTTP routing
- traefik.http.routers.gitea.rule=Host(`git.aepif.ru`)
- traefik.http.routers.gitea.tls.certresolver=letsencrypt
- traefik.http.services.gitea.loadbalancer.server.port=3000
# TCP routing for SSH
- traefik.tcp.routers.gitea-ssh.rule=HostSNI(`*`)
- traefik.tcp.routers.gitea-ssh.entrypoints=ssh
- traefik.tcp.services.gitea-ssh.loadbalancer.server.port=22
restart: unless-stopped
db:
image: postgres:14
container_name: gitea_db
environment:
- POSTGRES_USER=gitea
- POSTGRES_PASSWORD=sG7hZXBQDAtRab9A
- POSTGRES_DB=gitea
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- default
restart: unless-stopped
volumes:
gitea_data:
external: true
name: gitea_gitea_data
postgres_data:
external: true
name: gitea_postgres_data
networks:
proxy:
external: true
default:
driver: bridge
```
## Gitea конфигурация
### Environment Variables
```yaml
environment:
# User Configuration
- USER_UID=1000 # UID пользователя в контейнере
- USER_GID=1000 # GID пользователя в контейнере
# Database Configuration
- GITEA__database__DB_TYPE=postgres
- GITEA__database__HOST=db:5432
- GITEA__database__NAME=gitea
- GITEA__database__USER=gitea
- GITEA__database__PASSWORD=sG7hZXBQDAtRab9A
# Server Configuration
- GITEA__server__SSH_DOMAIN=git.aepif.ru
- GITEA__server__SSH_PORT=2222
```
### Расширенные настройки через переменные окружения
```yaml
environment:
# Server Settings
- GITEA__server__DOMAIN=git.aepif.ru
- GITEA__server__ROOT_URL=https://git.aepif.ru
- GITEA__server__DISABLE_SSH=false
- GITEA__server__START_SSH_SERVER=true
- GITEA__server__SSH_PORT=22 # Внутренний SSH порт
- GITEA__server__SSH_LISTEN_PORT=22 # Порт прослушивания в контейнере
# Security Settings
- GITEA__security__INSTALL_LOCK=true
- GITEA__security__SECRET_KEY=your_secret_key_here
# Service Settings
- GITEA__service__DISABLE_REGISTRATION=true
- GITEA__service__REQUIRE_SIGNIN_VIEW=false
- GITEA__service__ENABLE_NOTIFY_MAIL=false
# Repository Settings
- GITEA__repository__DEFAULT_BRANCH=main
- GITEA__repository__ENABLE_PUSH_CREATE_USER=true
- GITEA__repository__ENABLE_PUSH_CREATE_ORG=false
# Webhook Settings
- GITEA__webhook__ALLOWED_HOST_LIST=*
- GITEA__webhook__SKIP_TLS_VERIFY=false
```
### Структура конфигурации app.ini
Gitea также поддерживает конфигурацию через файл `app.ini`:
```ini
# /data/gitea/conf/app.ini внутри контейнера
[database]
DB_TYPE = postgres
HOST = db:5432
NAME = gitea
USER = gitea
PASSWD = sG7hZXBQDAtRab9A
SSL_MODE = disable
[server]
DOMAIN = git.aepif.ru
HTTP_PORT = 3000
ROOT_URL = https://git.aepif.ru/
DISABLE_SSH = false
SSH_DOMAIN = git.aepif.ru
SSH_PORT = 2222
START_SSH_SERVER = true
SSH_LISTEN_PORT = 22
[security]
INSTALL_LOCK = true
SECRET_KEY = your_secret_key_here
[service]
DISABLE_REGISTRATION = true
REQUIRE_SIGNIN_VIEW = false
ENABLE_NOTIFY_MAIL = false
DEFAULT_KEEP_EMAIL_PRIVATE = true
[mailer]
ENABLED = false
[repository]
DEFAULT_BRANCH = main
ENABLE_PUSH_CREATE_USER = true
ENABLE_PUSH_CREATE_ORG = false
[webhook]
ALLOWED_HOST_LIST = *
SKIP_TLS_VERIFY = false
```
## PostgreSQL конфигурация
### Database Container Settings
```yaml
db:
image: postgres:14
container_name: gitea_db
environment:
- POSTGRES_USER=gitea # Пользователь БД
- POSTGRES_PASSWORD=sG7hZXBQDAtRab9A # Пароль БД
- POSTGRES_DB=gitea # Имя базы данных
```
### Дополнительные настройки PostgreSQL
```yaml
environment:
# Performance Settings
- POSTGRES_SHARED_PRELOAD_LIBRARIES=pg_stat_statements
- POSTGRES_MAX_CONNECTIONS=200
- POSTGRES_SHARED_BUFFERS=256MB
- POSTGRES_EFFECTIVE_CACHE_SIZE=1GB
- POSTGRES_WORK_MEM=4MB
# Logging Settings
- POSTGRES_LOG_STATEMENT=all
- POSTGRES_LOG_MIN_DURATION_STATEMENT=1000
# Backup Settings
- POSTGRES_WAL_LEVEL=replica
- POSTGRES_ARCHIVE_MODE=on
```
### PostgreSQL Volume Configuration
```yaml
volumes:
postgres_data:
external: true
name: gitea_postgres_data # External volume для персистентности
```
## Traefik Integration Labels
### HTTP Routing
```yaml
labels:
- traefik.enable=true
- traefik.http.routers.gitea.rule=Host(`git.aepif.ru`)
- traefik.http.routers.gitea.tls.certresolver=letsencrypt
- traefik.http.services.gitea.loadbalancer.server.port=3000
```
### TCP Routing для SSH
```yaml
labels:
# SSH TCP routing
- traefik.tcp.routers.gitea-ssh.rule=HostSNI(`*`)
- traefik.tcp.routers.gitea-ssh.entrypoints=ssh
- traefik.tcp.services.gitea-ssh.loadbalancer.server.port=22
```
### Объяснение SSH routing
- **HostSNI(`*`)**: Принимает любые TCP соединения на SSH entrypoint
- **entrypoints=ssh**: Использует SSH entrypoint (порт 2222) в Traefik
- **port=22**: Перенаправляет на порт 22 внутри Gitea контейнера
## Networking Configuration
### Networks
```yaml
networks:
proxy:
external: true # Подключение к Traefik
default:
driver: bridge # Внутренняя сеть для Gitea + PostgreSQL
```
### Network Architecture
- **proxy network**: Для HTTP/HTTPS трафика через Traefik
- **default network**: Для внутренней связи Gitea ↔ PostgreSQL
- **SSH traffic**: Напрямую через TCP routing Traefik
## Volume Configuration
### Gitea Data Volume
```yaml
gitea_data:
external: true
name: gitea_gitea_data
```
**Содержимое Gitea volume:**
- **repositories/**: Git репозитории
- **conf/**: Конфигурационные файлы (app.ini)
- **log/**: Логи Gitea
- **data/**: Загруженные файлы, аватары
- **ssh/**: SSH ключи сервера
### PostgreSQL Data Volume
```yaml
postgres_data:
external: true
name: gitea_postgres_data
```
**Содержимое PostgreSQL volume:**
- **base/**: Файлы базы данных
- **global/**: Глобальные настройки кластера
- **pg_wal/**: Write-Ahead Log файлы
- **pg_tblspc/**: Tablespace ссылки
### Создание external volumes
```bash
# Создание volumes перед запуском
docker volume create gitea_gitea_data
docker volume create gitea_postgres_data
# Проверка созданных volumes
docker volume ls | grep gitea
```
## Time Synchronization
### Timezone Configuration
```yaml
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
```
Это обеспечивает синхронизацию времени контейнера с хост-системой, что важно для:
- Корректных timestamp в Git commits
- Правильного отображения времени в веб-интерфейсе
- Синхронизации с логами других сервисов
## Security Configuration
### User Permissions
```yaml
environment:
- USER_UID=1000
- USER_GID=1000
```
- Gitea запускается под пользователем с UID/GID 1000
- Соответствует обычному пользователю в Linux системах
- Обеспечивает правильные права доступа к файлам
### Database Security
- **Пароль БД**: Случайно сгенерированный пароль `sG7hZXBQDAtRab9A`
- **Изоляция сети**: PostgreSQL доступна только из внутренней сети
- **SSL отключен**: Для внутренней связи в Docker сети
### SSH Security
- **Отдельный порт**: SSH на нестандартном порту 2222
- **TCP routing**: Прямое подключение через Traefik
- **Key management**: SSH ключи управляются через веб-интерфейс
## Performance Tuning
### Gitea Performance Settings
```yaml
environment:
# Repository settings
- GITEA__repository__DEFAULT_REPO_UNITS=repo.code,repo.releases,repo.issues,repo.pulls,repo.wiki
- GITEA__repository__DEFAULT_PRIVATE=private
# Git settings
- GITEA__git__MAX_GIT_DIFF_LINES=10000
- GITEA__git__MAX_GIT_DIFF_LINE_CHARACTERS=5000
- GITEA__git__MAX_GIT_DIFF_FILES=100
# Session settings
- GITEA__session__PROVIDER=memory
- GITEA__session__PROVIDER_CONFIG=data/sessions
```
### PostgreSQL Performance
```yaml
environment:
# Connection settings
- POSTGRES_MAX_CONNECTIONS=200
- POSTGRES_SHARED_BUFFERS=256MB
- POSTGRES_EFFECTIVE_CACHE_SIZE=1GB
- POSTGRES_RANDOM_PAGE_COST=1.1
- POSTGRES_WORK_MEM=4MB
```
## Backup Configuration
### Automated Backups
```yaml
# Дополнительный контейнер для backup (опционально)
backup:
image: prodrigestivill/postgres-backup-local
environment:
- POSTGRES_HOST=db
- POSTGRES_DB=gitea
- POSTGRES_USER=gitea
- POSTGRES_PASSWORD=sG7hZXBQDAtRab9A
- BACKUP_KEEP_DAYS=7
- BACKUP_KEEP_WEEKS=4
- BACKUP_KEEP_MONTHS=6
volumes:
- ./backups:/backups
depends_on:
- db
```
### Backup Strategy
1. **Database Backup**: Автоматический dump PostgreSQL
2. **Repository Backup**: Резервное копирование Git репозиториев
3. **Configuration Backup**: Сохранение настроек и конфигурации
## Monitoring и Logging
### Log Configuration
```yaml
environment:
- GITEA__log__MODE=file
- GITEA__log__LEVEL=Info
- GITEA__log__ROOT_PATH=/data/gitea/log
```
### Health Checks
```yaml
# Дополнительные health checks
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/api/healthz"]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
```
## Связанные файлы
- **[[Развертывание]]** - пошаговая установка и настройка
- **[[Администрирование]]** - управление пользователями и репозиториями
- **[[../Traefik Reverse Proxy/Конфигурации]]** - настройки интеграции с reverse proxy

View 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 - Администрирование]]** - управление и обслуживание

View File

@@ -0,0 +1,46 @@
# Git Service - Развертывание
## Пошаговая установка
Этот документ содержит инструкции по развертыванию Git Service с нуля.
## Предварительные требования
### Системные требования
*Минимальные требования к серверу*
### Зависимости
*Необходимое ПО и сервисы*
## Установка
### Шаг 1: Подготовка среды
*Подготовка окружения для развертывания*
### Шаг 2: Конфигурация
*Настройка файлов конфигурации*
### Шаг 3: Развертывание контейнеров
*Запуск Docker Compose*
### Шаг 4: Первоначальная настройка
*Настройка Gitea через веб-интерфейс*
## Интеграция с инфраструктурой
### Подключение к Traefik
*Настройка reverse proxy*
### Настройка SSL
*Конфигурация сертификатов*
## Тестирование
### Проверка доступности
*Тесты работоспособности сервиса*
### Создание тестового репозитория
*Валидация функциональности*
---
*Эта страница находится в разработке*

View File

@@ -0,0 +1,450 @@
## Мониторинг системы
### Проверка статуса сервисов
```bash
# Статус всех контейнеров
docker-compose ps
# Подробная информация о ресурсах
docker stats second_mind_gitea second_mind_webhook second_mind_nginx second_mind_db
# Проверка дискового пространства
df -h
du -sh /DOCKER/second-mind/
```
### Мониторинг логов
```bash
# Все логи системы
docker-compose logs -f
# Логи конкретного сервиса
docker-compose logs -f quartz-webhook
docker-compose logs -f gitea
docker-compose logs -f nginx
# Последние 100 строк с отметками времени
docker-compose logs --tail=100 -t quartz-webhook
```
### Health checks
```bash
# Проверка webhook сервиса
curl https://webhook.aepif.ru/health
# Проверка Gitea
curl -I https://git.aepif.ru
# Проверка статического сайта
curl -I https://notes.aepif.ru
# Проверка SSH доступа к Git
ssh -p 2222 git@git.aepif.ru
```
## Обслуживание
### Регулярные задачи
#### Очистка логов Docker
```bash
# Очистка логов всех контейнеров
docker system prune -f
# Очистка конкретного контейнера
docker logs second_mind_webhook 2>/dev/null | tail -1000 > temp.log
docker cp temp.log second_mind_webhook:/tmp/
docker exec second_mind_webhook truncate -s 0 /proc/1/fd/1
rm temp.log
```
#### Очистка старых образов
```bash
# Удаление неиспользуемых образов
docker image prune -f
# Удаление всех неиспользуемых ресурсов
docker system prune -a -f
```
### Перезапуск сервисов
```bash
# Перезапуск всей системы (с сохранением данных)
docker-compose restart
# Перезапуск конкретного сервиса
docker-compose restart quartz-webhook
# Полная пересборка webhook сервиса
docker-compose build quartz-webhook
docker-compose up -d quartz-webhook
# Graceful restart с ожиданием
docker-compose stop
docker-compose up -d
```
## Обновления
### Обновление Quartz
```bash
# Вход в контейнер webhook
docker exec -it second_mind_webhook bash
# Обновление Quartz репозитория
cd /quartz
git pull origin main
npm install
# Выход из контейнера
exit
# Перезапуск для применения изменений
docker-compose restart quartz-webhook
```
### Обновление образов Docker
```bash
# Скачивание новых версий
docker-compose pull
# Пересоздание контейнеров с новыми образами
docker-compose up -d
# Принудительное пересоздание всех сервисов
docker-compose up -d --force-recreate
```
### Обновление системы
```bash
# Обновление пакетов хост-системы
apt update && apt upgrade -y
# Обновление Docker и Docker Compose до последних версий
curl -fsSL https://get.docker.com | sh
pip3 install --upgrade docker-compose
```
## Диагностика проблем
### Проблемы с webhook'ами
#### Проверка получения webhook'ов
```bash
# Просмотр логов webhook сервиса в реальном времени
docker-compose logs -f quartz-webhook
# Проверка последних webhook'ов в Gitea
# Repository → Settings → Webhooks → Recent Deliveries
```
#### Ручной запуск сборки
```bash
# Вход в контейнер webhook
docker exec -it second_mind_webhook bash
# Ручной запуск процесса сборки
cd /webhook
node -e "
const { execSync } = require('child_process');
const fs = require('fs');
function buildSite() {
try {
console.log('Manual build started...');
execSync('cd /obsidian && git pull origin main || git pull origin master', { stdio: 'inherit' });
execSync('cd /quartz && npm run quartz build -- -d /obsidian', { stdio: 'inherit' });
execSync('rm -rf /public/*', { stdio: 'inherit' });
execSync('cp -r /quartz/public/* /public/', { stdio: 'inherit' });
console.log('Manual build completed!');
} catch (error) {
console.error('Build error:', error.message);
}
}
buildSite();
"
```
### Проблемы с Git
#### Проверка SSH подключения
```bash
# Тест SSH соединения
ssh -p 2222 -v git@git.aepif.ru
# Проверка SSH ключей в контейнере
docker exec -it second_mind_webhook ls -la /root/.ssh/
docker exec -it second_mind_webhook cat /root/.ssh/config
```
#### Сброс SSH ключей
```bash
# Пересоздание SSH ключей
rm ~/.ssh/id_ed25519*
ssh-keygen -t ed25519 -C "webhook-new" -f ~/.ssh/id_ed25519
# Добавление нового ключа в Gitea
cat ~/.ssh/id_ed25519.pub
# Копировать в Gitea → Settings → SSH Keys
# Перезапуск webhook контейнера
docker-compose restart quartz-webhook
```
### Проблемы с базой данных
#### Проверка подключения к PostgreSQL
```bash
# Вход в контейнер базы данных
docker exec -it second_mind_db psql -U gitea -d gitea
# Проверка размера базы
\l+
# Проверка активных подключений
SELECT * FROM pg_stat_activity;
# Выход
\q
```
#### Очистка базы данных (ОСТОРОЖНО!)
```bash
# Полная очистка и пересоздание базы
docker-compose stop gitea
docker exec -it second_mind_db psql -U gitea -c "DROP DATABASE gitea;"
docker exec -it second_mind_db psql -U gitea -c "CREATE DATABASE gitea;"
docker-compose start gitea
```
### Проблемы с Nginx
#### Проверка конфигурации
```bash
# Тест конфигурации Nginx
docker exec -it second_mind_nginx nginx -t
# Перезагрузка конфигурации без перезапуска
docker exec -it second_mind_nginx nginx -s reload
# Проверка файлов статического сайта
docker exec -it second_mind_nginx ls -la /usr/share/nginx/html/
```
## Безопасность
### Регулярная смена паролей
```bash
# Изменение паролей в .env файле
nano .env
# Применение новых переменных
docker-compose up -d --force-recreate
```
### Мониторинг доступа
```bash
# Просмотр логов Nginx для анализа трафика
docker-compose logs nginx | grep -E "GET|POST"
# Анализ логов Gitea для подозрительной активности
docker-compose logs gitea | grep -i "login\|failed"
# Проверка активных SSH сессий
docker exec -it second_mind_gitea who
```
### Обновления безопасности
```bash
# Регулярное обновление образов для получения security patches
docker-compose pull
docker-compose up -d
# Проверка уязвимостей в образах
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
-v $PWD/cache:/tmp/cache --name trivy aquasec/trivy \
image second-mind_quartz-webhook
```
## Backup и восстановление
### Создание резервных копий
```bash
# Backup базы данных
docker exec second_mind_db pg_dump -U gitea gitea > backup_db_$(date +%Y%m%d).sql
# Backup Git репозиториев (Gitea data)
docker run --rm -v second-mind_gitea_data:/data -v $(pwd):/backup alpine \
tar czf /backup/gitea_data_$(date +%Y%m%d).tar.gz -C /data .
# Backup конфигурационных файлов
tar czf config_backup_$(date +%Y%m%d).tar.gz \
docker-compose.yml Dockerfile nginx.conf .env webhook-server/
# Backup SSH ключей
cp -r ~/.ssh ssh_backup_$(date +%Y%m%d)
```
### Восстановление из резервных копий
```bash
# Остановка сервисов
docker-compose down
# Восстановление базы данных
docker-compose up -d db
sleep 10
docker exec -i second_mind_db psql -U gitea gitea < backup_db_YYYYMMDD.sql
# Восстановление Gitea data
docker run --rm -v second-mind_gitea_data:/data -v $(pwd):/backup alpine \
tar xzf /backup/gitea_data_YYYYMMDD.tar.gz -C /data
# Запуск всех сервисов
docker-compose up -d
```
## Автоматизация
### Cron задачи для автоматического обслуживания
```bash
# Добавление в crontab
crontab -e
# Ежедневный backup в 2:00
0 2 * * * cd /DOCKER/second-mind && docker exec second_mind_db pg_dump -U gitea gitea > backup_db_$(date +\%Y\%m\%d).sql
# Еженедельная очистка старых логов в воскресенье в 3:00
0 3 * * 0 docker system prune -f
# Ежемесячное обновление образов в первое воскресенье месяца в 4:00
0 4 1-7 * 0 cd /DOCKER/second-mind && docker-compose pull && docker-compose up -d
```
### Скрипт мониторинга
```bash
#!/bin/bash
# monitoring.sh - проверка состояния Second Mind
echo "=== Second Mind System Status ==="
echo "Date: $(date)"
echo
# Проверка контейнеров
echo "Container Status:"
docker-compose ps
echo
echo "Resource Usage:"
docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}" \
second_mind_gitea second_mind_webhook second_mind_nginx second_mind_db
echo
echo "Disk Usage:"
df -h /DOCKER/second-mind
echo
echo "Webhook Health:"
curl -s https://webhook.aepif.ru/health || echo "Webhook unreachable"
echo
echo "Recent Errors:"
docker-compose logs --tail=20 | grep -i error || echo "No recent errors"
```
### Настройка алертов
```bash
# Простой скрипт алертов через email (требует настройки sendmail/postfix)
#!/bin/bash
# alerts.sh
WEBHOOK_STATUS=$(curl -s -o /dev/null -w "%{http_code}" https://webhook.aepif.ru/health)
NOTES_STATUS=$(curl -s -o /dev/null -w "%{http_code}" https://notes.aepif.ru)
if [ "$WEBHOOK_STATUS" != "200" ]; then
echo "ALERT: Webhook service is down!" | mail -s "Second Mind Alert" admin@aepif.ru
fi
if [ "$NOTES_STATUS" != "200" ]; then
echo "ALERT: Notes website is down!" | mail -s "Second Mind Alert" admin@aepif.ru
fi
```
## Performance оптимизация
### Настройка ресурсов контейнеров
```yaml
# В docker-compose.yml добавить лимиты ресурсов
services:
gitea:
# ... другие настройки
deploy:
resources:
limits:
memory: 512M
cpus: '0.5'
reservations:
memory: 256M
cpus: '0.25'
quartz-webhook:
# ... другие настройки
deploy:
resources:
limits:
memory: 1G
cpus: '1.0'
reservations:
memory: 512M
cpus: '0.5'
```
### Оптимизация Nginx
```nginx
# Добавление в nginx.conf для улучшения производительности
http {
# ... существующие настройки
# Увеличение буферов
client_body_buffer_size 128k;
client_max_body_size 10m;
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
output_buffers 1 32k;
postpone_output 1460;
# Кэширование файлов
open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
}
```
Система администрирования настроена! Для дальнейшего изучения см. [[Мой сервер/Second Mind Setup/Обзор системы]]

View File

@@ -0,0 +1,301 @@
## Docker Compose
### Основной файл docker-compose.yml
```yaml
version: '3.8'
services:
gitea:
image: gitea/gitea:latest
container_name: second_mind_gitea
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=postgres
- GITEA__database__HOST=db:5432
- GITEA__database__NAME=gitea
- GITEA__database__USER=gitea
- GITEA__database__PASSWORD=sG7hZXBQDAtRab9A
- GITEA__server__SSH_DOMAIN=git.aepif.ru
- GITEA__server__SSH_PORT=2222
volumes:
- gitea_data:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
depends_on:
- db
networks:
- default
- proxy
labels:
- traefik.enable=true
# HTTP routing
- traefik.http.routers.gitea.rule=Host(`git.aepif.ru`)
- traefik.http.routers.gitea.tls.certresolver=letsencrypt
- traefik.http.services.gitea.loadbalancer.server.port=3000
# TCP routing for SSH
- traefik.tcp.routers.gitea-ssh.rule=HostSNI(`*`)
- traefik.tcp.routers.gitea-ssh.entrypoints=ssh
- traefik.tcp.services.gitea-ssh.loadbalancer.server.port=22
restart: unless-stopped
db:
image: postgres:14
container_name: second_mind_db
environment:
- POSTGRES_USER=gitea
- POSTGRES_PASSWORD=sG7hZXBQDAtRab9A
- POSTGRES_DB=gitea
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- default
restart: unless-stopped
nginx:
image: nginx:alpine
container_name: second_mind_nginx
volumes:
- ./quartz_build:/usr/share/nginx/html:ro
- ./nginx.conf:/etc/nginx/nginx.conf:ro
networks:
- default
- proxy
labels:
- traefik.enable=true
- traefik.http.routers.obsidian.rule=Host(`notes.aepif.ru`)
- traefik.http.routers.obsidian.tls.certresolver=letsencrypt
- traefik.http.routers.obsidian.middlewares=authelia@docker
- traefik.http.services.obsidian.loadbalancer.server.port=80
restart: unless-stopped
quartz-webhook:
build: .
container_name: second_mind_webhook
volumes:
- /root/.ssh:/root/.ssh
- ./obsidian_repo:/obsidian
- ./quartz_build:/public
environment:
- WEBHOOK_SECRET=MHtue5Zclp/dr69OFdwquGzCVHUGiEHP
- GITEA_REPO_URL=http://gitea:3000/admin/second-mind-aep.git
networks:
- default
- proxy
labels:
- traefik.enable=true
- traefik.http.routers.webhook.rule=Host(`webhook.aepif.ru`)
- traefik.http.routers.webhook.tls.certresolver=letsencrypt
- traefik.http.services.webhook.loadbalancer.server.port=3000
restart: unless-stopped
volumes:
gitea_data:
postgres_data:
networks:
proxy:
external: true
default:
driver: bridge
```
## Dockerfile для webhook сервиса
```dockerfile
FROM node:22
WORKDIR /app
# Установка Git и SSH клиента
RUN apt-get update && apt-get install -y git openssh-client && rm -rf /var/lib/apt/lists/*
# Создание .ssh директории и настройка SSH
RUN mkdir -p /root/.ssh && chmod 700 /root/.ssh
# Добавление SSH ключа для доступа к git.aepif.ru (будет примонтирован как volume)
# Настройка SSH для автоматического принятия ключей хоста
RUN echo "Host git.aepif.ru\n\tStrictHostKeyChecking no\n\tUserKnownHostsFile=/dev/null" > /root/.ssh/config
# Клонирование кастомного Quartz репозитория
RUN git clone ssh://git@git.aepif.ru:2222/aep/quartz.git /quartz
WORKDIR /quartz
RUN npm install
# Копирование и настройка webhook сервиса
COPY webhook-server/ /webhook/
WORKDIR /webhook
RUN npm install
EXPOSE 3000
WORKDIR /webhook
CMD ["node", "server.js"]
```
## Конфигурация Nginx
### nginx.conf
```nginx
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
server {
listen 80;
root /usr/share/nginx/html;
index index.html;
# Основная обработка запросов
location / {
try_files $uri $uri/ $uri.html =404;
}
# Кэширование статических файлов
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
}
}
```
## Переменные окружения
### .env файл
```bash
# Основной домен
DOMAIN=aepif.ru
# Настройки Gitea
GITEA_ADMIN_USER=admin
GITEA_ADMIN_PASSWORD=Creonila1
GITEA_DB_PASSWORD=sG7hZXBQDAtRab9A
GITEA_SECRET=okPnnPYzdKkkpO6oS8LqI5PHm7fH/OCl
# Webhook настройки
WEBHOOK_SECRET=MHtue5Zclp/dr69OFdwquGzCVHUGiEHP
# Репозиторий заметок
REPO_NAME=second-mind-aep
```
## Webhook сервис
### package.json
```json
{
"name": "quartz-webhook",
"version": "1.0.0",
"main": "server.js",
"dependencies": {
"express": "^4.18.0"
}
}
```
### server.js (основные моменты)
Webhook сервис включает:
- Обработчик POST `/webhook` для получения уведомлений от Gitea
- Health check endpoint GET `/health`
- Функцию автоматической сборки с этапами:
1. Проверка наличия Git репозитория
2. `git pull` для обновления локальной копии
3. Создание `index.md` если отсутствует
4. Запуск `npm run quartz build` с указанием исходной директории
5. Очистка целевой папки `/public`
6. Копирование собранного сайта из `/quartz/public`
## Настройки Quartz
### quartz.config.ts (основные параметры)
```typescript
const config: QuartzConfig = {
configuration: {
pageTitle: "AEP Second Mind",
pageTitleSuffix: "",
enableSPA: true,
enablePopovers: true,
locale: "ru-RU",
baseUrl: "notes.aepif.ru",
ignorePatterns: ["private", "templates", ".obsidian"],
defaultDateType: "modified",
theme: {
typography: {
header: "Schibsted Grotesk",
body: "Source Sans Pro",
code: "IBM Plex Mono",
},
},
},
// ... плагины и эмиттеры
}
```
## SSH конфигурация
### Настройка доступа к репозиториям
```bash
# В ~/.ssh/config
Host git.aepif.ru
Port 2222
User git
IdentityFile ~/.ssh/id_ed25519
StrictHostKeyChecking no
```
### Known hosts для автоматического принятия ключей
```bash
# Добавление отпечатков сервера
ssh-keyscan -p 2222 git.aepif.ru >> ~/.ssh/known_hosts
```
## Traefik Labels
### Основные метки для маршрутизации
```yaml
# HTTP с SSL
- traefik.http.routers.service-name.rule=Host(`domain.aepif.ru`)
- traefik.http.routers.service-name.tls.certresolver=letsencrypt
- traefik.http.services.service-name.loadbalancer.server.port=PORT
# TCP для SSH (только для Gitea)
- traefik.tcp.routers.gitea-ssh.rule=HostSNI(`*`)
- traefik.tcp.routers.gitea-ssh.entrypoints=ssh
- traefik.tcp.services.gitea-ssh.loadbalancer.server.port=22
# Middleware для защиты (Authelia)
- traefik.http.routers.obsidian.middlewares=authelia@docker
```
## Безопасность
### Уровни защиты
1. **Gitea**: Собственная авторизация пользователей
2. **Notes**: Защита через Authelia middleware
3. **Webhook**: Проверка секретного токена в запросах
4. **SSH**: Доступ только по ключам
5. **SSL**: Автоматические сертификаты через Let's Encrypt
### Секреты и пароли
Все чувствительные данные хранятся в:
- `.env` файле для Docker Compose
- Environment переменных контейнеров
- Примонтированных SSH ключах
Следующий документ: [[Мой сервер/Second Mind Setup/Развертывание]]

View File

@@ -0,0 +1,107 @@
## Описание
Second Mind - система автоматической публикации заметок Obsidian через Quartz с использованием Git-based workflow. Позволяет превращать локальные заметки в красивый статический сайт автоматически при каждом commit'е.
## Архитектура системы
```mermaid
graph TB
A[External Gitea Repository] --> B[Webhook Service]
B --> C[Quartz Builder]
C --> D[Static Files]
D --> E[Nginx Server]
F[Traefik Proxy] --> E
F --> B
subgraph "Second Mind Container"
B
C
end
subgraph "External Services"
A
F
end
```
## Основные компоненты
### External Git-сервер (Gitea)
- **Назначение**: Хранение и версионирование заметок
- **Домен**: `git.aepif.ru`
- **Особенности**: Отдельный сервис, SSH доступ на порту 2222, webhook'и при push
- **Репозиторий**: `http://gitea:3000/admin/second-mind-aep.git`
### Webhook Service
- **Назначение**: Автоматическая пересборка при изменениях
- **Домен**: `webhook.aepif.ru`
- **Технология**: Node.js + Express
- **Функции**:
- Получение webhook'ов от Gitea
- Обновление локальной копии репозитория
- Запуск сборки Quartz
- Копирование результата для Nginx
### Quartz Builder
- **Назначение**: Генерация статического сайта из Markdown
- **Репозиторий**: Кастомный форк `ssh://git@git.aepif.ru:2222/aep/quartz.git`
- **Особенности**: Поддержка Obsidian-flavored Markdown, граф связей, поиск
### Веб-сервер (Nginx)
- **Назначение**: Раздача статического контента
- **Домен**: `notes.aepif.ru`
- **Особенности**: Кэширование, сжатие, защита через Authelia
### Reverse Proxy (Traefik)
- **Назначение**: Маршрутизация трафика и SSL
- **Функции**: Автоматические SSL сертификаты, балансировка, middleware
## Workflow использования
1. **Создание заметок** в Obsidian локально
2. **Commit и push** изменений в Gitea репозиторий
3. **Автоматический webhook** от Gitea запускает пересборку
4. **Webhook сервис** обновляет локальную копию и запускает Quartz
5. **Quartz генерирует** обновленный статический сайт
6. **Nginx раздает** новый контент посетителям
## Домены и доступ
| Сервис | Домен | Описание | Защита |
|--------|-------|----------|---------|
| Git-сервер | `git.aepif.ru` | Интерфейс Gitea | Авторизация |
| Статический сайт | `notes.aepif.ru` | Опубликованные заметки | Authelia |
| Webhook | `webhook.aepif.ru` | API для автоматизации | Секретный токен |
## Структура файлов
```
/DOCKER/second-mind/
├── docker-compose.yml # Основная конфигурация (только Nginx + Webhook)
├── Dockerfile # Кастомный образ для webhook сервиса
├── nginx.conf # Конфигурация Nginx для статических файлов
├── webhook-server/ # Код webhook сервиса
│ ├── server.js # Node.js сервер для обработки webhooks
│ └── package.json # Зависимости Node.js
├── obsidian_repo/ # Локальная копия Git-репозитория
└── quartz_build/ # Собранные статические файлы для Nginx
```
**Примечание**: Gitea и PostgreSQL развернуты отдельно в `/DOCKER/git/`
## Преимущества решения
- **Автоматизация**: Публикация происходит автоматически при push
- **Версионирование**: Полная история изменений через Git
- **Безопасность**: Многоуровневая защита доступа
- **Производительность**: Статический сайт быстро загружается
- **Кастомизация**: Возможность настройки внешнего вида через Quartz
- **Поиск**: Полнотекстовый поиск по заметкам
- **Связи**: Визуализация связей между заметками
## Следующие шаги
Для развертывания системы изучите:
- [[Мой сервер/Second Mind Setup/Конфигурации]] - настройки всех сервисов
- [[Мой сервер/Second Mind Setup/Развертывание]] - пошаговая инструкция установки
- [[Мой сервер/Second Mind Setup/Администрирование]] - обслуживание и мониторинг

View File

@@ -0,0 +1,342 @@
## Предварительные требования
### Системные требования
- Ubuntu/Debian сервер с Docker и Docker Compose
- Доступ к интернету для скачивания образов
- Настроенный Traefik с сетью `proxy`
- Домен с настроенными DNS записями
### Необходимые поддомены
- `git.aepif.ru` → IP сервера
- `notes.aepif.ru` → IP сервера
- `webhook.aepif.ru` → IP сервера
## Пошаговая установка
### 1. Подготовка директорий
```bash
# Создание основной директории проекта
mkdir -p /DOCKER/second-mind
cd /DOCKER/second-mind
# Создание рабочих папок
mkdir -p webhook-server obsidian_repo quartz_build
# Установка прав доступа
chmod 755 obsidian_repo quartz_build
```
### 2. Настройка SSH ключей
```bash
# Генерация SSH ключа для webhook сервиса
ssh-keygen -t ed25519 -C "second-mind-webhook" -f ~/.ssh/id_ed25519
# Просмотр публичного ключа (для добавления в Gitea позже)
cat ~/.ssh/id_ed25519.pub
# Настройка SSH конфигурации
cat >> ~/.ssh/config << EOF
Host git.aepif.ru
Port 2222
User git
IdentityFile ~/.ssh/id_ed25519
StrictHostKeyChecking no
EOF
# Установка правильных прав
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
chmod 600 ~/.ssh/config
```
### 3. Создание конфигурационных файлов
#### Создание .env файла
```bash
cat > .env << 'EOF'
DOMAIN=aepif.ru
GITEA_ADMIN_USER=admin
GITEA_ADMIN_PASSWORD=Creonila1
GITEA_DB_PASSWORD=sG7hZXBQDAtRab9A
GITEA_SECRET=okPnnPYzdKkkpO6oS8LqI5PHm7fH/OCl
WEBHOOK_SECRET=MHtue5Zclp/dr69OFdwquGzCVHUGiEHP
REPO_NAME=second-mind-aep
EOF
```
#### Создание Dockerfile
```bash
cat > Dockerfile << 'EOF'
FROM node:22
WORKDIR /app
# Установка Git и SSH клиента
RUN apt-get update && apt-get install -y git openssh-client && rm -rf /var/lib/apt/lists/*
# Создание .ssh директории и настройка SSH
RUN mkdir -p /root/.ssh && chmod 700 /root/.ssh
# Настройка SSH для автоматического принятия ключей хоста
RUN echo "Host git.aepif.ru\n\tStrictHostKeyChecking no\n\tUserKnownHostsFile=/dev/null" > /root/.ssh/config
# Клонирование кастомного Quartz репозитория
RUN git clone ssh://git@git.aepif.ru:2222/aep/quartz.git /quartz
WORKDIR /quartz
RUN npm install
# Копирование и настройка webhook сервиса
COPY webhook-server/ /webhook/
WORKDIR /webhook
RUN npm install
EXPOSE 3000
WORKDIR /webhook
CMD ["node", "server.js"]
EOF
```
#### Создание nginx.conf
```bash
cat > nginx.conf << 'EOF'
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
server {
listen 80;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ $uri.html =404;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
}
}
EOF
```
#### Создание docker-compose.yml
```bash
# Скопировать содержимое из документа "Second Mind - Конфигурации"
# Файл слишком большой для вставки здесь
```
### 4. Настройка webhook сервиса
#### Создание package.json
```bash
cat > webhook-server/package.json << 'EOF'
{
"name": "quartz-webhook",
"version": "1.0.0",
"main": "server.js",
"dependencies": {
"express": "^4.18.0"
}
}
EOF
```
#### Копирование server.js
```bash
# Скопировать готовый server.js в webhook-server/server.js
# (используйте существующий файл)
```
### 5. Первый запуск
```bash
# Сборка и запуск всех сервисов
docker-compose up -d
# Проверка статуса
docker-compose ps
# Просмотр логов
docker-compose logs -f
```
### 6. Настройка Gitea
#### Первоначальная настройка
1. Открыть `https://git.aepif.ru`
2. Пройти первоначальную настройку:
- Database Type: PostgreSQL
- Host: `db:5432`
- Database Name: `gitea`
- Username: `gitea`
- Password: `sG7hZXBQDAtRab9A`
- SSH Server Domain: `git.aepif.ru`
- SSH Port: `2222`
- HTTP Port: `3000`
- Application URL: `https://git.aepif.ru/`
#### Добавление SSH ключа
1. Войти под админом (`admin` / `Creonila1`)
2. Settings → SSH / GPG Keys
3. Add Key → вставить содержимое `~/.ssh/id_ed25519.pub`
4. Сохранить
#### Создание репозитория заметок
1. New Repository
2. Repository Name: `second-mind-aep`
3. Visibility: Private
4. Initialize Repository: Yes
5. Create Repository
#### Создание репозитория Quartz
1. New Repository
2. Repository Name: `quartz`
3. Visibility: Private
4. **НЕ** инициализировать (будем форкать)
### 7. Форк и настройка Quartz
```bash
# Клонирование оригинального Quartz
git clone https://github.com/jackyzha0/quartz.git temp-quartz
cd temp-quartz
# Изменение remote на наш Gitea
git remote set-url origin ssh://git@git.aepif.ru:2222/aep/quartz.git
# Push в наш репозиторий
git push -u origin main
# Удаление временной папки
cd ..
rm -rf temp-quartz
```
### 8. Настройка webhook'а
1. В Gitea перейти в репозиторий `second-mind-aep`
2. Settings → Webhooks → Add Webhook → Gitea
3. Настройки:
- Target URL: `https://webhook.aepif.ru/webhook`
- HTTP Method: `POST`
- POST Content Type: `application/json`
- Secret: `MHtue5Zclp/dr69OFdwquGzCVHUGiEHP`
- Trigger On: `Push events`
- Active: ✓
4. Add Webhook
### 9. Первый тест
#### Создание тестовой заметки
```bash
# Клонирование репозитория заметок
git clone ssh://git@git.aepif.ru:2222/admin/second-mind-aep.git test-notes
cd test-notes
# Создание тестовой заметки
cat > README.md << 'EOF'
---
title: "Добро пожаловать"
---
# AEP Second Mind
Это главная страница базы знаний.
## Тестовая заметка
Проверка автоматической сборки.
EOF
# Commit и push
git add .
git commit -m "Initial test note"
git push origin main
```
#### Проверка работы
1. Проверить логи webhook сервиса:
```bash
docker-compose logs -f quartz-webhook
```
2. Проверить появление файлов:
```bash
ls -la quartz_build/
```
3. Открыть `https://notes.aepif.ru` и проверить сайт
## Возможные проблемы и решения
### SSH ключи не работают
```bash
# Проверка SSH подключения
ssh -p 2222 git@git.aepif.ru
# Если не работает, пересоздать ключи
rm ~/.ssh/id_ed25519*
ssh-keygen -t ed25519 -C "webhook" -f ~/.ssh/id_ed25519
# Добавить новый публичный ключ в Gitea
```
### Контейнер webhook не запускается
```bash
# Проверить логи сборки
docker-compose build quartz-webhook
# Проверить что SSH ключи примонтированы
docker exec -it second_mind_webhook ls -la /root/.ssh/
```
### Webhook не срабатывает
1. Проверить URL webhook'а в настройках Gitea
2. Проверить секретный токен
3. Посмотреть логи delivery в Gitea: Repository → Settings → Webhooks → Recent Deliveries
### 404 на главной странице
```bash
# Проверить наличие index.html
docker exec -it second_mind_nginx ls -la /usr/share/nginx/html/
# Если нет - создать index.md в репозитории
# или проверить работу webhook'а
```
## Завершение установки
После успешного развертывания у вас будет:
- ✅ Gitea сервер на `git.aepif.ru`
- ✅ Защищенный сайт заметок на `notes.aepif.ru`
- ✅ Автоматическая пересборка при каждом push'е
- ✅ Полнотекстовый поиск и граф связей
- ✅ SSL сертификаты для всех доменов
Следующий документ: [[Мой сервер/Second Mind Setup/Администрирование]]

View File

@@ -0,0 +1,29 @@
# Traefik Reverse Proxy - Администрирование
## Ежедневное администрирование Traefik
*Документация будет дополнена процедурами администрирования*
## Мониторинг Dashboard
*Работа с веб-интерфейсом Traefik*
## Управление SSL сертификатами
*Мониторинг и обновление сертификатов*
## Анализ логов
*Работа с логами доступа и ошибок*
## Добавление новых сервисов
*Процедура подключения новых сервисов*
## Troubleshooting
*Решение типовых проблем*
## Обновления
*Процедуры обновления Traefik*
## Backup и восстановление
*Резервное копирование конфигурации*
---
*Эта страница находится в разработке*

View File

@@ -0,0 +1,255 @@
# Traefik Reverse Proxy - Конфигурации
**[[Обзор системы|← Назад к обзору]]**
## Docker Compose конфигурация
### Основной файл: `/DOCKER/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 Configuration
- --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:
# Самонастройка для Dashboard
- 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
# HTTP to HTTPS redirect
- 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
```
## Command Line Arguments
### API Configuration
- `--api.dashboard=true` - Включает веб-интерфейс Dashboard
- `--api.insecure=true` - **⚠️ Небезопасно**: Доступ к API без аутентификации на порту 8080
### Provider Configuration
- `--providers.docker=true` - Включает Docker provider для автодискавери
- `--providers.docker.exposedbydefault=false` - Сервисы не экспонируются автоматически
- `--providers.docker.network=proxy` - Использует сеть `proxy` для подключения
### Entrypoints
- `--entrypoints.web.address=:80` - HTTP entrypoint
- `--entrypoints.websecure.address=:443` - HTTPS entrypoint
- `--entrypoints.ssh.address=:2222` - TCP entrypoint для SSH
### SSL Certificate Management
- `--certificatesresolvers.letsencrypt.acme.email=your_email@aepif.ru` - Email для Let's Encrypt
- `--certificatesresolvers.letsencrypt.acme.storage=/data/acme.json` - Файл хранения сертификатов
- `--certificatesresolvers.letsencrypt.acme.tlschallenge=true` - Использует TLS-01 challenge
## Port Mapping
| Внешний порт | Внутренний порт | Назначение |
|--------------|-----------------|------------|
| 80 | 80 | HTTP трафик (редирект на HTTPS) |
| 443 | 443 | HTTPS трафик |
| 8080 | 8080 | Dashboard (небезопасно) |
| 2222 | 2222 | SSH для Git operations |
## Volume Configuration
### traefik_data
- **Назначение**: Хранение SSL сертификатов и конфигурации
- **Содержимое**:
- `acme.json` - Let's Encrypt сертификаты
- Конфигурационные файлы Traefik
### Docker Socket
```yaml
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
```
- **Назначение**: Доступ к Docker API для service discovery
- **Режим**: Read-only для безопасности
## Network Configuration
### Proxy Network
```yaml
networks:
proxy:
name: proxy
driver: bridge
```
**Важно**: Эта сеть должна быть создана заранее и подключена ко всем сервисам, которые должны быть доступны через Traefik.
## Labels Configuration
### Self-configuration для Dashboard
```yaml
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
```
### HTTP to HTTPS Redirect
```yaml
labels:
- 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
```
## Dynamic Configuration Examples
### Типичные labels для сервиса
```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.services.service-name.loadbalancer.server.port=80
```
### С Authelia middleware
```yaml
labels:
- traefik.enable=true
- traefik.http.routers.protected-service.rule=Host(`protected.aepif.ru`)
- traefik.http.routers.protected-service.tls.certresolver=letsencrypt
- traefik.http.routers.protected-service.middlewares=authelia@docker
- traefik.http.services.protected-service.loadbalancer.server.port=80
```
### TCP routing (для SSH)
```yaml
labels:
- traefik.enable=true
- traefik.tcp.routers.git-ssh.rule=HostSNI(`*`)
- traefik.tcp.routers.git-ssh.entrypoints=ssh
- traefik.tcp.services.git-ssh.loadbalancer.server.port=22
```
## SSL/TLS Configuration
### ACME Settings
- **Challenge Type**: TLS-01 (HTTP challenge через порт 443)
- **Storage**: `/data/acme.json` внутри контейнера
- **Email**: Обязательно указать для уведомлений о истечении сертификатов
- **Domains**: Автоматически из Host rules в labels
### Security Headers (рекомендуемые)
```yaml
labels:
- traefik.http.middlewares.security-headers.headers.frameDeny=true
- traefik.http.middlewares.security-headers.headers.sslRedirect=true
- traefik.http.middlewares.security-headers.headers.browserXssFilter=true
- traefik.http.middlewares.security-headers.headers.contentTypeNosniff=true
- traefik.http.middlewares.security-headers.headers.forceSTSHeader=true
- traefik.http.middlewares.security-headers.headers.stsIncludeSubdomains=true
- traefik.http.middlewares.security-headers.headers.stsPreload=true
- traefik.http.middlewares.security-headers.headers.stsSeconds=31536000
```
## Middleware Configuration
### Redirect to HTTPS
```yaml
- traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https
```
### Rate Limiting
```yaml
- traefik.http.middlewares.rate-limit.ratelimit.burst=100
- traefik.http.middlewares.rate-limit.ratelimit.average=50
```
### CORS Headers
```yaml
- traefik.http.middlewares.cors.headers.accessControlAllowOriginList=*
- traefik.http.middlewares.cors.headers.accessControlAllowMethods=GET,OPTIONS,PUT,POST,DELETE
- traefik.http.middlewares.cors.headers.accessControlAllowHeaders=*
```
## Environment Variables
Traefik поддерживает конфигурацию через переменные окружения:
```yaml
environment:
- TRAEFIK_API_DASHBOARD=true
- TRAEFIK_PROVIDERS_DOCKER=true
- TRAEFIK_ENTRYPOINTS_WEB_ADDRESS=:80
- TRAEFIK_ENTRYPOINTS_WEBSECURE_ADDRESS=:443
- TRAEFIK_CERTIFICATESRESOLVERS_LETSENCRYPT_ACME_EMAIL=your_email@aepif.ru
```
## Безопасность конфигурации
### ⚠️ Проблемы безопасности в текущей конфигурации
1. **Dashboard без аутентификации**: `--api.insecure=true` делает Dashboard доступным без авторизации
2. **Docker socket**: Доступ к Docker API может быть использован для эскалации привилегий
### 🔒 Рекомендации по улучшению безопасности
1. Убрать `--api.insecure=true` и настроить аутентификацию для Dashboard
2. Добавить middleware для Dashboard:
```yaml
- traefik.http.routers.traefik.middlewares=authelia@docker
```
3. Использовать Docker socket proxy для ограничения доступа к Docker API
## Связанные файлы
- **[[Развертывание]]** - инструкции по первоначальной настройке
- **[[Администрирование]]** - управление и мониторинг
- **[[../Authelia Authentication/Конфигурации]]** - настройка middleware аутентификации

View 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 - Администрирование]]** - обслуживание и мониторинг

View File

@@ -0,0 +1,325 @@
# Traefik Reverse Proxy - Развертывание
**[[Обзор системы|← Назад к обзору]]**
## Предварительные требования
### Системные требования
- **Docker**: версия 20.10+
- **Docker Compose**: версия 2.0+
- **Операционная система**: Linux (Ubuntu 20.04+ рекомендуется)
- **RAM**: минимум 512MB для Traefik
- **Дисковое пространство**: 1GB для логов и SSL сертификатов
### Сетевые требования
- **Публичный IP**: Для Let's Encrypt ACME challenge
- **Открытые порты**: 80, 443, 2222 (для SSH Git), 8080 (Dashboard)
- **Доступ к DNS**: Для настройки A-записей
### DNS настройка
Перед развертыванием настройте DNS записи:
```bash
# A записи для всех поддоменов
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
```
## Создание сети proxy
### Шаг 1: Создание Docker network
```bash
# Создаем external сеть для всех сервисов
docker network create proxy
# Проверяем создание
docker network ls | grep proxy
```
### Важность proxy сети
Сеть `proxy` позволяет:
- Изолировать веб-трафик от внутренних сетей
- Автоматически подключать сервисы к Traefik
- Обеспечить безопасность через сегментацию сети
## Подготовка файлов
### Шаг 2: Создание директории
```bash
# Создаем рабочую директорию
mkdir -p /docker/reverse-proxy
cd /docker/reverse-proxy
```
### Шаг 3: Создание 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 Configuration - ЗАМЕНИТЕ EMAIL!
- --certificatesresolvers.letsencrypt.acme.email=YOUR_EMAIL@domain.com
- --certificatesresolvers.letsencrypt.acme.storage=/data/acme.json
- --certificatesresolvers.letsencrypt.acme.tlschallenge=true
# Logging
- --log.level=INFO
- --accesslog=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
# Global HTTP to HTTPS redirect
- 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:
external: true
```
**⚠️ Важно**: Замените `YOUR_EMAIL@domain.com` на свой email адрес!
## Первый запуск
### Шаг 4: Запуск Traefik
```bash
# Переходим в директорию с конфигурацией
cd /docker/reverse-proxy
# Запускаем в detached режиме
docker-compose up -d
# Проверяем статус
docker-compose ps
```
### Шаг 5: Проверка логов
```bash
# Смотрим логи запуска
docker-compose logs -f traefik
# Должны увидеть сообщения о:
# - Создании routers и services
# - Успешном запуске API
# - Подключении к Docker provider
```
## Проверка работоспособности
### Шаг 6: Тестирование Dashboard
```bash
# Проверяем доступность Dashboard
curl -I http://YOUR_SERVER_IP:8080
# Проверяем HTTPS редирект
curl -I http://traefik.aepif.ru
# Должен вернуть 301/302 редирект на HTTPS
```
### Шаг 7: Проверка SSL сертификатов
```bash
# Проверяем получение SSL сертификата
curl -I https://traefik.aepif.ru
# Проверяем детали сертификата
openssl s_client -connect traefik.aepif.ru:443 -servername traefik.aepif.ru | openssl x509 -noout -text
```
## Настройка firewall
### Шаг 8: Конфигурация UFW (Ubuntu)
```bash
# Разрешаем необходимые порты
sudo ufw allow 22/tcp # SSH
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw allow 2222/tcp # Git SSH
sudo ufw allow 8080/tcp # Dashboard (временно)
# Включаем firewall
sudo ufw enable
# Проверяем статус
sudo ufw status
```
## Мониторинг и диагностика
### Проверка состояния
```bash
# Статус контейнера
docker ps | grep traefik
# Использование ресурсов
docker stats traefik --no-stream
# Логи в реальном времени
docker logs traefik -f
```
### Dashboard интерфейс
- **URL**: http://YOUR_SERVER_IP:8080 или https://traefik.aepif.ru
- **Разделы**:
- **HTTP Routers**: Настроенные маршруты
- **HTTP Services**: Backend сервисы
- **HTTP Middlewares**: Промежуточное ПО
- **TLS**: SSL сертификаты
## Устранение проблем
### Проблема: Сертификат не получается
```bash
# Проверяем DNS записи
nslookup traefik.aepif.ru
# Проверяем доступность порта 443 извне
telnet YOUR_SERVER_IP 443
# Смотрим логи ACME
docker logs traefik | grep acme
```
### Проблема: Dashboard недоступен
```bash
# Проверяем, что контейнер запущен
docker ps | grep traefik
# Проверяем порт
netstat -tulpn | grep :8080
# Проверяем логи
docker logs traefik --tail 50
```
### Проблема: Сервисы не обнаруживаются
```bash
# Проверяем сеть proxy
docker network inspect proxy
# Проверяем подключение Traefik к Docker socket
docker logs traefik | grep docker
# Проверяем labels сервисов
docker inspect SERVICE_CONTAINER | grep -A 10 Labels
```
## Безопасность после установки
### Рекомендации по безопасности
1. **Закрыть порт 8080**: Настроить аутентификацию для Dashboard
2. **Ограничить доступ к Docker socket**: Использовать Docker socket proxy
3. **Настроить логирование**: Централизованный сбор логов
4. **Мониторинг**: Настроить алерты на проблемы с сертификатами
### Закрытие небезопасного Dashboard
После настройки всех сервисов, отредактируйте docker-compose.yml:
```yaml
command:
- --api.dashboard=true
# Убираем эту строку:
# - --api.insecure=true
```
И добавьте middleware для аутентификации:
```yaml
labels:
- traefik.http.routers.traefik.middlewares=authelia@docker
```
## Следующие шаги
После успешного развертывания Traefik:
1. **[[../Authelia Authentication/Развертывание]]** - Настройка аутентификации
2. **[[../Git Service/Развертывание]]** - Развертывание Git сервера
3. **[[../Second Mind Setup/Развертывание]]** - Настройка системы заметок
4. **[[Администрирование]]** - Ежедневное управление
## Автоматизация развертывания
### Скрипт развертывания
```bash
#!/bin/bash
# deploy-traefik.sh
set -e
echo "🚀 Развертывание Traefik Reverse Proxy"
# Проверяем Docker
if ! command -v docker &> /dev/null; then
echo "❌ Docker не установлен"
exit 1
fi
# Создаем сеть
docker network create proxy 2>/dev/null || echo "Сеть proxy уже существует"
# Создаем директорию
mkdir -p /docker/reverse-proxy
cd /docker/reverse-proxy
# Запрашиваем email
read -p "📧 Введите email для Let's Encrypt: " ACME_EMAIL
# Создаем docker-compose.yml с введенным email
cat > docker-compose.yml << EOF
# Вставляем конфигурацию с заменой email
EOF
# Запускаем
docker-compose up -d
echo "✅ Traefik развернут успешно"
echo "🌐 Dashboard: http://$(curl -s ipinfo.io/ip):8080"
```
## Связанные документы
- **[[Конфигурации]]** - детальные настройки конфигурации
- **[[Администрирование]]** - управление и мониторинг
- **[[../Authelia Authentication/Развертывание]]** - следующий шаг развертывания

View File

@@ -0,0 +1,120 @@
# 🖥️ Серверы
Документация по всем серверам и сервисам инфраструктуры aepif.ru.
## 🏗️ Архитектура инфраструктуры
```mermaid
graph TB
A[User] --> B[Traefik Reverse Proxy]
B --> C[Authelia Authentication]
C --> D[Second Mind - notes.aepif.ru]
C --> E[Git Service - git.aepif.ru]
B --> F[Webhook Service - webhook.aepif.ru]
subgraph "Docker Network: proxy"
B
C
D
E
F
end
subgraph "Databases"
G[Redis - Sessions]
H[PostgreSQL - Gitea]
end
C --> G
E --> H
```
## 📋 Активные сервисы
| Сервис | Домен | Статус | Документация |
|--------|-------|--------|--------------|
| Traefik | traefik.aepif.ru | 🟢 | [[Traefik Reverse Proxy/Обзор системы]] |
| Authelia | auth.aepif.ru | 🟢 | [[Authelia Authentication/Обзор системы]] |
| Second Mind | notes.aepif.ru | 🟢 | [[Second Mind Setup/Обзор системы]] |
| Git Service | git.aepif.ru | 🟢 | [[Git Service/Обзор системы]] |
| Webhook | webhook.aepif.ru | 🟢 | - |
## 📖 Документация по сервисам
### 🌐 [Traefik Reverse Proxy](Traefik%20Reverse%20Proxy/)
Центральный реверс-прокси для маршрутизации трафика и SSL терминации.
- [[Traefik Reverse Proxy/Обзор системы|Обзор системы]]
- [[Traefik Reverse Proxy/Конфигурации|Конфигурации]]
- [[Traefik Reverse Proxy/Развертывание|Развертывание]]
- [[Traefik Reverse Proxy/Администрирование|Администрирование]]
### 🔐 [Authelia Authentication](Authelia%20Authentication/)
Централизованная система аутентификации и авторизации.
- [[Authelia Authentication/Обзор системы|Обзор системы]]
- [[Authelia Authentication/Конфигурации|Конфигурации]]
- [[Authelia Authentication/Развертывание|Развертывание]]
- [[Authelia Authentication/Администрирование|Администрирование]]
### 📝 [Second Mind Setup](Second%20Mind%20Setup/)
Система автоматической публикации заметок Obsidian через Quartz.
- [[Second Mind Setup/Обзор системы|Обзор системы]]
- [[Second Mind Setup/Конфигурации|Конфигурации]]
- [[Second Mind Setup/Развертывание|Развертывание]]
- [[Second Mind Setup/Администрирование|Администрирование]]
### 🗂️ [Git Service](Git%20Service/)
Git-сервер на базе Gitea для хранения кода и заметок.
- [[Git Service/Обзор системы|Обзор системы]]
- [[Git Service/Конфигурации|Конфигурации]]
- [[Git Service/Развертывание|Развертывание]]
- [[Git Service/Администрирование|Администрирование]]
## 🔧 Быстрые команды
### Мониторинг всех сервисов
```bash
# Проверка всех контейнеров
docker ps
# Логи всех сервисов
docker-compose logs -f
# Статус системы
curl -I https://notes.aepif.ru
curl -I https://git.aepif.ru
curl -I https://auth.aepif.ru
```
### Обновление системы
```bash
# Обновление всех образов
docker-compose pull
docker-compose up -d
# Перезапуск отдельного сервиса
docker-compose restart SERVICE_NAME
```
## 📊 Мониторинг
### Health Checks
```dataview
TABLE status as "Статус", version as "Версия", file.mtime as "Обновлено"
FROM "⚙️ Техническое/🖥️ Серверы"
WHERE file.name != "index"
SORT file.mtime DESC
```
### Структура файлов сервера
```
/DOCKER/
├── traefik/ # Reverse Proxy
├── auth/ # Authelia + Redis
├── git/ # Gitea + PostgreSQL
├── notes/ # Second Mind Quartz
└── webhook/ # Webhook Service
```
---
[[⚙️ Техническое/index|← Назад к техническому разделу]]