vault backup: 2025-08-04 15:31:52

This commit is contained in:
Andrey Epifancev
2025-08-04 15:31:52 +04:00
parent e46521074c
commit 4ae1b8e621

View File

@@ -0,0 +1,299 @@
# Единое приложение Hugo + Webhook
## 1. Концепция
### 1.1 Общая идея
Объединение webhook сервера и Hugo в одно приложение на Go, которое обрабатывает Git webhook и автоматически пересобирает сайт при изменениях.
### 1.2 Преимущества единого приложения
- **Простота развертывания**: Один контейнер вместо нескольких
- **Эффективность ресурсов**: Меньше накладных расходов
- **Простота мониторинга**: Единая точка наблюдения
- **Атомарность операций**: Все операции в одном процессе
- **Простота отладки**: Единый лог и контекст
## 2. Архитектура
### 2.1 Компонентная диаграмма
```mermaid
graph TB
A[Git Webhook] --> B[HTTP Server]
B --> C[Webhook Handler]
C --> D[Git Manager]
D --> E[Hugo Builder]
E --> F[File System]
F --> G[Nginx Reload]
subgraph "Единое приложение"
B
C
D
E
end
subgraph "Внешние сервисы"
A
F
G
end
```
### 2.2 Структура приложения
**Основные модули:**
- **HTTP Server**: Обработка входящих запросов
- **Webhook Handler**: Валидация и обработка webhook
- **Git Manager**: Клонирование и обновление репозитория
- **Hugo Builder**: Сборка статического сайта
- **File Manager**: Управление файловой системой
- **Nginx Controller**: Перезагрузка веб-сервера
## 3. Флоу обработки
### 3.1 Основной флоу
```mermaid
graph TB
A[Получение webhook] --> B[Валидация подписи]
B --> C[Проверка ветки]
C --> D[Обновление репозитория]
D --> E[Проверка изменений]
E --> F[Сборка Hugo]
F --> G[Копирование файлов]
G --> H[Перезагрузка Nginx]
H --> I[Отправка уведомления]
subgraph "Обработка ошибок"
J[Retry логика]
K[Fallback механизмы]
L[Логирование ошибок]
end
E --> J
F --> K
H --> L
```
### 3.2 Детальный флоу
**Этап 1: Получение и валидация**
- Получение webhook от Git (GitHub, GitLab, Gitea)
- Валидация подписи webhook
- Проверка типа события (push, merge)
- Проверка целевой ветки
**Этап 2: Работа с репозиторием**
- Клонирование репозитория (если первый раз)
- Pull последних изменений
- Проверка наличия изменений в контенте
- Очистка временных файлов
**Этап 3: Сборка сайта**
- Проверка конфигурации Hugo
- Запуск Hugo сборки
- Обработка ошибок сборки
- Оптимизация статических файлов
**Этап 4: Развертывание**
- Резервное копирование текущего сайта
- Копирование новых файлов
- Проверка целостности файлов
- Перезагрузка Nginx
**Этап 5: Уведомления**
- Отправка статуса в Telegram
- Логирование результата
- Обновление метрик
## 4. Конфигурация
### 4.1 Основные параметры
**Git настройки:**
- URL репозитория
- Ветка для отслеживания
- SSH ключи или токены
- Webhook секрет
**Hugo настройки:**
- Путь к исходникам
- Путь для сборки
- Конфигурационный файл
- Параметры оптимизации
**Системные настройки:**
- Путь к Nginx конфигурации
- Команда перезагрузки
- Пути для статических файлов
- Настройки логирования
### 4.2 Переменные окружения
**Обязательные:**
- GIT_REPOSITORY_URL
- GIT_WEBHOOK_SECRET
- HUGO_SOURCE_PATH
- HUGO_OUTPUT_PATH
- NGINX_RELOAD_COMMAND
**Опциональные:**
- TELEGRAM_BOT_TOKEN
- TELEGRAM_CHAT_ID
- LOG_LEVEL
- METRICS_PORT
## 5. Обработка ошибок
### 5.1 Типы ошибок
**Git ошибки:**
- Недоступность репозитория
- Конфликты при merge
- Проблемы с аутентификацией
- Отсутствие изменений
**Hugo ошибки:**
- Ошибки в конфигурации
- Проблемы с шаблонами
- Ошибки в Markdown файлах
- Недостаток ресурсов
**Системные ошибки:**
- Проблемы с файловой системой
- Ошибки Nginx
- Проблемы с сетью
- Недостаток места на диске
### 5.2 Стратегии восстановления
**Retry логика:**
- Автоматические повторные попытки
- Экспоненциальная задержка
- Максимальное количество попыток
- Graceful degradation
**Fallback механизмы:**
- Использование последней успешной сборки
- Откат к предыдущей версии
- Уведомления администратора
- Логирование для анализа
## 6. Мониторинг и метрики
### 6.1 Ключевые метрики
**Производительность:**
- Время обработки webhook
- Время сборки Hugo
- Размер генерируемых файлов
- Частота обновлений
**Надежность:**
- Количество успешных сборок
- Количество ошибок по типам
- Время восстановления
- Доступность сервиса
**Ресурсы:**
- Использование CPU
- Использование памяти
- Использование диска
- Сетевой трафик
### 6.2 Алерты
**Критические:**
- Сборка не завершилась в течение 5 минут
- Ошибки webhook валидации
- Проблемы с файловой системой
- Недоступность сайта
**Предупреждения:**
- Высокое время сборки
- Большой размер файлов
- Частые ошибки
- Низкое место на диске
## 7. Безопасность
### 7.1 Webhook безопасность
- Валидация подписи webhook
- Проверка IP адресов
- Rate limiting
- Логирование подозрительной активности
### 7.2 Системная безопасность
- Запуск от непривилегированного пользователя
- Ограничение доступа к файлам
- Шифрование чувствительных данных
- Регулярные обновления
### 7.3 Git безопасность
- Использование SSH ключей
- Проверка подписи коммитов
- Ограничение доступа к репозиторию
- Мониторинг изменений
## 8. Развертывание
### 8.1 Docker контейнер
- Многоэтапная сборка
- Минимальный образ на Alpine
- Включение Hugo и Git
- Оптимизация размера
### 8.2 Конфигурация
- Environment variables
- Конфигурационные файлы
- Volume mounts для данных
- Health checks
### 8.3 Orchestration
- Docker Compose для разработки
- Kubernetes для production
- Автоматическое масштабирование
- Rolling updates
## 9. Преимущества единого приложения
### 9.1 Операционные преимущества
- **Простота развертывания**: Один контейнер
- **Упрощенный мониторинг**: Единая точка наблюдения
- **Атомарность**: Все операции в одном процессе
- **Отладка**: Единый лог и контекст
### 9.2 Технические преимущества
- **Эффективность ресурсов**: Меньше накладных расходов
- **Производительность**: Прямая связь между компонентами
- **Надежность**: Меньше точек отказа
- **Безопасность**: Единая точка контроля
### 9.3 Преимущества разработки
- **Простота кода**: Единая кодовая база
- **Тестирование**: Интеграционные тесты
- **Версионирование**: Единая версия приложения
- **Документация**: Единая документация
## 10. Сравнение с раздельными сервисами
### 10.1 Единое приложение vs Микросервисы
**Единое приложение:**
- ✅ Простота развертывания
- ✅ Эффективность ресурсов
- ✅ Простота отладки
- ✅ Атомарность операций
- ❌ Менее гибкое масштабирование
- ❌ Сложность при росте функциональности
**Микросервисы:**
- ✅ Гибкое масштабирование
- ✅ Независимое развитие
- ✅ Отказоустойчивость
- ❌ Сложность развертывания
- ❌ Накладные расходы
- ❌ Сложность отладки
### 10.2 Рекомендация
Для текущих потребностей (один пользователь, VPS с ограниченными ресурсами) единое приложение является оптимальным решением.