Как хостить телеграм-бота (и другие скрипты на Python) на Repl.it бесплатно 24/7
Очень часто возникающий вопрос: где можно разместить скрипты на Python, Flask-приложение, телеграм или дискорд ботов?
Один из вариантов — на своем компьютере при наличии внешнего IP-адреса и опыта в настройке проброса портов на роутере. Или другие сервисы, как правило, требующие платной подписки.
Цель этот статьи — подробная инструкция, как сделать хостинг Python-скриптов бесплатно и доступным 24/7 на примере телеграм-бота
Шаг 0 — регистрация бота
Существует огромное количество туториалов, как получить токен, поэтому все по-простому. Находим в телеграм BotFather, регистрируем нового бота, выбираем ему имя, получаем токен вида: 127466748171: HJfwijfw88jf32lc9FHjwpfkfgwerhjf
Он нам понадобится в дальнейшем
Шаг 1 — регистрируемся на Repl.it
Создаем новый проект на Python
Шаг 2 — Пишем код бота
В проекте будет создан файл main.py. В нем размещаем код бота:
Тут стоит обратить на установку модуля pytelegrambotapi: импортируем сначала pip
и потом выполняем его через: pip.main(['install', 'pytelegrambotapi']).
В этом случае при запуске никаких дополнительных действий для установки не потребуется
import os
from background import keep_alive #импорт функции для поддержки работоспособности
import pip
pip.main(['install', 'pytelegrambotapi'])
import telebot
import time
bot = telebot.TeleBot('СЮДА ВСТАВЬТЕ ВАШ ТОКЕН')
@bot.message_handler(content_types=['text'])
def get_text_message(message):
bot.send_message(message.from_user.id,message.text)
# echo-функция, которая отвечает на любое текстовое сообщение таким же текстом
keep_alive()#запускаем flask-сервер в отдельном потоке. Подробнее ниже...
bot.polling(non_stop=True, interval=0) #запуск бота
Шаг 3 — Создаем Flask-сервер
Создаем в проекте еще один файл background.py
В нем будет запущен Flask-сервер, который будет принимать запросы от сервиса мониторинга и использоваться для поддержания работоспособности скрипта на ReplIt.
Flask — модуль на python для разработки веб-приложений. Мы создадим «шаблон» сервера, в котором только одна страница, необходимая для нашей задачи.
Все дело в том, что в бесплатном режиме запущенный скрипт на Replit будет остановлен спустя некоторое время (10–30 мин) после закрытия вкладки браузера.
Однако, если к веб-серверу был сделан запрос, таймер сбрасывается и скрипт продолжает работать.
from flask import Flask
from flask import request
from threading import Thread
import time
import requests
app = Flask('')
@app.route('/')
def home():
return "I'm alive"
def run():
app.run(host='0.0.0.0', port=80)
def keep_alive():
t = Thread(target=run)
t.start()
Важно, что сервер запускается в файле не напрямую, а в отдельном потоке t = Thread(target=run).
Это обеспечит возможность одновременной работы Flask-сервера и телеграм-бота.
Запуск Flask-сервера
После запуска в верхнем правом углу появилась ссылка (она потребуется чуть позже) по которой можно увидеть результат работы Flask-сервера (в нашем случае сообщение I’m alive).
На этом этапе у нас работает эхо-телеграм-бот и веб-сервер, доступный из вне по адресу вида: YOUR_REPL.your_nickname.repl.co
Однако, спустя 10–30 минут после закрытия вкладки браузера скрипт будет остановлен. Вся хитрость в том, что если «кто-то» будет периодически открывать ссылку, ведущую на страницу нашего веб сервера скрипты будут продолжать работать бесконечно долго.
Шаг 4 — настраиваем службу мониторинга
Для того, чтобы скрипт работал постоянно, воспользуемся сервисом UpTimerRobot. Он будет раз в 5 минут создавать запрос к нашему web-серверу и продлевать время его работы. Регистрация не представляет трудности, поэтому перейдем к следующему этапу.
После входа в личный кабинет, создаем новый монитор
Создание монитора в UpTimerRobot
В настройках нового монитора нужно указать название и ссылку, которую мы получили при запуске скрипта выше. Время опросы указываем — каждые 5 минут.
Сохраняем монитор и возвращаемся в ReplIt. В консоле сервера видим входящие обращения от службы мониторинга
Это значит, что все получилось и наш скрипт будет работать 24/7. Можно работать над ним и развивать проект!
Такие дела! Успехов!