Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Современный веб-сервер для управления пользователями на Go

Notifications You must be signed in to change notification settings

XanderMoroz/poirot

Repository files navigation

Poirot

Современный веб-сервер на Go с полной системой observability, включающей аутентификацию, RBAC, 2FA, логирование, трассировку и мониторинг.

🚀 Быстрый старт

1. Клонирование и настройка

git clone <repository-url>
cd poirot

2. Создание .env файла

# База данных
POSTGRES_URL=postgres://postgres:postgres@localhost:5432/poirot?sslmode=disable
REDIS_ADDR=localhost:6379

# Безопасность
SESSION_SECRET=your-32-byte-secret-key-here
COOKIE_SECURE=false
COOKIE_SAMESITE=lax

# Observability
JAEGER_ENDPOINT=http://localhost:14268/api/traces
METRICS_ENABLED=true
TRACING_ENABLED=true
LOG_LEVEL=info

3. Запуск с observability

# Запуск полного стека с мониторингом
make full-up

# Или только приложения
make dev

📊 Observability Stack

Проект включает полную систему observability:

🔍 Логирование (ELK Stack)

  • Elasticsearch - хранение и индексация логов
  • Logstash - обработка и парсинг логов
  • Kibana - визуализация и поиск логов

Доступ: http://localhost:5601

📈 Метрики (Prometheus + Grafana)

  • Prometheus - сбор и хранение метрик
  • Grafana - дашборды и визуализация
  • Node Exporter - системные метрики
  • Redis/PostgreSQL Exporters - метрики БД

Доступ:

🔍 Трассировка (Jaeger)

  • Jaeger - распределенная трассировка
  • OpenTelemetry - стандартизированная инструментация

Доступ: http://localhost:16686

🚨 Алерты (Alertmanager)

  • Alertmanager - управление уведомлениями
  • Настроенные правила для критических событий

Доступ: http://localhost:9093

🛠️ Команды управления

# Observability
make observability-up      # Запуск стека мониторинга
make observability-down    # Остановка стека мониторинга
make observability-logs    # Просмотр логов

# Полный стек
make full-up              # Запуск приложения + observability
make full-down            # Остановка всего

# Разработка
make dev                  # Запуск только приложения
make run                  # Запуск локально
make build                # Сборка приложения

# База данных
make migrate-up           # Применение миграций
make migrate-down         # Откат миграций

# Тестирование
make test                 # Запуск тестов
make test-coverage        # Тесты с покрытием
make lint                 # Линтинг кода
make fmt                  # Форматирование

# Очистка
make clean                # Очистка всех данных

📋 API Документация

Swagger UI

Полная документация API доступна по адресу: http://localhost:8080/swagger/index.html

Основные endpoints

Аутентификация

  • POST /api/v1/user/register - Регистрация пользователя
  • POST /api/v1/user/login - Вход в систему
  • POST /api/v1/user/logout - Выход из системы
  • GET /api/v1/user/me - Информация о текущем пользователе

TOTP (2FA)

  • GET /api/v1/user/2fa/setup - Настройка двухфакторной аутентификации
  • POST /api/v1/user/2fa/verify - Верификация TOTP кода

Управление пользователями

  • GET /api/v1/user/users - Список пользователей (требует права user.list)

HTML формы

  • GET /register - Форма регистрации
  • GET /auth/login - Форма входа
  • GET /auth/logout - Форма выхода
  • GET /password/reset - Форма сброса пароля

Системные

  • GET /healthz - Проверка состояния сервера
  • GET /metrics - Prometheus метрики

🔐 Безопасность

Аутентификация и авторизация

  • Сессии в Redis с настройками безопасности
  • RBAC система с ролями: user, moderator, admin
  • TOTP двухфакторная аутентификация
  • Rate Limiting по IP и пользователю

Защита данных

  • Пароли хешируются с помощью Argon2id
  • CSRF защита с токенами
  • Secure Headers для защиты от XSS, clickjacking
  • Session Security с HttpOnly, Secure, SameSite cookies

Мониторинг безопасности

  • Отслеживание неудачных попыток входа
  • Мониторинг rate limiting
  • Алерты на подозрительную активность

📊 Метрики и мониторинг

HTTP метрики

  • http_requests_total - Общее количество запросов
  • http_request_duration_seconds - Время ответа
  • http_request_size_bytes - Размер запросов
  • http_response_size_bytes - Размер ответов

Бизнес метрики

  • user_registrations_total - Регистрации пользователей
  • user_logins_total - Входы в систему
  • active_users_current - Активные пользователи
  • totp_setups_total - Настройки TOTP
  • totp_verifications_total - Верификации TOTP

