Skip to content

Go Blog - основа для быстрой сборки backend-сервисов на основе Go Fiber + Gorm + Postgres + PGAdmin + Swagger + Prometheus + Grafana

Notifications You must be signed in to change notification settings

XanderMoroz/goBlog

Repository files navigation

Go Blog

Screen Shot

                                                                Python Contributions welcome License

📋 Table of Contents

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

Go Blog - готовая основа для быстрой сборки backend-сервисов на основе Go Fiber, Интерфейс API Swagger. База данных - PostgreSQL. ORM - GORM. Мониторинг - Prometheus. Метрики хоста - Node Exporter. Визуализация - Grafana. Сборка - Docker Compose.

Screen Shot

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

HTTP Method HTTP request Description
[POST] /api/v1/register Регистрация нового пользователя
[POST] /api/v1/login Авторизация пользователя про логину и паролю
[GET] /api/v1/current_user Извлечение авторизованного пользователя по токену
[GET] /api/v1/logout Разлогиниться
[POST] /categories Создать новую категорию
[GET] /categories Извлечь все категории
[POST] /categories/add_article Добавить статью в категорию
[POST] /categories/remove_article Удалить статью из категории
[GET] /articles Извлечь все статьи
[POST] /articles Создать новую статью
[GET] /articles/:id Извлечь статью по ID
[PUT] /articles/:id Обновить статью (только для авторов)
[DELETE] /articles/:id Удалить статью (только для авторов)
[POST] /article/{id}/add_comment Добавить комментарий к статье

База данных содержит 5 моделей:

  • Автор публикации (User),
  • Категория статьи (Category),
  • Cтатья (Article),
  • Статья в категории (ArticleCategory),
  • Комментарий (Comment)
ДЕТАЛЬНАЯ СХЕМА БАЗЫ ДАННЫХ

Screen Shot

  1. Подготовка проекта

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

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

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

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

# JWT SETTINGS

JWT_SECRET_KEY="SomeAppSecret"

# POSTGRES SETTINGS
DB_DRIVER=postgres
DB_USER=xander
DB_PASSWORD=password
DB_NAME=go_blog_api
DB_PORT=5432
DB_HOST=go_blog-postgres # С docker
# DB_HOST=127.0.0.1 # Без docker

# POSTGRES TEST SETTINGS
TEST_DB_HOST=go_blog-postgres_test # С docker
# TEST_DB_HOST=127.0.0.1 # Без docker
TEST_DB_DRIVER=postgres
TEST_API_SECRET=some_secret
TEST_DB_USER=xander
TEST_DB_PASSWORD=password
TEST_DB_NAME=go_blog_api_test
TEST_DB_PORT=5432

# PGADMIN SETTINGS
[email protected]
PGADMIN_DEFAULT_PASSWORD=pwd123
  1. Запуск проекта с Docker compose

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

sudo docker-compose up --build

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

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

Как подключить PGAdmin4 к БД?
  1. Заходим в браузер по адресу http://127.0.0.1:5050 и вводим данные из .env
[email protected]
PGADMIN_DEFAULT_PASSWORD=pwd123

Screen Shot

  1. Заполняем Имя сервера (обязательно)

Screen Shot

  1. Извлекаем адрес хоста, на котором расположилась БД Postgres
sudo docker inspect go_blog_postgres | grep IPAddress

Screen Shot

  1. Заполняем Адрес сервера данными хоста БД Postgres и пароль (из файла .env)

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 -g main.go

About

Go Blog - основа для быстрой сборки backend-сервисов на основе Go Fiber + Gorm + Postgres + PGAdmin + Swagger + Prometheus + Grafana

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published