Для запуска проекта локально достаточно выгрузить код, создать файл .env.dev рядом с .env.template и заполнить своими данными следующие переменные:
- BOT_TOKEN=
- OWNER_ID=
- YOOKASSA_KEY_TEST=
- PG_DB_NAME=
- PG_USER=
- PG_PASSWORD=
- REDIS_PASSWORD=
- REDIS_USER=
- REDIS_USER_PASSWORD=
YOOKASSA_KEY_TEST - на сайте yookassa есть неплохая инструкция, как получать тестовый токен с помощью BotFather. Тестовый магазин в личном кабинете можно зарегистрировать без предоставления данных ИП. Для тестирования этого достаточно.
После присвоения значений переменных окружения проверьте, что в файле config.py включен режим разработки dev_mode: bool = True
Далее можно запускать проект в докере командой docker compose -f docker-compose.dev.yaml up -d
Бот работает!
- Устанавливаем и активируем виртуальное окружение в корне проекта
python3 -m venv venv && source ./venv/bin/activate && pip install --upgrade pip - Устанавливаем основные зависимости проекта
pip install -r requirements.txt - Устанавливаем дополнительные зависимости
pip install -r requirements_dev.txt - Запускаем тесты
pytest tests/
При деплое в дополнение к контейнерам bot, postgres, redis использую nginx, также в контейнере. Базовые конфиги представлены в директории nginx
В конфигах нужно заменить domain.ru на свой домен. Также в конфигах предусмотрено несколько поддоменов, а именно:
- tg.domain.ru - для получения апдейтов с серверов телеграм
- site.domain.ru - для отображения статической html
- db.domain.ru - для подключения веб-админки к базе данных. Это приложение не представлено в данном репозитории
- domain.ru - не используется, при необходимости можно настроить
Телеграм присылает обновления только на подписанные домены. Я использую сертификаты от letsencrypt, которые устанавливаю на файловой системе сервера и пробрасываю в контейнер nginx с помощью volume.
Непосредственно запуск приложения осуществляется командой docker compose -f docker-compose.prod.yaml up -d docker-compose.prod.yaml. Предварительно нужно создать файл с переменными окружения .env, куда внести уже все данные. Необязательно только YOOKASSA_KEY_PRODUCTION. Если эта переменная не заполнена, то при попытке оплатить подписку бот будет предупреждать пользователя, что в данный момент оплата невозможна.
После чего поднимаем nginx из его директории docker compose up -d