Системные метрики

  • database_connections_active - Активные соединения с БД
  • redis_connections_active - Активные соединения с Redis
  • rbac_permission_checks_total - Проверки разрешений
  • rate_limit_hits_total - Срабатывания rate limiting

Grafana дашборды

  1. Poirot Application Overview - Обзор приложения
  2. System Metrics - Системные метрики
  3. Security Metrics - Метрики безопасности

🔍 Трассировка

OpenTelemetry интеграция

  • Автоматическая трассировка HTTP запросов
  • Трассировка операций с базой данных
  • Трассировка Redis операций
  • Корреляция с логами через Request ID

Jaeger UI

  • Визуализация трассировок
  • Анализ производительности
  • Поиск по трассировкам
  • Анализ зависимостей

📝 Логирование

Структурированные логи

  • JSON формат для легкого парсинга
  • Request ID для корреляции запросов
  • Уровни логирования: DEBUG, INFO, WARN, ERROR, FATAL
  • Ротация логов с сжатием

Kibana возможности

  • Поиск по логам
  • Фильтрация по уровням, сервисам, пользователям
  • Визуализация трендов
  • Алерты на ошибки

🚨 Алерты

Критические алерты

  • Недоступность сервиса
  • Высокий уровень ошибок (>10%)
  • Проблемы с базой данных
  • Проблемы с Redis

Предупреждения

  • Высокое время ответа (>1s)
  • Высокое использование CPU (>80%)
  • Высокое использование памяти (>85%)
  • Много неудачных попыток входа

Бизнес алерты

  • Аномально высокая регистрация
  • Низкая активность пользователей

🏗️ Архитектура

Компоненты

┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   Application   │    │   Observability │    │   Infrastructure│
│                 │    │                 │    │                 │
│ • Gin HTTP      │    │ • Prometheus    │    │ • PostgreSQL    │
│ • Auth/RBAC     │    │ • Grafana       │    │ • Redis         │
│ • TOTP          │    │ • Jaeger        │    │ • Docker        │
│ • Rate Limiting │    │ • ELK Stack     │    │ • Makefile      │
└─────────────────┘    └─────────────────┘    └─────────────────┘

Middleware цепочка

  1. Recovery - обработка паник
  2. RequestID - генерация уникальных ID
  3. Security Headers - защитные заголовки
  4. Tracing - трассировка запросов
  5. Metrics - сбор метрик
  6. Sessions - управление сессиями
  7. CSRF - защита от CSRF
  8. Rate Limiting - ограничение запросов

🧪 Тестирование

Запуск тестов

make test                 # Все тесты
make test-coverage        # С покрытием кода

Покрытие

  • Хеширование паролей
  • Валидация TOTP
  • RBAC кеширование
  • HTTP handlers

🔧 Конфигурация

Переменные окружения

Основные

  • HTTP_ADDR - Адрес HTTP сервера (по умолчанию: :8080)
  • GIN_MODE - Режим Gin (debug/release)
  • LOG_LEVEL - Уровень логирования

База данных

  • POSTGRES_URL - URL подключения к PostgreSQL
  • REDIS_ADDR - Адрес Redis сервера
  • REDIS_PASSWORD - Пароль Redis
  • REDIS_DB - Номер базы данных Redis

Безопасность

  • SESSION_SECRET - Секретный ключ для сессий
  • SESSION_NAME - Имя cookie сессии
  • SESSION_TTL - Время жизни сессии
  • COOKIE_DOMAIN - Домен для cookies
  • COOKIE_SECURE - Безопасные cookies
  • COOKIE_SAMESITE - SameSite для cookies

Rate Limiting

  • RATE_LIMIT_IP - Лимит по IP (формат: количество-период)
  • RATE_LIMIT_USER - Лимит по пользователю

Observability

  • JAEGER_ENDPOINT - Endpoint Jaeger для трассировки
  • METRICS_ENABLED - Включить метрики
  • TRACING_ENABLED - Включить трассировку

🚀 Развертывание

Docker Compose

# Полный стек
make full-up

# Только observability
make observability-up

# Только приложение
make dev

Production

  1. Настройте переменные окружения
  2. Используйте внешние сервисы (PostgreSQL, Redis)
  3. Настройте SSL/TLS
  4. Используйте reverse proxy (nginx)
  5. Настройте мониторинг и алерты

📚 Дополнительные ресурсы

Документация

Мониторинг

🤝 Вклад в проект

  1. Fork репозитория
  2. Создайте feature branch
  3. Внесите изменения
  4. Добавьте тесты
  5. Создайте Pull Request

📄 Лицензия

MIT License

About

Современный веб-сервер для управления пользователями на Go

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published