Skip to content

Новостной веб портал "GoodNews" с публикациями на основе Django + PostgreSQL + pgAdmin4 + Celery + RabbitMQ + Prometheus + Grafana

Notifications You must be signed in to change notification settings

XanderMoroz/GoodNews-DRF

Repository files navigation

GitHub Readme Stats

                                                          Python Contributions welcome License

📋 Table of Contents

  1. 🌀 Описание проекта
  2. 🌟 Возможности сервиса
  3. 📈 Описание схемы БД
  4. 🚀 Инструкция по установке
  5. 💯 Тесты
  6. ©️ License

GoodNews представляет собой веб-портал на основе Django с публикациями статьями и блогами. Благодаря своим функциям GoodNews выступает в качестве площадки, на которой современные писатели могут свою аудиторию и найти вдохновение в чужих работах.

База данных - PostgreSQL. ORM - DjangoORM. Асинхронные задачи - Celery. Брокер сообщений - RabbitMQ. Интерфейс - Jinja2, HTML, CSS, JavaScript. Контейнеризация - Docker-Compose. Зависимости - Poetry. Линтер - Flake8. Мониторинг - Prometheus. Метрики хоста - Node Exporter. Визуализация - Grafana.

Screen Shot

ЛЕНТА СТАТЕЙ

Каждый пользователь имеет доступ к ленте статей. Лента представляет собой несколько случайных статей и список аннотаций, отсортированный по убыванию даты публикации. Каждая аннотация ведет на отдельную страницу с детальной информацией о статье. На этой странице пользователь получает доступ к полному тексту статьи и список комментариев других пользователей. Авторизованные пользователи могут добавлять свои комментарии.

ПОЛНОТЕКСТОВЫЙ ПОИСК ПО КАТАЛОГУ СТАТЕЙ

Для удобства пользователя реализован полнотекстовый поиск по названию и тексту статьи.

ЛИЧНЫЙ КАБИНЕТ(ЛК)

После авторизации пользователь может устанавливать картинку профиля (аватар). Также в личном кабинете можно просматривать и редактировать список категорий статей, на которые пользователь подписан.

УПРАВЛЕНИЕ ПУБЛИКАЦИЯМИ

В личном кабинете каждый авторизованный пользователь может создавать/редактировать/удалять собственные статьи. При создании статьи требуется уточнить название, написать текст и выбрать одну или несколько категорий, к которым относится статья.

ПОДПИСКА НА КАТЕГОРИИ

Авторизованый пользователь получает доступ к странице категорий. Страница категорий представляет собой список категорий статей существующих на портале. К каждой категории приводится статистическая сводка: о количестве доступных публикаций, количество комментариев ко всем статьям категории, количествo подписчиков.

База данных содержит 6 моделей: Автор публикации (Author), Категория статьи (Category), Cтатья (Post), Статья в категории (PostCategory), Подписчик на категорию (UserCategory), Комментарий (Comment)

ДЕТАЛЬНАЯ ИНФОРМАЦИЯ О МОДЕЛЯХ
  1. Автор публикации (Author)

    • Пользователь (user)
    • Дата создания (creation_date)
    • Картинка профиля (photo)
    • Рейтинг автора (author_rating)
  2. Категория статьи (Category)

    • Название (title)
    • Картинка категории(image)
    • Подписчики(subscribers)
  3. Cтатья (Post)

    • Автор (author)
    • Название title
    • Текст (text)
    • Статус публикации (type)
    • Дата создания (creation_date)
    • Категории (categories)
    • Рейтинг статьи (post_rating)
  4. Статья в категории (PostCategory)

    • Статья (post)
    • Категория (category)
    • Подписчики(subscribers)
  5. Подписчик на категорию (UserCategory)

    • Пользователь (user)
    • Категория (category)
  6. Комментарий (Comment)

    • Пользователь (user)
    • Статья (post)
    • Дата создания (creation_date)
    • Рейтинг статьи (comment_rating)
ДЕТАЛЬНАЯ СХЕМА БАЗЫ ДАННЫХ

Screen Shot

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

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

git clone https://github.com/XanderMoroz/GoodNews-DRF.git

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

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

################################################################################
# DJANGO APP Config
# Automatically setup app variables
################################################################################
SECRET_KEY='django-insecure-#)!-t1b(7&wr_7c%0m%w$(y@^#z6wizw^trm$dtz70@m1fe$6*'
DJANGO_SUPERUSER_USERNAME=root
DJANGO_SUPERUSER_EMAIL=root@root.com
DJANGO_SUPERUSER_PASSWORD=123
################################################################################
# POSTGRESQL Config
# Automatically create database and user
################################################################################
DB_NAME="goodNews"
DB_USER="xander"
DB_PASSWORD="pass:123"
DATABASE_PORT=5432
DATABASE_HOST="localhost"               # при использовании локально
DATABASE_HOST="goodNews-postgres"       # при использовании c Docker
################################################################################
# PGADMIN Config
# Automatically setup interface for DB
################################################################################
PGADMIN_DEFAULT_EMAIL=xander@admin.com
PGADMIN_DEFAULT_PASSWORD=pwd123
################################################################################
# CELERY BROKER Config
# Automatically setup message broker for celery
################################################################################
CELERY_BROKER_HOST=rabbitmq
  1. Запуск проекта с Doker

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

sudo docker-compose up -d

2.2 Создаете суперпользователя и заполняете поля:

sudo docker exec -it goodnews-drf_web_1 python manage.py createsuperuser

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

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

Как подключиться Брокеру сообщений RabbitMQ?
  1. Заходим в браузер по адресу http://127.0.0.1:15672/ и вводим данные из docker-compose.yml
RABBITMQ_DEFAULT_USER=guest
RABBITMQ_DEFAULT_PASS=guest

Screen Shot

  1. Готово

Screen Shot

Как подключить PGAdmin4 к БД?
  1. Заходим в браузер по адресу http://127.0.0.1:5050 и вводим данные из .env
PGADMIN_DEFAULT_EMAIL=xander@admin.com
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. Готово

About

Новостной веб портал "GoodNews" с публикациями на основе Django + PostgreSQL + pgAdmin4 + Celery + RabbitMQ + Prometheus + Grafana

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published