Бот для «Московской школы профессиональной филантропии»
- Для управления зависимостями и пакетами в проекте используется Poetry. Убедитесь, что у вас установлен Poetry и ознакомьтесь с его документацией.
- Установите docker и docker compose.
- Для автоматизации каждом коммите выполняются pre-commit хуки, перечисленные в файле .pre-commit-config.yaml. Если при коммите возникают ошибки, можно запустить хуки вручную и посмотреть сообщения об ошибках при помощи команды:
pre-commit run --all-files
- Создайте
.env
файл в корневой папке проекта и укажите необходимые переменные окружения, по примеру шаблона .env_example.
-
Активируйте виртуальное окружение и установите зависимости
poetry shell poetry install
-
Установите pre-commit хуки
pre-commit install --all
-
Для запуска локальной версии приложения, состоящей из трех сервисов - backend (Django приложение), postgres (БД PostgreSQL) и nginx (веб-сервер), выполните следующую команду:
docker compose -f infra/docker-compose_local.yml up -d --build
-
Для выполнения команд в контейнере backend, используйте следующий формат:
docker compose -f infra/docker-compose_local.yml exec backend [COMMAND]
Выполните следующие команды:
python manage.py migrate # Cоздать миграции python manage.py createsuperuser # Cоздать суперпользователя python manage.py collectstatic --no-input # Cобрать статику
-
Для остановки и удаления контейнеров используйте:
docker compose -f infra/docker-compose_local.yml down
-
Для удаления volumes используйте следующий формат команд:
docker volume rm postgres_data_local # БД docker volume rm static_value_local # статика
-
Для удаления образов используйте следующий формат команд:
docker image rm mspp # образ приложения docker image rm postgres:15.2 # postgres docker image rm nginx:1.23.3-alpine # nginx
docker compose -f infra/docker-compose_db_launch.yml up -d --build
-
Перейдите в директорию
src
с помощью:cd src
-
Скопируйте статические файлы:
python manage.py collectstatic
-
Примените миграции:
python manage.py migrate
-
Создайте суперпользователя:
python manage.py createsuperuser
-
Запустите проект:
python manage.py runserver
Для запуска бота в режиме polling задайте в файле .env значение False
для константы WEBHOOK_MODE
WEBHOOK_MODE=False
Для запуска бота в режиме webhook задайте в файле .env значение True
для константы WEBHOOK_MODE
, также необходимо указать URL сайта, на котором развернут проект, в константе WEBHOOK_URL
WEBHOOK_MODE=True
WEBHOOK_URL=https://example.com
Для локального запуска бота в режиме webhook можно использовать приложение ngrok
- Скачать и установить ngrok
- Зарегистрировать учетную запись
- Авторизоваться
- В терминале перейти в папку с ngrok
- Скопировать и выполнить в терминале команду для добавления в ngrok токена авторизации (https://dashboard.ngrok.com/get-started/setup, пункт Connect your account)
ngrok config add-authtoken <ваш_токен>
- Запустить ngrok в терминале
ngrok http 8000
- Из ngrok скопировать url из поля
Forwarding
в константуWEBHOOK_URL
файла .env
python manage.py fill_data
Скрипт backup_maker.bash расположен на сервере в корневой директории //MSPP
на одном уровне с директориями infra и nginx_logs
Обращается к контейнеру "postgres_stage" и делает pg_dump базы данного контейнера
Каждый день создает копии БД в директории /dumps и зачищает от бэкапов
длительностью хранения более 15 дней.
За ежедневный запуск скрипта отвечает crontab
Необходимо выполнить "crontab -e" и вписать значения вида "* * * * * //MSPP/backups_maker.bash",
где * -расписание времени в формате cron, а //MSPP/backups_maker.bash -расположение скрипта
- Взаимодействие с Goodle-таблицами оранизовано посредством Google Cloud Platform (https://console.cloud.google.com/projectselector2/home/dashboard) и соответствующих API.
- Для использования Google Cloud Platform необходим гугл-аккаунт.
- После авторизации на платформе cоздаём проект в Google Cloud Platform:
- Нажать на кнопку Create Project в рабочей области.
- Заполнить форму и нажать Create.
- Подключаем Google Drive API и Google Sheets API:
- На плитке APIs нажать кнопку Go to APIs overview.
- Нажать кнопку Enabled APIs and services или выбрать в меню слева пункт Library.
- Поочерёдно найти Google Drive API, Google Sheets API и подключить их к проекту.
- Создаём сервисный аккаунт.
- Перейти в раздел Credentials.
- Нажать кнопку Create credentials и выбрать пункт Service account.
- Заполнить форму, выбрать роль для сервисного аккаунта (рекомендуется Editor).
- Ввести адрес вашего личного аккаунта в поле Service account admins role и нажать кнопку Done.
- Получаем JSON-файл с ключом доступа к сервисному аккаунту:
- Перейти на экран Credentials, нажмите на строчку с названием вашего сервисного аккаунта
- Нажать Keys –> Add Key –> Create New Key.
- Выбрать формат JSON и нажать Create.
- Из скачавшегося файла копируем необходимые переменные окружения:
- PRIVATE_KEY=
- PRIVATE_KEY_ID=
- PROJECT_ID=
- CLIENT_EMAIL=
- CLIENT_ID=
- CLIENT_X509_CERT_URL=
- EMAIL - указываем значение адреса электронной почты гугл-аккаунта, в котром был создан проект.
- Подключаем таблицы.
- Создать таблицы для заявок (https://docs.google.com/spreadsheets)
- Скопировать id таблиц в соответсвующие переменные:
- SPREADSHEET_ID_FUND=
- SPREADSHEET_ID_VOLUNTEER=
Id можно получить скопировав символьную комбинацию из их URL-адресов (.../d/<"id таблицы">/edit...)
- Версии API указываются в настроках в константах и должны соответствовать версиям на момент развертывания проекта. Необходимая информация доступна по ссылкам указанным ниже для каждой из констант соответственно.
- DRIVE_VERS = https://developers.google.com/drive/api/reference/rest/
- SHEETS_VERS = https://developers.google.com/sheets/api/reference/rest
Anton Zelinsky
kr0t
AlexGriv
Serge Balyaba
Nikita Troshkin
ivanyuk-vl