- Удален старый main.go - Удален старый Dockerfile - Удален старый Makefile - Удален старый README.md - Удален docker-compose.yml - Удален .air.toml - Удалены пустые директории (deployments, docs, scripts, tests) - Переименованы файлы без суффикса -refactored - Очищена структура проекта
Go Webhook Server - Рефакторенная версия
Рефакторенная версия webhook сервера с разделением на пакеты и улучшенной архитектурой.
🏗️ Новая структура проекта
go-webhook-server/
├── cmd/
│ └── server/
│ └── main.go # Точка входа приложения
├── internal/
│ ├── config/
│ │ └── config.go # Конфигурация приложения
│ ├── handlers/
│ │ ├── webhook.go # Обработчик webhook'ов
│ │ └── health.go # Health check обработчик
│ ├── services/
│ │ ├── build.go # Основной сервис сборки
│ │ ├── git.go # Git операции
│ │ ├── quartz.go # Сборка Quartz
│ │ ├── files.go # Файловые операции
│ │ └── types.go # Общие типы
│ └── middleware/
│ └── logging.go # HTTP логирование
├── pkg/
│ └── logger/
│ └── logger.go # Интерфейс логгера
├── api/
│ └── routes.go # Определение роутов
├── configs/
│ └── config.yaml # YAML конфигурация
├── tests/ # Тесты
├── scripts/ # Скрипты
└── docs/ # Документация
🔧 Основные улучшения
1. Разделение ответственности
- Config - управление конфигурацией
- Services - бизнес-логика
- Handlers - HTTP обработчики
- Middleware - промежуточное ПО
- API - определение роутов
2. Интерфейсы и абстракции
type GitService interface {
UpdateRepository() error
IsRepositoryExists() bool
}
type QuartzService interface {
BuildSite() error
InstallDependencies() error
}
type BuildService interface {
BuildSite() BuildResult
}
3. Dependency Injection
// Инициализация сервисов
gitService := services.NewGitService(cfg, log)
quartzService := services.NewQuartzService(cfg, log)
fileService := services.NewFileService(cfg, log)
buildService := services.NewBuildService(cfg, log, gitService, quartzService, fileService)
4. Улучшенное логирование
- Структурированное логирование
- Request ID для отслеживания
- Уровни логирования
- Контекстная информация
5. Middleware
- RequestIDMiddleware - уникальный ID для каждого запроса
- ResponseTimeMiddleware - время ответа
- LoggingMiddleware - детальное логирование HTTP
🚀 Запуск
Локально
cd cmd/server
go run main.go
Сборка
go build -o go-webhook-server cmd/server/main.go
Docker
docker build -t go-webhook-server .
docker run -p 3000:3000 go-webhook-server
📝 Конфигурация
Переменные окружения
PORT=3000
OBSIDIAN_PATH=/obsidian
QUARTZ_PATH=/quartz
PUBLIC_PATH=/public
GIT_BRANCH=main
GIT_REMOTE=origin
SERVER_TIMEOUT=30
YAML конфигурация
server:
port: "3000"
timeout: 30
paths:
obsidian: "/obsidian"
quartz: "/quartz"
public: "/public"
git:
branch: "main"
remote: "origin"
🧪 Тестирование
Unit тесты
go test ./internal/...
Integration тесты
go test ./tests/integration/...
🔄 API эндпоинты
POST /webhook
Запускает процесс сборки сайта.
Ответ:
{
"status": "accepted",
"message": "Build process started",
"request_id": "20250127103000-abc123",
"timestamp": "2025-01-27T10:30:00Z"
}
GET /health
Проверка состояния сервиса.
Ответ:
{
"status": "ok",
"timestamp": "2025-01-27T10:30:00Z",
"service": "go-webhook-server",
"version": "1.0.0",
"request_id": "20250127103000-abc123"
}
📊 Мониторинг
Заголовки ответа
X-Request-ID- уникальный ID запросаX-Response-Time- время ответа
Логирование
- Все HTTP запросы логируются с деталями
- Request ID для отслеживания цепочки запросов
- Структурированные логи в формате JSON
🚀 Преимущества новой архитектуры
- Тестируемость - легко писать unit тесты
- Переиспользование - компоненты можно использовать в других проектах
- Читаемость - код легче понимать и поддерживать
- Расширяемость - проще добавлять новую функциональность
- Соответствие стандартам - структура соответствует Go best practices
- Dependency Injection - легко заменять реализации
- Интерфейсы - четкое разделение контрактов
🔮 Планы развития
- Добавление метрик Prometheus
- Конфигурация через файлы
- Graceful shutdown для сборки
- Очередь сборок
- Уведомления о результатах
- API для мониторинга сборок
- Аутентификация webhook'ов
- Rate limiting
- OpenAPI документация
📚 Зависимости
- Go 1.20+
- Gin - веб-фреймворк
- go-git/v5 - Git клиент
- logrus - логирование
- YAML - конфигурация (планируется)
Description
Languages
Go
77.2%
Makefile
17.8%
Dockerfile
5%