# Как хостить телеграм-бота (и другие скрипты на Python) на Repl.it бесплатно 24/7

<https://habr.com/ru/articles/709314/>

Очень часто возникающий вопрос: где можно разместить скрипты на Python, Flask-приложение, телеграм или дискорд ботов?

Один из вариантов — на своем компьютере при наличии внешнего IP-адреса и опыта в настройке проброса портов на роутере. Или другие сервисы, как правило, требующие платной подписки.

Цель этот статьи - подробная инструкция, как сделать хостинг Python-скриптов бесплатно и доступным 24/7 на примере телеграм-бота

## Шаг 0 - регистрация бота

Существует огромное количество туториалов, как получить токен, поэтому все по-простому. Находим в телеграм BotFather, регистрируем нового бота, выбираем ему имя, получаем токен вида: 127466748171:HJfwijfw88jf32lc9FHjwpfkfgwerhjf

Он нам понадобится в дальнейшем

![](/files/f9jmYmVcRhldKmJeXCuX)

## Шаг 1 - регистрируемся на Repl.it

Создаем новый проект на Python

![](/files/mYpA8hSbJhzol3WYyHw8)

## Шаг 2 - Пишем код бота

В проекте будет создан файл main.py. В нем размещаем код бота:

![](/files/AIwPO4K40pBhNTrktu1m)

Тут стоит обратить на установку модуля 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-сервера и телеграм-бота.

![](/files/Zz8uMAwIAnluzmYiaQfk)

Запуск Flask-сервера

После запуска в верхнем правом углу появилась ссылка **(она потребуется чуть позже)** по которой можно увидеть результат работы Flask-сервера (в нашем случае сообщение I'm alive).

На этом этапе у нас работает эхо-телеграм-бот и веб-сервер, доступный из вне по адресу вида: \_**YOUR\_REPL.your\_nickname.repl.co**\_Однако, спустя 10-30 минут после закрытия вкладки браузера скрипт будет остановлен. Вся хитрость в том, что если "кто-то" будет периодически открывать ссылку, ведущую на страницу нашего веб сервера скрипты будут продолжать работать бесконечно долго.

## Шаг 4 - настраиваем службу мониторинга

Для того, чтобы скрипт работал постоянно, воспользуемся сервисом [UpTimerRobot](https://uptimerobot.com/). Он будет раз в 5 минут создавать запрос к нашему web-серверу и продлевать время его работы. Регистрация не представляет трудности, поэтому перейдем к следующему этапу.

После входа в личный кабинет, создаем новый монитор

![](/files/cAZlsgfIS2s3jxkDO4fh)

Создание монитора в UpTimerRobot

В настройках нового монитора нужно указать название и ссылку, которую мы получили при запуске скрипта выше. Время опросы указываем - каждые 5 минут.

![](/files/scQyUBCJ4o8lHJlrR4k3)

Сохраняем монитор и возвращаемся в ReplIt. В консоле сервера видим входящие обращения от службы мониторинга

![](/files/2DjBybLK6YeGUwlRBYQe)

Это значит, что все получилось и наш скрипт будет работать 24/7. Можно работать над ним и развивать проект!

Такие дела! Успехов!


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://book.konstantinsecurity.com/readme/architect/bots/telegram/kak-khostit-telegram-bota-i-drugie-skripty-na-pyt.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
