Skip to content

Казначей - система для хранения секретов, которые можно сжечь после прочтения

Notifications You must be signed in to change notification settings

vodolaz095/purser

Repository files navigation

purser

Казначей - система для хранения секретов, которые можно сжечь после прочтения. Практической пользы не несёт, но на её основе можно объяснить, как компоновать микросервис систему на Go.

Постановка задачи

  1. Создать микросервис, который реализует 3 метода
    • Создать некую запись в базе данных
    • Получить запись по первичному ключу
    • Удалить запись по первичному ключу
  2. Использовать чистую архитектуру
  3. Для сохранения данных используется паттерн репозитория и несколько реализаций (sql, nosql и т.д.)
  4. На транспортном уровне использовать HTTP и GRPC (использовать кодогенерацию по готовым описаниям сервиса)
  5. Реализовать логгирование
  6. Реализовать трейсинг с использованием OpenTelemetry
  7. Всё можно запустить локально с помощью docker compose

Структура проекта

Бизнес логика реализована в internal/service. Есть 2 сервиса - CRUD для секретов и счётчики для метрик. CRUD для секретов работает с репозиторием секретов (internal/service/repository/), который абстрагирует все взаимодействия с базой данных внутри. Есть несколько реализаций репозитория - memory,redis,mysql,postgresql. Все репозитории должны реализовывать интерфейс internal/service/repository/SecretRepo. И интерфейс internal/service/repository/SecretRepo используется сервисом internal/service/SecretService в работе. На транспортном уровне в internal/transport реализованы несколько транспортов, дёргающих методы сервиса. Это grpc, http, prune (очистка старых записей по таймеру), watchdog (проверка работоспособности сервиса с помощью systemd watchdog). Транспортный уровень вызывает методы сервиса, а сервис сделан так, чтобы его методы можно было вызвать из разных контекстов, и при этом оно сохраняло бы работоспособность.

Как запустить?

  1. Сделать файл .env по аналогии с env.example - название ключей окружения можно посмотреть в файле config/config.go

  2. Выбрать нужную базу данных - mysql, redis, postgresql.

  3. Запустить сервис с помощью docker compose up

  4. На http://localhost:3000/ будет слушать HTTP сервер

  5. На http://localhost:3001/ будет слушать GRPC сервер

  6. Запустите клиенты для генерации секретов

    make cli_curl
    make cli_grpc
    make cli_http_client
    
  7. JWT токен можно сгенерировать тут - https://jwt.io/. Алгоритм - HS512, "sub" - любая строка, секрет по умолчанию - super_secret_for_purser

About

Казначей - система для хранения секретов, которые можно сжечь после прочтения

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages