Skip to content

Выпускной проект курса "Продвинутый Go разработчик" (Яндекс Практикум)

License

Notifications You must be signed in to change notification settings

alkurbatov/goph-keeper

Repository files navigation

goph-keeper

Выпускной проект курса "Продвинутый Go разработчик" (Яндекс Практикум). Содержит следующие компоненты:

  • сервис хранения секретов (keeper);
  • клиент командной строки (keepctl);
  • библиотека для работы с сервисом по gRPC API (goph).

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

├── .dockerignore
├── .gitignore
├── .github
│   └── workflows            # конфигурация Github CI
├── .golangci-lint
├── .pre-commit-config.yaml
├── LICENSE
├── Makefile
├── README.md
├── api
│   └── proto                # спецификация gRPC API
├── build
│   └── docker               # конфигурация для упаковки проекта в docker
├── cmd
├── deployments              # конфигурация для разворачивания проекта
│   ├── docker-compose.yaml
│   ├── keepctl.env          # переменные окружения для клиента keepctl, используются для локального запуска клиента
│   └── keeper.env           # переменные окружения для сервиса keeper, используются для запуска в docker compose
├── dist                     # скомпилированные исполняемые файлы клиента и сервера
├── docs
│   ├── api                  # документация gRPC API
│   └── arch                 # архитектура проекта
├── internal
│   ├── libraries            # общие внутренние библиотеки клиента и сервера
│   │   ├── creds            # общие типы безопасного использования паролей внутри приложения
│   │   └── gophtest         # набор фикстур и хэлперов для тестирования проекта, не предполагает покрытие тестами
│   ├── keepctl              # код клиента командной строки
│   │   ├── app              # реализация клиентского приложения keepctl
│   │   ├── config           # конфигурация клиента
│   │   ├── controller       # слой контроллеров по чистой архитектуре, содержит реализацию интерфейса командной строки
│   │   ├── entity           # ядро по чистой архитектуре, содержит основные структуры данных
│   │   ├── infra            # внешний инфраструктурный слой по чистой архитектуре, инкапсулирует клиентское соединение gRPC и т.п.
│   │   ├── repo             # слой репозиториев по чистой архитектуре, фасад для работы с данными из внешних источников
│   │   └── usecase          # слой бизнес логики по чистой архитектуре
│   └── keeper               # код сервиса хранения паролей
│       ├── app              # основная точка входа для запуска сервиса keeper
│       ├── config           # конфигурация сервиса
│       ├── controller       # слой контроллеров по чистой архитектуре, содержит реализацию API хэндлеров
│       ├── entity           # ядро по чистой архитектуре, содержит основные структуры данных
│       ├── infra            # внешний инфраструктурный слой по чистой архитектуре, инкапсулирует базу данных, gRPC сервер и т.п.
│       ├── repo             # слой репозиториев по чистой архитектуре, фасад для работы с данными из внешних источников
│       └── usecase          # слой бизнес логики по чистой архитектуре
├── migrations               # код миграций для формирования базы данных
├── pkg
│   └── goph                 # библиотека для работы с сервисом keeper по gRPC API
├── scripts                  # вспомогательные скрипты для сборки и работы проекта
├── ssl                      # конфигурация для выпуска SSL сертификатов
├── go.mod
└── go.sum

Запуск сервиса keeper

  1. Установите docker compose по инструкции.
  2. Сгенерируйте сертификаты для клиента и сервера:
    make ssl
  3. Для сборки и запуска сервиса с помощью docker compose выполните команду:
    make run
  4. Для остановки сервиса выполните команду:
    make stop

Конфигурация сервиса keeper

Переменные окружения для сервиса keeper описаны в файле deployments/keeper.env.
(!) Опции командной строки имеют более высокий приоритет по сравнению с переменными окружения.

Сборка клиента

  1. Сгенерируйте сертификаты для клиента и сервера:
    make ssl
  2. Соберите клиент для всех поддерживаемых платформ, выполнив команду:
    make keepctl

Разработка

Генерация кода для gRPC

  1. Установите protoc по инструкции.
  2. Установите плагины для gRPC:
    make install-tools

Контроль качества кода

  1. Установите gofumpt (улучшенное форматирование кода) по инструкции.
  2. Установите линтер golangci-lint по инструкции.
  3. Установите линтер shellcheck (проверка bash-скриптов) по инструкции.
  4. Установите линтер hadolint (проверка Dockerfile) по инструкции.
  5. Установите pre-commit (запуск линтеров перед коммитом) по инструкции, затем выполните команду:
    make install-tools

Работа с базой данных

  1. Для ручной работы с миграциями (вне контейнера docker) установите утилиту golang-migrate:
    go install -tags "postgres" github.com/golang-migrate/migrate/v4/cmd/migrate@latest
  2. Для применения миграций выполните команду:
    migrate -database ${DATABASE_DSN} -path ./migrations up
  3. Для возврата базы данных в первоначальное состояние выполните команду:
    migrate -database ${DATABASE_DSN} -path ./migrations down -all

Юнит-тестирование

Для обновления снапшотов, использующихся в юнит тестах, выполните команду:

make update-snapshots

Лицензия

Copyright (c) 2023 Alexander Kurbatov

Лицензировано по GPLv3.

About

Выпускной проект курса "Продвинутый Go разработчик" (Яндекс Практикум)

Resources

License

Stars

Watchers

Forks