Как защитить бота на heroku?
У меня есть вк-бот, развернутый на heroku. Написан на python3 и использует библиотеку vk_api. Проблема в том, что к любому приложению на heroku можно отправить HTTP-запрос по адресу <имя приложения>.herokuapp.com.
Если отправить подобный запрос моему стабильно работающему боту, то он падает с таким сообщением:
at=error code=H14 desc="No web processes running" method=GET path="/" host=botidiot.herokuapp.com request_id=8126ad22-e2a2-4ae1-9d3b-5e1fe6205e28 fwd="37.113.168.51" dyno= connect= service= status=503 bytes= protocol=http
Из сообщения понятно, что нет запущенных процессов типа web, способных обработать запрос (естественно, я использую единственный процесс типа worker).
Получается, любой, кто перейдет по адресу <имя приложения>.herokuapp.com, может остановить работу моего бота. Мне это не нравится. Как защититься от подобного рода воздействий без использования Django, Flask и т.п., способных обработать запрос?
Ответы (1 шт):
Я провёл 3 часа в поиске решения данной проблемы. Нашёл только один выход, и то, костыль, но бот падать не будет.
Heroku не любит, когда пользователи деплоят не веб-приложения, при каждом деплое оно хочет видеть запущенный веб-сервер.
Итак, перейдём к решению.
Мы создадим файл с сервером на flask, чтобы Heroku обрабатывало запрос и скрипты не падали.
В корневой директории создаём файл f.py:
import os
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return ""
if __name__ == "__main__":
port = int(os.environ.get("PORT", 5000))
app.run(host='0.0.0.0', port=port)
В requirements.txt дописываем flask
В Procfile дописываем строчку web: python f.py
Редеплоим, запускаем Dyno через панель управления приложением. Done.