Запускаем телеграм-бота на сервере
Конец ретроградному Меркурию! Пишем собственный гороскоп на Python Телеграм-бот на Python
Запускаем телеграм-бота на сервере

Не так дав­но мы созда­ли телеграм-бота на Python: мож­но было напи­сать ему свой знак зоди­а­ка, а он в ответ давал пред­ска­за­ние о дол­гой счаст­ли­вой жиз­ни. Но у бота есть недо­ста­ток: он рабо­та­ет, пока запу­ще­на про­грам­ма на нашем ком­пью­те­ре. Если мы её оста­но­вим или выклю­чим ком­пью­тер, бот тоже пере­ста­нет отве­чать на сооб­ще­ния.

Вот что мы сде­ла­ем, что­бы бот рабо­тал неза­ви­си­мо от все­го:

  1. Выбе­рем сер­вер.
  2. Под­го­то­вим про­грам­му для рабо­ты на нём.
  3. Зальём про­грам­му на сер­вер.
  4. Настро­им сер­вер, что­бы он испол­нял про­грам­му.

Выбираем сервер

Нам нужен сер­вер, кото­рый уме­ет рабо­тать с Python и запус­кать фай­лы про­грам­мы авто­ма­ти­че­ски. На самом деле он у нас уже есть — на нём кру­тит­ся сайт mihailmaximov.ru. Если вы всё про­пу­сти­ли — дер­жи­те под­бор­ку:

Тот хостинг, кото­рый мы выбра­ли для про­ек­тов, уже уме­ет запус­кать Python-файлы. Если вы поль­зу­е­тесь дру­гим сер­ви­сом, то про­верь­те, уме­ет ли он то же самое.

Готовим программу и отправляем её на сервер

Един­ствен­ное, что нуж­но доба­вить в наш код телеграм-бота, — спе­ци­аль­ную коман­ду интер­пре­та­то­ру, что­бы он знал, как рабо­тать с нашим фай­лом. Но перед этим нуж­но про­ве­рить, какая вер­сия Python на нём уста­нов­ле­на.

Что­бы это узнать, соеди­ним­ся с сер­ве­ром по про­то­ко­лу SSH и спро­сим у него напря­мую. Для это­го исполь­зу­ем про­грам­му Putty, а настрой­ки под­клю­че­ния возь­мём в лич­ном каби­не­те хостин­га:


Этих дан­ных доста­точ­но, что­бы управ­лять сер­ве­ром по SSH.

Встав­ля­ем их в Putty и под­клю­ча­ем­ся. Помни­те, что для без­опас­но­сти во вре­мя вво­да паро­ля кур­сор сто­ит на месте, что­бы никто не смог выяс­нить, сколь­ко сим­во­лов вы наби­ра­е­те. Когда под­клю­чи­лись, вво­дим коман­ду python3.3 -V — она пока­жет, есть ли на сер­ве­ре под­держ­ка этой вер­сии Python:


Сер­вер гово­рит, что у него уста­нов­ле­на вер­сия Python 3.3.5 — нам это­го хва­тит.

Теперь добав­ля­ем в самое нача­ло наше­го фай­ла с про­грам­мой такую строч­ку:

#!/usr/bin/python3.3

В ста­тье о том, как опуб­ли­ко­вать сайт в интер­не­те, мы рас­ска­зы­ва­ли, как залить фай­лы на сер­вер. Это уме­ние нам сей­час при­го­дит­ся: сохра­ня­ем нашу про­грам­му с горо­ско­пом как файл с рас­ши­ре­ни­ем .py и отправ­ля­ем его на сер­вер в пап­ку cgi-bin (то, что лежит в этой пап­ке, никто не уви­дит):

Настраиваем сервер

Теперь научим сер­вер пони­мать, как рабо­тать с нашей про­грам­мой. Для это­го в корне сай­та нахо­дим файл .htaccess и добав­ля­ем в него такую строч­ку:

AddHandler cgi-script .py

Если у вас тако­го фай­ла нет — создай­те его и не забудь­те про точ­ку в самом нача­ле назва­ния.

Послед­нее, что оста­лось сде­лать, — настро­ить пра­ва досту­па у фай­ла с про­грам­мой. Нахо­дим её сре­ди фай­лов хостин­га и выстав­ля­ем пра­ва 755 или rwxrwxr-x:

Теперь с помо­щью Putty сно­ва под­клю­ча­ем­ся к сер­ве­ру и настра­и­ва­ем рабо­чее окру­же­ние. Это как буд­то вир­ту­аль­ная песоч­ни­ца, где мы смо­жем ста­вить нуж­ные моду­ли для Python, что­бы не мешать осталь­ным поль­зо­ва­те­лям сер­ве­ра.

Всё, что мы будем делать даль­ше, отно­сит­ся к хостин­гу SpaceWeb. Если у вас дру­гой хостинг, то, воз­мож­но, часть команд вам не при­го­дит­ся и 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.

Что дальше

Мы сде­ла­ли самые базо­вые вещи — запу­сти­ли скрипт на сер­ве­ре и сде­ла­ли так, что­бы он рабо­тал там посто­ян­но. Но вот как мож­но это улуч­шить:

  • сде­лать так, что­бы про­грам­ма сама пере­за­пус­ка­лась, если оста­но­вит­ся;
  • напи­сать отдель­ный сер­вис, через кото­рый мы смо­жем запус­кать и оста­нав­ли­вать бота;
  • при­кру­тить этот сер­вис к дру­го­му телеграм-боту, что­бы в ито­ге боты управ­ля­ли всем миром.