Запускаем телеграм-бота на сервере

Тогда он будет работать круглые сутки, а вы — отдыхать.

Запускаем телеграм-бота на сервере

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

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

  1. Выберем сервер и настраиваем хостинг.
  2. Подготовим программу для работы на нём.
  3. Зальём Python-программу на сервер.
  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

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

Последнее, что осталось сделать, — настроить права доступа у Python-файла с программой. Находим её среди файлов хостинга и выставляем права 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.

Что дальше

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

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

Художник:

Даня Берковский

Корректор:

Ирина Михеева

Вёрстка:

Маша Климентьева

Вам может быть интересно
Что такое Bootstrap и как его подключить
Что такое Bootstrap и как его подключить

С котиками!

medium
Код и IDE (integrated development environment)
Код и IDE (integrated development environment)

Обзор инструментов крутых программистов.

medium
Как удалить историю разговоров с Google Assistant и Siri
Как удалить историю разговоров с Google Assistant и Siri

Эти голосовые помощники знают о нас слишком много.

Текстовый дождь, как в «Матрице»
Текстовый дождь, как в «Матрице»

Приятная кодовая безделушка.

medium
Ставим Invoke AI — сразу 12 нейросетей для работы с картинками с удобным веб-интерфейсом
Ставим Invoke AI — сразу 12 нейросетей для работы с картинками с удобным веб-интерфейсом

Поднимите мне сети

hard
Задачка с собеседования: как перевести число в римскую систему счисления и обратно
Задачка с собеседования: как перевести число в римскую систему счисления и обратно

Простая задача с приятным решением

easy
Пишем программу, которая одобрит вам кредит
Пишем программу, которая одобрит вам кредит

Или не одобрит, хехех.

easy
Устанавливаем суверенный облачный офис
Устанавливаем суверенный облачный офис

Пошаговая установка OnlyOffice на ваш собственный или арендованный сервер

hard
Что означает ошибка Uncaught Error: Cannot read private member from an object whose class did not declare it
Что означает ошибка Uncaught Error: Cannot read private member from an object whose class did not declare it

Что будет, если обратиться к приватному полю в основном коде

easy
hard