Запускаем телеграм-бота на сервере
Тогда он будет работать круглые сутки, а вы — отдыхать.
Не так давно мы создали телеграм-бота на Python: можно было написать ему свой знак зодиака, а он в ответ давал предсказание о долгой счастливой жизни. Но у бота есть недостаток: он работает, пока запущена программа на нашем компьютере. Если мы её остановим или выключим компьютер, бот тоже перестанет отвечать на сообщения.
Вот что мы сделаем, чтобы бот работал независимо от всего:
- Выберем сервер.
- Подготовим программу для работы на нём.
- Зальём программу на сервер.
- Настроим сервер, чтобы он исполнял программу.
Выбираем сервер
Нам нужен сервер, который умеет работать с Python и запускать файлы программы автоматически. На самом деле он у нас уже есть — на нём крутится сайт mihailmaximov.ru. Если вы всё пропустили — держите подборку:
Тот хостинг, который мы выбрали для проектов, уже умеет запускать Python-файлы. Если вы пользуетесь другим сервисом, то проверьте, умеет ли он то же самое.
Готовим программу и отправляем её на сервер
Единственное, что нужно добавить в наш код телеграм-бота, — специальную команду интерпретатору, чтобы он знал, как работать с нашим файлом. Но перед этим нужно проверить, какая версия Python на нём установлена.
Чтобы это узнать, соединимся с сервером по протоколу SSH и спросим у него напрямую. Для этого используем программу Putty, а настройки подключения возьмём в личном кабинете хостинга:
Этих данных достаточно, чтобы управлять сервером по SSH.
Вставляем их в Putty и подключаемся. Помните, что для безопасности во время ввода пароля курсор стоит на месте, чтобы никто не смог выяснить, сколько символов вы набираете. Когда подключились, вводим команду python3.3 -V — она покажет, есть ли на сервере поддержка этой версии Python:
Сервер говорит, что у него установлена версия Python 3.3.5 — нам этого хватит. Теперь добавляем в самое начало нашего файла с программой такую строчку:
В статье о том, как опубликовать сайт в интернете, мы рассказывали, как залить файлы на сервер. Это умение нам сейчас пригодится: сохраняем нашу программу с гороскопом как файл с расширением .py и отправляем его на сервер в папку cgi-bin (то, что лежит в этой папке, никто не увидит):

Настраиваем сервер
Теперь научим сервер понимать, как работать с нашей программой. Для этого в корне сайта находим файл .htaccess и добавляем в него такую строчку:
AddHandler cgi-script .py
Если у вас такого файла нет — создайте его и не забудьте про точку в самом начале названия.
Последнее, что осталось сделать, — настроить права доступа у файла с программой. Находим её среди файлов хостинга и выставляем права 755 или rwxrwxr-x:

Теперь с помощью Putty снова подключаемся к серверу и настраиваем рабочее окружение. Это как будто виртуальная песочница, где мы сможем ставить нужные модули для Python, чтобы не мешать остальным пользователям сервера.
В SSH-терминале пишем по очереди такие команды (вместо .thecode можно написать название каталога, которое вам по душе):
virtualenv .thecode source .thecode/bin/activate
Эти две команды создадут виртуальное пространство для запуска Python-файлов.
Теперь установим Python-модуль для работы с Телеграмом:
pip install pytelegrambotapi
Когда установка закончится, пишем такую команду:
nohup python3 /home/t/thecode/osebe/public_html/cgi-bin/telegoroskop.py
/home/t/thecode/osebe/ — это наш путь к папке cgi-bin, а у вас он будет другим. Поменяйте путь на свой и запускайте.
Чтобы программа продолжала работать после того, как мы закроем SSH-клиент, в самом начале пишем команду nohup .
Результат проекта — бот @TheCode_Baboolya_bot.
Что дальше
Мы сделали самые базовые вещи — запустили скрипт на сервере и сделали так, чтобы он работал там постоянно. Но вот как можно это улучшить:
Хостинг для Telegram бота
Пользовательское соглашение: мы не являемся официальными представителями компаний ниже и все ссылки ведут на сторонние ресурсы. Перед покупкой, оплатой и заказом вы обязуете себя самостоятельно проверить всю информацию. Весь текст, описание, фото, ссылки могут быть недостоверные. Для хостинга бота в телеграме мы рекомендуем выделенный VPS сервер. Не стоит покупать сервер из России и стран, в которых мессенджер заблокирован.
8.81 1. Shneider Host

