Go Blog - готовая основа для быстрой сборки backend-сервисов на основе Go Fiber
, Интерфейс API Swagger
. База данных - PostgreSQL
. ORM - GORM
.
Мониторинг - Prometheus
. Метрики хоста - Node Exporter
. Визуализация - Grafana
. Сборка - Docker Compose
.
Работа с моделями осуществляется по следующим эндпоинтам:
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)
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
2.1 Создаете и запускаете контейнер через терминал:
sudo docker-compose up --build
2.3 Сервисы доступны для эксплуатации:
- Приложение Go
Fiber APP
: http://127.0.0.1:8080/ - API + Документация
Swagger
: http://127.0.0.1:8080/swagger/index.html - Интерфейс для управления БД Postgres
PGAdmin4
: http://127.0.0.1:5050 - Система мониторинга (сбора метрик)
Prometheus
: http://127.0.0.1:9090 - Извлекает метрики хоста (cpu-, memory-usage) для мониторинга
Node Exporter
: http://127.0.0.1:9100/ - Аналитическая система (визиализирует данные в виде дашбордов)
Grafana
: http://127.0.0.1:3000
Как подключить PGAdmin4 к БД?
- Заходим в браузер по адресу http://127.0.0.1:5050 и вводим данные из .env
[email protected]
PGADMIN_DEFAULT_PASSWORD=pwd123
- Заполняем Имя сервера (обязательно)
- Извлекаем адрес хоста, на котором расположилась БД Postgres
sudo docker inspect go_blog_postgres | grep IPAddress
- Заполняем Адрес сервера данными хоста БД Postgres и пароль (из файла .env)
- Готово
Как подключить Grafana к Prometheus?
- Заходим в браузер по адресу http://127.0.0.1:3000 и вводим данные по умолчанию:
- Email or username: admin
- Password: admin
- После система потребует придумать новый пароль (это необязательно).
- Мы авторизованы в сервисе Grafana. Добавим новое подключение...
- Ищем в списке Prometheus и кликаем по нему
- Теперь его нужно настроить
- Извлекаем адрес хоста, на котором расположился Prometheus
sudo docker inspect prometheus | grep IPAddress
- Заполняем Адрес сервера Prometheus данными хоста
- Готово
Как сделать авто-генерацию документации Swagger?
- Устанавливаете 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