Skip to content

moodbeat/back

Repository files navigation

Бэкенд проекта "Moodbeat"

Оглавление
  1. Описание
  2. Установка и запуск
  3. Использование
  4. Дополнительная информация

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

В настоящее время работаем над совершенствованием системы и разработанных ранее функций.

Технологии

Django Postgres Redis Celery Elasticsearch Nginx

Установка и Запуск

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

Установка

  1. Клонировать репозиторий и перейти в директорию для развертывания.

    git clone [email protected]:moodbeat/back.git
    cd back/docker/
  2. Переименовать .env.example в .env и задать переменные окружения.

    Warning: Если не указаны значения для почтового сервера и DNS-адрес проекта приложение работать полноценно не будет.

Запуск

  1. Выполнить запуск контейнеров Docker.

    sudo docker compose -f docker-compose-deploy.yaml up -d
  2. Наполнить базу данных тестовыми записями.

    sudo docker compose -f docker-compose-deploy.yaml exec web python manage.py loaddata fixtures/test_data.json
  3. Выполнить индексацию для elastisearch.

    sudo docker compose -f docker-compose-deploy.yaml exec web python manage.py search_index -f --rebuild

Использование

После выполнения инструкций, описанных в разделе "Установка и Запуск", вы сможете получить доступ к админке, перейдя по адресу http://localhost/admin.

Пользователь с правами администратора (при использовании тестовой базы данных):

  • логин
  • пароль
DM94nghHSsl

Также по адресу http://localhost/api/v1/swagger/ доступна полная документация API.

Полезная информация

Данный раздел содержит информацию, которая может быть полезна для разработчиков.

Переменные окружения (.env)

# Переменные базы данных
DB_ENGINE=django.db.backends.postgresql
DB_NAME=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
DB_HOST=db
DB_PORT=5432

# Переменные Django
DJANGO_SECRET_KEY=https://djecrety.ir/
DJANGO_RESET_INVITE_SECRET_KEY=change
DJANGO_DEBUG=False

# время жизни refresh и access токенов
REFRESH_TOKEN_LIFETIME_DAYS=14
ACCESS_TOKEN_LIFETIME_MINUTES=30

# Переменные Redis
REDIS_HOST=redis
REDIS_PORT=6379

# Переменные почтового сервера
DJANGO_SMTP=False
EMAIL_HOST=smtp.yourserver.com
EMAIL_HOST_USER=[email protected]
EMAIL_HOST_PASSWORD=yourpassword

# Переменная адреса проекта, куда будет приходить приглашение на регистрацию
SELF_HOST=https://example.com

# Переменные Elasticsearch
ELASTIC_HOST=elasticsearch
ELASTIC_PORT=9200

# Переменные Sentry
DEV_SERVICES=False
SENTRY_DSN=https://sentry.io/welcome/

# Переменные Celery
NOTIFICATIONS_AGE_DELETE=30

CELERY_BROKER=redis://redis:6379
CELERY_RESULT=redis://redis:6379

# email для писем из контактной формы
CONTACT_EMAIL=[email protected]

# Переменные бота
TELEGRAM_TOKEN=@BotFather
BASE_ENDPOINT=https://example.com/api/v1/  # адрес для обращения со стороны бота к RestAPI проекта
TIME_ZONE=Europe/Moscow  # часовой пояс - должен быть одинаков в настройках Джанго и настройках бота
CONDITION_PERIOD_SEC=36000  # периодичность в секундах между оценкой своего состояния по 5-бальной шкале
BOT_NAME=example_bot_name # имя пользователя бота
BOT_INVITE_TIME_EXPIRES_MINUTES=10 # время действия кода отправляемого на email для авторизации в боте
WEB_HOOK_MODE=False  # запуск бота в режиме webhook - True, в режиме polling - False
WEB_HOOK_HOST=https://example.com  # домен с ssl, на котором развернут бот
WEB_APP_PORT=5000  # порт на котором будет "слушать" бот в режиме webhook

Запуск проекта в dev режиме

Для начала работы с проектом вам необходимо:

  • иметь установленный менеджер зависимостей Poetry;
  • postgresql 15+ версии;
  • локально развернутые elasticsearch и redis. Для удобства их развертывания воспользуйтесь приложенным docker-compose.

После того как выполнены условия выше, скопируйте example.env в backend/conf, переименуйте файл в .env и отредактируйте, особое внимание уделив указанным ниже строкам:

# имя бд, пользователя и пароль меняем в соответствии с создаными у себя в базе
DB_ENGINE=django.db.backends.postgresql
DB_NAME=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
DB_HOST=localhost
DB_PORT=5432

DJANGO_DEBUG=True

# если поднимали воспользовавшись приложенным docker-compose конфигом
REDIS_HOST=localhost
REDIS_PORT=6379
ELASTIC_HOST=localhost
ELASTIC_PORT=9200
CELERY_BROKER=redis://localhost:6379
CELERY_RESULT=redis://localhost:6379

# если нужны логи (хранятся в backend/logs)
DEV_SERVICES=True

Далее перейдите в /backend и выполните установку пакетов с зависимостями:

poetry install

Активируйте виртуальное окружение с установленными зависимостями:

poetry shell

Если потребности в постоянно активном виртуальном окружении не возникает, работайте с приложением по примеру ниже:

poetry run python manage.py runserver

После того как зависимости установлены и активированно виртуальное окружение, выполните миграции:

python manage.py migrate

По желанию можно загрузить в базу уже предустановленные данные и выполнить индексацию для elastisearch:

python manage.py loaddata fixtures/test_data.json
python manage.py search_index -f --rebuild

Важно отметить, что проводить индексацию необходимо лишь при заливке данных в обход приложения. При добавлении новых данных из приложения, индексация добавленного производится автоматически.

В приложенных к проекту тестовых данных уже есть учетная запись суперпользователя, с email [email protected] и паролем DM94nghHSsl, однако если вы не загружали тестовые данные необходимо создать учетную запись суперпользователя:

python manage.py createsuperuser

После чего проект готов к работе по адресу указанному после запуска локального сервера:

python manage.py runserver