Тестовый период: 7 дней
Хостинг сайта: от 110 рублей в месяц
VPS: от 264 рублей в месяц
Выделенный сервер: от 5434 рублей в месяц
Перейти shneider-host.ru
8.46 2. Sprinthost

Тестовый период: 30 дней (по промокоду)
Хостинг: от 133 рублей в месяц
VDS/VPS: от 400 рублей в месяц
Выделенный сервер: 5300 рублей в месяц
Перейти sprinthost.ru
Промокод: UTP12-1TY9Y-B60AJ
Месяц бесплатного использования хостинга.
9.7 3. Friend Hosting. Высокий аптайм!

Украинские, Болгарские впс: от 4.99$ в месяц.
США: от 5.99$ в месяц.
Перейти friendhosting.net
9.44 4. Fozzy. Быстрее быстрого!

Тестовый период: 7 дней бесплатно
Виртуальный хостинг: 120 рублей в месяц
VPS: 299 рублей в месяц
FOREX VPS: 799 рублей в месяц
Перейти fozzy.com
Промокод: extra_10
Даёт скидку 10% на все тарифы.
9.75 5. WebHOST1

Тестовый период: 30 дней
Хостинг: от 120 рублей в месяц
VDS SSD: от 600 рублей в месяц
Выделенный сервер: от 9000 рублей в месяц
Перейти webhost1.ru
Промокод: f4e9a0-10
Скидка 10% на первый заказ
Где хостить бота telegram
Авторизуясь в LiveJournal с помощью стороннего сервиса вы принимаете условия Пользовательского соглашения LiveJournal
- Архив:
- Ссылки
- Июнь 2022
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- Теги
- /QR-кодadobe premierecellulailereclipseiconbit nettab thorjavakotlinlinuxmccullochribbon xml editorribbonxmleditorscintillatable2htmltelegramwhatsappwi-fiЁлочкаАвтомобильАндроидАномалияАфераБелкаБилайнБрейвикВДНХВалежникВеснаВидеоурокиВиноградовВнуковоВоротаВыборыГазГайдпаркГрафеновая лампочкаГрунтДачаДельфиЖивотное колесоЗаборИнструкцииКалибриллаКолесникКолодецКультураКурскЛампыЛесЛинуксМАКС авиасалонНаукаО_компьютере_начинающимОбъективыОпросОцифровкаПенсияПланшетПодъездПолитехнический музейПолитикаПрограммированиеПустельгаПылесосРаботаРаритетыРеновацияРисункиРоссияСМИСарайСарай_catsloverСбербанкСканерыСклоны тоннеляСколковоТеле2ТерминологияТипографикаУточкиФобос-ГрунтФотоФотовыставкаХолодильникЧайкиЭкономикаЭлектричествобардакводосчётчикизвуккомпьютерыподсветка синтаксисареальностьрелигиясалютсмартфоныфейерверк
- Page Summary
- notglamour — Без темы [+1]
- (Анонимно) — Без темы [+3]
- darkpain13 — Без темы [+5]
- darkpain13 — Без темы [+1]
- darkpain13 — Без темы [+1]
- (Анонимно) — Бот [+5]
- (Анонимно) — Без темы [+1]
- volodichev — Webhooks [+3]
- modder modder — Вопрос [+1]
- (Анонимно) — Без темы [+3]
- Adam Hekmholtz — Благодарность [+1]
- (Анонимно) — Без темы [+12]
- (Анонимно) — Cloudflare [+1]
- spacediver — Без темы [+1]
- (Анонимно) — Без темы [+1]
Для впервые читающих меня на тему мессенджера Telegram (современного аналога ICQ, клона WhatsApp) и написания к нему ботов, замечу, что несмотря на название «бот», эта сущность не рассылает спам, не регистрируется на форумах и не подбирает пароли. Словом «бот» разработчики платформы Telegram называют дополнения к своему мессенджеру, расширяющие его функционал. Взаимодействие с этими дополнениями осуществляется так же, как и с людьми, посредством контактов. Фактически, вместо человека за псевдонимом контакта скрывается программа-бот, которая по команде пользователя выполняет те или иные действия — выдаёт прогноз погоды, выводит курсы валют и т.п. Ничего зловредного такая программа не делает и сделать не может.
В названии поста присутствует ещё одно страшное слово — WebHook, которое тоже может вызвать настороженность. Нет, речь не идёт о неких недокументированных полулегальных способах программирования. Словом WebHook разработчики мессенджера называют вполне легальное действие — установку на костяк бота, размещённого на серверах Telegram, функцию обратного вызова для его основного кода, размещённого на каком-нибудь внешнем хостинге.
Замечу, что есть и другой способ взаимодействие бота и его кода, в котором код сам опрашивает бота через равные промежутки времени на предмет поступления новых команд (long polling). Но этот способ хуже по всем параметрам. Во-первых, он даёт задержку, достигающую величины заданного интервала опроса, во-вторых, постоянно работающий код прослушивания даёт нагрузку на сервер хостера, а в-третьих, работающие в фоне скрипты (демоны), как правило, запрещены на бесплатных сайтах, или действие скриптов ограничено по времени.
Итак, предыдущий мой пост был посвящён развёртыванию бота для мессенджера Telegram с облачной среды разработки IDE Cloud9 на бесплатный облачный хостинг Heroku. К сожалению, бесплатный тарифный план этого хостинга подразумевает 18-часовую работу сервера и 6-часовой простой за сутки, что вполне подходит для обучения созданию ботов, их тестирования и даже начального периода его эксплуатации среди друзей. Но, к сожалению, для широкого выхода на люди нужны другие условия, не ограничивающие бота по длительности работы.
Поскольку к настоящему времени мой первый бот получил вполне законченный вид, я задумался над тем, как найти для него более подходящее пристанище. Но я не был готов платить деньги за функционирование не приносящего дохода продукта. И я стал искать другие варианты.
Непременным условием для работы бота через WebHook является защищённый канал передачи данных между сервером мессенджера и сервером хостера. Защищённый канал реализуется протоколом передачи данных https. Для установки этого протокола нужно установить на сайт, где будет работать код бота, ключи SSL. К сожалению, почти все бесплатные хостинги не разрешают установку SSL, и позволяют работать только по http.
Я стал искать хостинг, который бы, как и Heroku, предоставлял возможность использования SSL, но не имел бы ограничения по количеству рабочего времени сервера. Но поиски были тщетными. Единственное, что я ещё нашёл бесплатного с SSL — это облачный сервис Google Cloud Platform.
Google Cloud Platform
Что я могу сказать про Google Cloud Platform? Это сложнейшая облачная система, внутри которой есть сервис App Engine для создания и размещения приложений на языках Python, PHP, Go, Ruby, Java и JavaScript (Node.js). Но у неё есть минус — в бесплатном варианте файловая система сервиса закрыта для записи, то есть, сайт не может сохранять у себя файлы, а без этого у меня не получилось заставить бота отдавать пользователю изображения, скаченные с другого, внешнего ресурса.
Другим недостатком применения Google Cloud Platform в качестве хостера ботов является её чрезмерная сложность, особенно когда плохо понимаешь английский язык или не находишься глубоко в теме облачной разработки приложений. Тем не менее, если алгоритм работы бота не предусматривает сохранение файлов, то этот хостинг вполне подойдёт для нашей цели, обеспечив боту круглосуточную, быструю и бесперебойную работу.
Мне не удалось разобраться в развёртывании приложений из встроенной IDE сервиса. Кнопка автоматического развёртывания в бесплатном варианте не работает, а развёртывание из командной строки встроенного терминала у меня почему-то не даёт эффекта, хотя процесс завершается без ошибок, а трафик направлялся на самую свежую версию. То ли я не ту ветку проекта разворачивал, то ли что, в общем, до конца не разобрался. Но у меня прекрасно заработал вариант разворачивания сайта с моего компьютера, о чём я расскажу далее.
Итак, для развёртывания приложения я скачал файлы созданного в App Engine проекта к себе на диск (с файлом настроек проекта app.yaml) и специальную утилиту Google App Engine SDK for PHP. Утилита написана на языке Python, поэтому требует его предварительной установки на компьютер. В процессе инсталляции будет предложено скачать его по ссылке и установить. При установке Python обязательно отметьте для установки компонент «Add python.exe to Path». После установки языка можно продолжить установку утилиты.
После завершения установки запускаем Google App Engine Launcher, добавляем в него скаченный ранее, существующий в App Engine проект, и теперь можем его разворачивать кнопкой Deploy. Редактирование файлов проекта (за исключением файла app.yaml) утилита не осуществляет, так что всё делаем в любом внешнем редакторе, и внутрь страшного App Engine можем больше не возвращаться.
Если после успешного развёртывания браузер не видит изменений, проверьте внутри App Engine в разделе Compute в пункте Versions, весь ли трафик направлен на вашу последнюю версию. Все старые версии лучше удалить (на бесплатном тарифе нельзя создавать больше 10 версий).
Погоняв своего бота у Google, я всё же решил продолжить поиски, поскольку не смог обойтись при пересылке файлов без их записи в файловую систему. К сожалению, других бесплатных хостингов с SSL мне не попадалось, но я набрёл на очень интересный вариант решения проблемы — CDN-сервис CloudFlare.
Бесплатный хостинг + бесплатный домен 2-го уровня + бесплатная CDN
Неуёмная жажда халявы, поистине, сдвигает горы. Она же привела меня к обнаружению очень интересного бесплатного сервиса — CloudFlare. CloudFlare представляет собой сервис доставки контента с кешированием и защитой по SSL. Оказывается, можно перенаправить весь трафик к своему сайту через специальную сеть, по пути шифруя его по протоколу https, и для этого не нужны SSL-сертификаты на сайте! Таким образом, весь код бота можно разместить на любом бесплатном хостинге, и легко сделать его видимым для серверов Telegram по https!
Дальнейшее изучение вопроса показало, что для работы этой системы нужно, чтобы у сайта было доменное имя 2-го уровня вида «имя.рф». Однако все бесплатные хостинги дают имена 3-го уровня типа «имя.хостинг.рф». Но они обычно позволяют линковать к сайтам внешние доменные имена. То есть, можно приобрести отдельно домен 2-го уровня и бесплатно прилинковать его к сайту на бесплатном хостинге.
В принципе, домены 2-го уровня стоят относительно недорого. Так, домен в зоне .ru вообще можно купить всего за 99 рублей, и продлевать его за ту же цену каждый год. Но зачем платить, если есть халява, а она есть! Некоторые небольшие страны, желая популяризовать себя в мире, предлагают бесплатную регистрацию доменного имени 2-го уровня в доменной зоне своей страны. Так почему бы не воспользоваться этим? Это можно сделать на сайте freenom.com за несколько минут. Там предлагаются домены в зонах .tk (острова Токелау), .ml (Мали), .ga (Габона), .cf (Центральноафриканская Республика) и .gq (Экваториальная Гвинея).
Регистрировать домены бесплатно можно на срок до 12 месяцев. Через год, за 2 недели до истечения срока, вам по почте придёт напоминание о его продлении, которое производится фактически одним кликом мышки.
Если вы уже имеете аккаунт на freenom.com с зарегистрированными доменными именами, но при попытке добавления нового домена возникает ошибка «Error code 0x0116a» с надписью «At this moment we are unable to register any domains or other services in this account», что в переводе означает «На данный момент мы не можем зарегистрировать любые домены или другие услуги в этом аккаунте», просто создайте другой аккаунт. Замечено, что при регистрации не все E-mail’ы могут подойти. Так, у меня каким-то образом засветились там все мои адреса на mail и yandex, и второй аккаунт я регистрировал уже на новый gmail.
- Ищем бесплатный хостинг, поддерживающий языки программирования, позволяющие писать на диск. Язык JavaScript по этой причине не подойдёт, но, например, PHP сейчас поддерживается практически на любом бесплатном хостинге. Также, наш потенциальный хостер должен предоставлять возможность линковать к нашему сайту внешние доменные имена. Эта услуга тоже есть практически у любого бесплатного хостера. Регистрируемся, заходим в панель управления хостингом, ищем раздел управления доменами, и копируем оттуда имена двух первых DNS-серверов. Они нам пригодятся при перенаправлении будущего доменного имени на наш сайт.
- Переходим на сайт freenom.com, регистрируемся там и регистрируем желаемое доменное имя второго уровня на максимальный бесплатный срок (12 месяцев). Затем переходим там в Domains -> My Domains, напротив нашего нового домена нажимаем кнопку Manage Domain, переходим в Managment Tools -> Nameservers, переключаем кнопку выбора в положение Use custom nameservers и вбиваем в два верхних поля скопированные нами ранее имена DNS-серверов хостера. Сохраняем изменения. Несмотря на предупреждение, что доменное имя заработает в течение 24 часов, обычно оно начинает работать уже в течение несколько минут.
- Возвращаемся к нашему хостеру, и у него в разделе управления доменами прописываем только что зарегистрированное доменное имя. Линкуем его там к папке сайта. Через несколько минут линковка хостера тоже вступает в силу, и теперь заготовку нашего нового сайта становится возможным открывать в браузере по новому доменному имени 2-го уровня. Ура!
- Теперь переходим на сайт CloudFlare, регистрируемся, указываем там новое доменное имя нашего сайта, и действуем далее согласно указаниям на сайте. В конце нам выдаётся два новых имени DNS-сервера, которыми надо заменить соответствующие имена на freenom.com, скопированные у нашего хостера. Замечу, что переключение на https обещается в течение 24 часов, но у меня опять же заработало уже через несколько минут.
- Переходим на сайт freenom.com, открываем уже знакомую нам страницу с DNS-серверами, и меняем там имена, скопированные у хостера, именами, выданными сервисом CloudFlare. Если поля имён DNS-серверов неактивны и не позволяют себя редактировать, просто переключим туда-обратно опцию выбора Use custom nameservers. Всё сохраняем и выходим. Всё!
Как уже было отмечено, служба CloudFlare является также кеширующим прокси-сервером, ускоряющим загрузку страниц сайта. Но если вы находитесь в России и используете российский хостинг, то я не думаю, что выигрыш в скорости будет заметен — ведь все данные будут идти через серверы, расположенные вне страны, поэтому возможно даже замедление открытия страниц сайта, хотя и не обязательно. Но ведь у нас другая цель, верно? Кстати, кеширование можно отключить, включив на CloudFlare режим разработчика (Development Mode). Это полезно, если вы вносите изменения на статических страницах вашего сайта, и хотите при обновлении сразу видеть результат в браузере. Также полезно оставить включенной функцию Always Online, которая будет отдавать запрошенные страницы из кеша даже если наш сайт вдруг временно отключится. Это предотвратит блокировку нашего бесплатного доменного имени, которая может произойти в случае его неиспользования.
Теперь несколько слов о блокировках некоторых IP-адресов CloudFlare Роскомнадзором. Периодически эта тема всплывает в российских СМИ (особенно актуальна она была в 2013 году), но нас она не затрагивает. Серверы Telegram, как и серверы CloudFlare, расположены не в России, и блокировка последних роскомнадзором нам не страшна — они всё равно будут запрашиваться серверами Telegram извне России. Гораздо хуже, если заблокируют сам Telegram, о возможности чего тоже не раз проскакивало в СМИ. Но я не думаю, что до этого дойдёт, о чём я уже писал ранее.
Для себя я остановился на последнем варианте. Если такая конструкция будет относительно устойчивой в течение длительного периода времени, то её вполне можно будет широко использовать для полноценного бесплатного размещения ботов для Telegram.
Как запустить Python Telegram бота на VPS
Приветствую всех. Из этой статьи вы узнаете как запустить Telegram бота на виртуальном сервере, и настроить службу для его авто запуска и перезапуска.
Телеграм бот
Виртуальный сервер
Для демонстрации я буду использовать виртуальный сервер от Beget стоимостью 210 рублей в месяц. Вы можете использовать другого хостинг провайдера, или выбрать другую конфигурацию, в зависимости от вашего проекта.

