goph-keeper

module
v0.0.0-...-6aec01b Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 17, 2023 License: GPL-3.0

README

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.

Directories

Path Synopsis
cmd
internal
keepctl/app
Package app implements keepctl service.
Package app implements keepctl service.
keepctl/infra/grpcconn
Package grpcconn implements handy wrap around gRPC client connection.
Package grpcconn implements handy wrap around gRPC client connection.
keepctl/infra/logger
Package logger configures logging facility.
Package logger configures logging facility.
keeper/app
Package app implements keeper service.
Package app implements keeper service.
keeper/config
Package config provides configuration for the keeper service.
Package config provides configuration for the keeper service.
keeper/controller/grpc/v1
Package v1 implements v1 version of the gRPC API.
Package v1 implements v1 version of the gRPC API.
keeper/infra/grpcserver
Package grpcserver implements handy wrap around gRPC server to group common settings and tasks inside single entity.
Package grpcserver implements handy wrap around gRPC server to group common settings and tasks inside single entity.
keeper/infra/logger
Package logger configures logging facility.
Package logger configures logging facility.
keeper/repo
Package repo provides facade to data stored in external sources.
Package repo provides facade to data stored in external sources.
libraries/creds
Package creds provides common types for wrapping sensitive data in the application.
Package creds provides common types for wrapping sensitive data in the application.
pkg

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL