Skip to content

Основа для быстрой сборки backend-сервисов на основе Gorilla Mux + MongoDB + MongoExpress + Swagger + Prometheus + Grafana

Notifications You must be signed in to change notification settings

XanderMoroz/monGorilla

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

monGorilla

                                                         

Python Contributions welcome License

📋 Table of Contents

  1. 🌀 Описание проекта
  2. 📈 Краткая документация API
  3. 💾 База данных
  4. 🚀 Инструкция по установке
  5. ©️ License

monGorilla - готовая основа для быстрой сборки backend-сервисов на основе Gorilla Mux, Авторизация - JWT. База данных - Mongo. Интерфейс Базы данных - MongoExpress. Интерфейс API Swagger. Мониторинг - Prometheus. Метрики хоста - Node Exporter. Визуализация - Grafana. Сборка - Docker Compose.

Screen Shot

Работа с моделями осуществляется по следующим эндпоинтам:

HTTP Method HTTP request Description
[POST] /api/users/register Регистрация нового пользователя
[POST] /api/users/login Авторизация пользователя про e-mail и паролю
[GET] /api/users/current_user Извлечение авторизованного пользователя по токену
[GET] /api/recipes Извлечь все рецепты авторизованного пользователя
[POST] /api/recipes Создать новый рецепт (только для авторизованного пользователя)
[GET] /api/recipes/{id} Извлечь рецепт по ID
[PUT] /api/recipes/{id} Обновить рецепт по ID (только для авторов)
[DELETE] /api/recipes/{id} Удалить рецепт по ID (только для авторов)

База данных содержит 2 модели: - Пользователь (User) - Рецепт (Recipe)

ДЕТАЛЬНАЯ ИНФОРМАЦИЯ О МОДЕЛЯХ
  1. Пользователь (User)
type UserModel struct {
	Id          primitive.ObjectID `json:"id,omitempty"`            
	Password    string             `json:"password,omitempty"`      //Пароль
	FirstName   string             `json:"first_name,omitempty"`    //Имя
	LastName    string             `json:"last_name,omitempty"`     //Фамилия
	PhoneNumber string             `json:"phone_number,omitempty"`  //Номер телефона
	Email       string             `json:"email,omitempty"`         //Email
}
  1. Рецепт (Recipe)
// Represents user Recipe
type RecipeModel struct {
	Id          primitive.ObjectID `json:"id,omitempty"`
	Title       string             `json:"title,omitempty"`         //Название рецепта
	Stages      []StageModel       `json:"stages,omitempty"`        //Список шагов изготовления
	AuthorEmail string             `json:"author_email,omitempty"`  //Email автора рецепта
}

// Represents user model
type StageModel struct {
	Title       string            `json:"title,omitempty"`          //Название шага
	Description string            `json:"description,omitempty"`    //Описание шага
	Ingredients []IngredientModel `json:"ingredients,omitempty"`    //Список ингредиентов
}

// Represents user model
type IngredientModel struct {
	Subject   string `json:"subject,omitempty"`                     //Название ингридиента
	Condition string `json:"condition,omitempty"`                   //Условие, количество, вес и др
}
  1. Подготовка проекта

1.1 Клонируете репозиторий

git clone https://github.com/XanderMoroz/monGorilla.git

1.2 В корневой папки создаете файл .env

1.3 Заполняете файл .env по следующему шаблону:

################################################################################
# APP Config
# Automatically setup app variables
################################################################################
APP_ENV="DEV"
APP_PORT=":8080"
SERVER_ADDRESS=""
ACCESS_TOKEN_SECRET="nduenvrvneu8957hhoiif932ejcp92nf9ne7h3p2982jijpkm2[jw[8h"
ACCESS_TOKEN_EXPIRY_HOUR=1
################################################################################
# MONGO Config
# Automatically create database and user
################################################################################
MONGO_DB_DRIVER="mongodb"
MONGO_ROOT_USERNAME="xander"
MONGO_ROOT_PASSWORD="rndm-pass"
MONGO_DB_NAME="mongorilla"
MONGO_DB_PORT="27017"
# MONGO_DB_HOST="127.0.0.1"   # Без docker 
MONGO_DB_HOST="mongo"       # С docker
################################################################################
# MONGO_EXPRESS Config
# Automatically create database client credentials
################################################################################
MONGO_EXPRESS_USERNAME="admin"
MONGO_EXPRESS_PASSWORD="rndm-pass"
MONGO_EXPRESS_SERVER="mongodb"

  1. Запуск проекта с Docker compose

2.1 Создаете и запускаете контейнер через терминал:

sudo docker-compose up --build

2.3 Сервисы доступны для эксплуатации:

  1. Дополнительные настройки

Как получить доступ к БД через Mongo-Express?
  1. Заходим в браузер по адресу Mongo-Express и вводим данные по умолчанию:
MONGO_EXPRESS_USERNAME=admin
MONGO_EXPRESS_PASSWORD=pass

Screen Shot

  1. Готово

Screen Shot

Как подключить Grafana к Prometheus?
  1. Заходим в браузер по адресу http://127.0.0.1:3000 и вводим данные по умолчанию:
  • Email or username: admin
  • Password: admin

Screen Shot

  1. После система потребует придумать новый пароль (это необязательно).

Screen Shot

  1. Мы авторизованы в сервисе Grafana. Добавим новое подключение...

Screen Shot

  1. Ищем в списке Prometheus и кликаем по нему

Screen Shot

  1. Теперь его нужно настроить

Screen Shot

  1. Извлекаем адрес хоста, на котором расположился Prometheus
sudo docker inspect prometheus | grep IPAddress

Screen Shot

  1. Заполняем Адрес сервера Prometheus данными хоста

Screen Shot

  1. Готово
Как сделать авто-генерацию документации Swagger?
  1. Устанавливаете swag
go get github.com/swaggo/swag/cmd/swag

3.2 Устанавливаете GOPATH

export PATH=$PATH:$(go env GOPATH)/bin

3.3 Генерируете новый вариант документации

swag init

About

Основа для быстрой сборки backend-сервисов на основе Gorilla Mux + MongoDB + MongoExpress + Swagger + Prometheus + Grafana

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published