Подключение к виртуальной машине
После того как вы создали VPS у вас откроется панель управления, где вы можете скопировать IP адрес машины и подключаться к ней по SSH.

Для этого можно использовать программу PuTTY или клиент OpenSSH, который входит в состав Windows 10. Для подключения по SSH выполните следующую команду:
И введите пароль который вы указали при создании VPS.
Подготовка сервера
После того как вы подключились к серверу, выполните команды которые обновят списки, и устаревшие пакеты до последней версии.
Загрузка и запуск бота
Перейдите в каталог home и создайте папку для вашего проекта выполнив команды.
Зайдите панель управления VPS и откройте Файловый менеджер.

Загрузите файлы вашего проекта на сервер, в моем случаи это только один файл main.py .

Установите зависимости вашего проекта, и запустите бота.
Примечание: Ubuntu 20.04 поставляется с установленной Python 3.8 из коробки, если для вашего проекта нужна другая версия, установите ее или используйте другую версию дистрибутива.
Теперь перейдите в Телеграм и протестируйте работу.

Авто запуск и перезапуск телеграм бота
Создайте systemd службу для бота.
Нажмите CTRL+S и CTRL+X что бы сохранить и выйти.
Выполните эти две команды что бы запустить службу.
Ваш бот запушен. Перейдите в Телеграм и убедитесь в этом.
Заключение
Ваш бот будет всегда запускаться при старте системы, и перезапускается при возникновении ошибки. Для примера вы можете специально вызвать исключения в одной из функций обернутой обработчиком, и отследить ее в журнале командой: