- 🌀 Описание проекта
- 🌟 Возможности сервиса
- 📈 Описание схемы БД
- 🚀 Инструкция по установке
- 💯 Тесты
- ©️ License
GoodNews представляет собой веб-портал на основе Django с публикациями статьями и блогами. Благодаря своим функциям GoodNews выступает в качестве площадки, на которой современные писатели могут свою аудиторию и найти вдохновение в чужих работах.
База данных - PostgreSQL
. ORM - DjangoORM
.
Асинхронные задачи - Celery
. Брокер сообщений - RabbitMQ
.
Интерфейс - Jinja2
, HTML
, CSS
, JavaScript
.
Контейнеризация - Docker-Compose
. Зависимости - Poetry
. Линтер - Flake8
.
Мониторинг - Prometheus
. Метрики хоста - Node Exporter
. Визуализация - Grafana
.
ЛЕНТА СТАТЕЙ
Каждый пользователь имеет доступ к ленте статей. Лента представляет собой несколько случайных статей и список аннотаций, отсортированный по убыванию даты публикации. Каждая аннотация ведет на отдельную страницу с детальной информацией о статье. На этой странице пользователь получает доступ к полному тексту статьи и список комментариев других пользователей. Авторизованные пользователи могут добавлять свои комментарии.
ПОЛНОТЕКСТОВЫЙ ПОИСК ПО КАТАЛОГУ СТАТЕЙ
Для удобства пользователя реализован полнотекстовый поиск по названию и тексту статьи.
ЛИЧНЫЙ КАБИНЕТ(ЛК)
После авторизации пользователь может устанавливать картинку профиля (аватар). Также в личном кабинете можно просматривать и редактировать список категорий статей, на которые пользователь подписан.
УПРАВЛЕНИЕ ПУБЛИКАЦИЯМИ
В личном кабинете каждый авторизованный пользователь может создавать/редактировать/удалять собственные статьи. При создании статьи требуется уточнить название, написать текст и выбрать одну или несколько категорий, к которым относится статья.
ПОДПИСКА НА КАТЕГОРИИ
Авторизованый пользователь получает доступ к странице категорий. Страница категорий представляет собой список категорий статей существующих на портале. К каждой категории приводится статистическая сводка: о количестве доступных публикаций, количество комментариев ко всем статьям категории, количествo подписчиков.
База данных содержит 6 моделей: Автор публикации (Author), Категория статьи (Category), Cтатья (Post), Статья в категории (PostCategory), Подписчик на категорию (UserCategory), Комментарий (Comment)
ДЕТАЛЬНАЯ ИНФОРМАЦИЯ О МОДЕЛЯХ
-
Автор публикации (Author)
- Пользователь (user)
- Дата создания (creation_date)
- Картинка профиля (photo)
- Рейтинг автора (author_rating)
-
Категория статьи (Category)
- Название (title)
- Картинка категории(image)
- Подписчики(subscribers)
-
Cтатья (Post)
- Автор (author)
- Название title
- Текст (text)
- Статус публикации (type)
- Дата создания (creation_date)
- Категории (categories)
- Рейтинг статьи (post_rating)
-
Статья в категории (PostCategory)
- Статья (post)
- Категория (category)
- Подписчики(subscribers)
-
Подписчик на категорию (UserCategory)
- Пользователь (user)
- Категория (category)
-
Комментарий (Comment)
- Пользователь (user)
- Статья (post)
- Дата создания (creation_date)
- Рейтинг статьи (comment_rating)
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
2.1 Создаете и запускаете контейнер через терминал:
sudo docker-compose up -d
2.2 Создаете суперпользователя и заполняете поля:
sudo docker exec -it goodnews-drf_web_1 python manage.py createsuperuser
2.3 Сервисы доступны для эксплуатации:
- Приложение Python
Django APP
: http://127.0.0.1:8080/ - Брокер сообщений
RabbitMQ
: http://127.0.0.1:15672/ - Интерфейс для управления БД 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
Как подключиться Брокеру сообщений RabbitMQ?
- Заходим в браузер по адресу http://127.0.0.1:15672/ и вводим данные из docker-compose.yml
RABBITMQ_DEFAULT_USER=guest
RABBITMQ_DEFAULT_PASS=guest
- Готово
Как подключить PGAdmin4 к БД?
- Заходим в браузер по адресу http://127.0.0.1:5050 и вводим данные из .env
PGADMIN_DEFAULT_EMAIL=xander@admin.com
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 данными хоста
- Готово