При выключении вашего компьютера бот станет недоступен. Хорошо бы переселить его на какой-то компьютер, который никогда не спит.
Можно приобрести мини-компьютер, например популярный Raspberry PI, воткнуть его в розетку, подключить к домашнему интернету и поселить бота внутри него.
Но если у вас дома отключат электричество или интернет, то возникнет проблема.
Есть ещё один вариант — в телефон на базе Android можно установить Termux, Linux-терминал для Android (ведь Android — это одна из ветвей Линукса).
С помощью этого терминала можно запускать питоновские файлы на смартфоне, как на сервере. После этого можно перенести бота на мобильник, запустить его через терминал — и готово, бот крутится у вас в кармане! Мобильный телефон всегда включён, мобильный интернет доступен.
Но и тут есть свои неудобства: нужно поддерживать заряд батареи и положительный баланс на счёте.
Всё это выглядит не очень надёжно: такие решения, конечно, будут работать, но они годятся только для игрушечных проектов. Чтобы обеспечить уверенную работу приложения, нужен постоянно подключённый к сети полноценный масштабируемый компьютер.
Такие компьютеры называют «удалёнными серверами», а размещение проектов на удалённых серверах называют «услугой хостинга» или просто «хостингом». Обычно за услуги хостинга берут деньги, но есть и бесплатные варианты.
Задание: разместите бота на сервисе Heroku
Воспользуемся услугами бесплатного хостинга Heroku. Это облачная платформа для простого и быстрого запуска приложений, написанных на популярных языках программирования.
- Зарегистрируйтесь на Heroku.
- После успешной регистрации и подтверждения почты вы окажетесь на странице https://dashboard.heroku.com/apps.
- Создайте приложение (кнопка New → Create new app).
Вас попросят придумать название для приложения и выбрать регион. Укажите географически близкий к вам регион: даже в интернете физические расстояния имеют значение.
- Теперь привяжите аккаунт на GitHub: зайдите в раздел Deploy, выберите GitHub в разделе Development method и нажмите на кнопку Connect to GitHub.
После подтверждения действия (вас попросят ввести пароль) укажите название репозитория, в котором находится код:
Осталось только нажать на кнопку Deploy Branch: Heroku установит все зависимости и опубликует приложение на сервере.
Имейте в виду: чтобы всё завелось, нужно поместить в репозиторий два служебных файла:
- requirements.txt со списком зависимостей, чтобы Heroku знал, какие пакеты ему нужно установить;
- файл Procfile, в котором должна быть указана «точка входа» — файл, который должен быть запущен.
Здесь доступен пример размещения проекта на Heroku, прочтите его, и картина прояснится.
Подробные инструкции есть в документации, прочтите и их.
Теперь нужно передать на сервер переменные окружения. Откройте вкладку Settings и найдите пункт Config Vars. Нажмите Reveal Config Vars и добавьте поочерёдно ключ и значение для каждой переменной: PRAKTIKUM_TOKEN
, TELEGRAM_TOKEN
, TELEGRAM_CHAT_ID
.
Чтобы запустить приложение, необходимо перейти во вкладку Resources и активировать переключатель напротив строки worker python homework.py.
Теперь ваш бот будет работать круглые сутки, даже без перерыва на обед.
Если что-то пойдёт не так, то можно почитать логи, для этого нажмите More → View Logs.
Обратите внимание на ограничения бесплатного аккаунта Heroku: между запросами не должно быть более получаса, иначе сервер «уснёт» и перестанет отвечать. Пусть бот опрашивает API домашки раз в 20 минут или около того.