Выпускной проект курса "Продвинутый 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
- Установите
docker compose
по инструкции. - Сгенерируйте сертификаты для клиента и сервера:
make ssl
- Для сборки и запуска сервиса с помощью
docker compose
выполните команду:make run
- Для остановки сервиса выполните команду:
make stop
Переменные окружения для сервиса keeper
описаны в файле deployments/keeper.env
.
(!) Опции командной строки имеют более высокий приоритет по сравнению с переменными окружения.
- Сгенерируйте сертификаты для клиента и сервера:
make ssl
- Соберите клиент для всех поддерживаемых платформ, выполнив команду:
make keepctl
- Установите
protoc
по инструкции. - Установите плагины для
gRPC
:make install-tools
- Установите
gofumpt
(улучшенное форматирование кода) по инструкции. - Установите линтер
golangci-lint
по инструкции. - Установите линтер
shellcheck
(проверкаbash
-скриптов) по инструкции. - Установите линтер
hadolint
(проверкаDockerfile
) по инструкции. - Установите
pre-commit
(запуск линтеров перед коммитом) по инструкции, затем выполните команду:make install-tools
- Для ручной работы с миграциями (вне контейнера docker) установите утилиту
golang-migrate
:go install -tags "postgres" github.com/golang-migrate/migrate/v4/cmd/migrate@latest
- Для применения миграций выполните команду:
migrate -database ${DATABASE_DSN} -path ./migrations up
- Для возврата базы данных в первоначальное состояние выполните команду:
migrate -database ${DATABASE_DSN} -path ./migrations down -all
Для обновления снапшотов, использующихся в юнит тестах, выполните команду:
make update-snapshots
Copyright (c) 2023 Alexander Kurbatov
Лицензировано по GPLv3.