Как запустить Python Telegram бота на VPS
Приветствую всех. Из этой статьи вы узнаете как запустить Telegram бота на виртуальном сервере, и настроить службу для его авто запуска и перезапуска.
Телеграм бот
#main.py import telebot bot = telebot.TeleBot("ТОКЕН") @bot.message_handler(func=lambda message: message.text.lower() in ['привет', 'здравствуйте']) def send_welcome(message): bot.reply_to(message, "Здравствуйте!") @bot.message_handler(func=lambda message: True) def echo_all(message): bot.reply_to(message, 'Я тебя не понимаю(') bot.infinity_polling()
Виртуальный сервер
Для демонстрации я буду использовать виртуальный сервер от Beget стоимостью 210 рублей в месяц. Вы можете использовать другого хостинг провайдера, или выбрать другую конфигурацию, в зависимости от вашего проекта.

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

Для этого можно использовать программу PuTTY или клиент OpenSSH, который входит в состав Windows 10. Для подключения по SSH выполните следующую команду:
ssh root@213.139.209.81
И введите пароль который вы указали при создании VPS.
Подготовка сервера
После того как вы подключились к серверу, выполните команды которые обновят списки, и устаревшие пакеты до последней версии.
sudo apt update sudo apt upgrade
Загрузка и запуск бота
Перейдите в каталог home и создайте папку для вашего проекта выполнив команды.
cd /home mkdir ramziv_bot cd ramziv_bot
Зайдите панель управления VPS и откройте Файловый менеджер.

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

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

Авто запуск и перезапуск телеграм бота
Создайте systemd службу для бота.
sudo nano /lib/systemd/system/ramziv_bot.service
С конфигурацией:
[Unit] Description=Ramziv - Telegram Bot After=syslog.target After=network.target [Service] Type=simple WorkingDirectory=/home/ramziv_bot/ ExecStart=/usr/bin/python3 /home/ramziv_bot/main.py RestartSec=60 Restart=always [Install] WantedBy=multi-user.target
Нажмите CTRL+S и CTRL+X что бы сохранить и выйти.
Выполните эти две команды что бы запустить службу.
sudo systemctl enable ramziv_bot sudo systemctl start ramziv_bot
Ваш бот запушен. Перейдите в Телеграм и убедитесь в этом.
Заключение
Ваш бот будет всегда запускаться при старте системы, и перезапускается при возникновении ошибки. Для примера вы можете специально вызвать исключения в одной из функций обернутой обработчиком, и отследить ее в журнале командой:
sudo journalctl -u ramziv_bot.service #Вывод #Jun 13 12:35:31 objmnuqxoa python3[1069]: File "/home/ramziv_bot/main.py", line 7, in send_welcome #Jun 13 12:35:31 objmnuqxoa python3[1069]: number = 1/0 #Jun 13 12:35:31 objmnuqxoa python3[1069]: ZeroDivisionError: division by zero
Комментарии
Tima
14 ноября 2023
Спасибо, за интересную статью. Помог. Часть с развёртыванием бота понятная и чёткая, мне нравится.
Как загрузить Telegram бота на хостинг
Telegram является одним из самых популярных мессенджеров в мире: каждый месяц 700 миллионов пользователей используют его для общения, управления своими проектами и бизнесом. Важной функцией Телеграма (ТГ) считается возможность создания чат-ботов — виртуальных помощников, которые могут автоматизировать взаимодействие с клиентами, разгрузить службу поддержки, обеспечить быстрый и удобный для аудитории доступ к информации. Однако, чтобы ваш телеграм-бот работал круглосуточно, необходимо разместить его на сервере у провайдера хостинга. В статье поэтапно рассказываем, как поставить бота на хостинг и настроить сервер, чтобы организовать его бесперебойную работу.
Пошаговая инструкция, как запустить бота на хостинге
Сделать универсальное руководство по загрузке телеграм-бота на хостинг нельзя, поскольку для создания ботов используются разные технологии и языки программирования. Чаще всего виртуальных ассистентов для Телеграма пишут на Python или NodeJS. Наша инструкция основана на первом варианте: мы опишем, как выбрать хостинг для чат-бота на Python, установить нужные модули на сервер, залить, запустить, а также поставить бота на автоисполнение. Однако общая схема действий по установке, размещению и запуску может быть применима к любому телеграм-боту.

Изображение от redgreystock на Freepik.
Выбор хостинга для телеграм-бота
Выбирая, где разместить своего чат-бота, следует обращать внимание на возможности и ресурсы, которые поставляет хостинг-провайдер. Установить и запустить телеграм-бота можно и бесплатно: например, через облачный сервис Heroku. Но бесплатный хостинг крайне ограничен и часто небезопасен. Если у вас простой бот, который отвечает на триггеры заготовленными репликами, его можно залить на обычный shared hosting. Главное, найти тариф с поддержкой Python и Telegram API.
Если же ваш помощник основан на нейросети и ожидается большой поток клиентов, лучше остановиться на аренде VPS (Virtual Private Server). На виртуальном сервере подключение будет стабильнее за счет изолированности вычислительных мощностей, а кроме того, VPS легче масштабировать. Вам не понадобится сайт и домен, чтобы его арендовать: подключиться можно будет по выделенному IP-адресу.
Настройка сервера для telegram-бота
Допустим, вы заказали подходящий сервер и удаленно подключились к нему по SSH. Прежде чем размещать на нем файлы нашего бота, нужно установить зависимости, которые потребуются для его работы. В частности, это язык Python и библиотека РуTelegramBotAPI. Мы покажем, как поставить эти компоненты на примере ОС Ubuntu. Введите в терминал:
sudo apt install python3
sudo apt install python3-pip
pip3 install pyTelegramBotAPI
Мы взяли третью версию «Питона», но если ваш бот написан на другой, то загрузите нужную. Теперь можно заливать файл на сервер.
Размещение чат-бота
Сначала создадим папку, в которой будем размещать телеграм-бота:
cd /home
mkdir имя_папки
cd имя_папки
Где имя_папки — это придуманное вами название директории (на латинице). Команда cd позволит нам перейти в эту директорию. Далее необходимо загрузить сами файлы. Это можно сделать через сторонний FTP-клиент (например, FileZilla) или панель управления VPS/VDS, если она имеется. В любом случае вам понадобятся данные для входа на сервер: логин, пароль и IP-адрес (вы должны были использовать их, когда устанавливали SSH-подключение). Откройте выбранную программу, найдите папку с указанным именем и залейте в нее файлы телеграм-бота.
Запуск бота
Чтобы запустить бота, примените команду следующего вида, подставив свое значение:
python3 имя_файла.ру
Обычно проект телеграм-бота хранится в файле с названием main.py или bot.py. У вас он может иметь другое имя, главное, чтобы расширение было «ру».
После этой команды ваш бот будет запущен. Вы можете убедиться в этом, зайдя в Телеграм и обратившись к нему в чате. Но есть одно но: сейчас ассистент работает, как приложение. Если вы закроете консоль, куда ввели команду для запуска, чат-бот отключится. Исправим это на следующем шаге.
Настройка автозапуска телеграм-бота
Ставить нашего бота на автовыполнение мы будем с помощью менеджера systemd. Чтобы создать службу, введите команду вида:
sudo nano /lib/systemd/system/example_bot.service
Замените example_bot на собственное значение. Теперь нужно прописать конфигурацию юнита. Она может выглядеть следующим образом:
[Unit]
Description=Example — Telegram Bot \\ В переменной «Description» вы можете указать название своего бота, это просто описание, чтобы при открытии файла вы сразу поняли, к чему относятся нижеследующие параметры.
After=syslog.target
After=network.target
[Service]
Type=simple
WorkingDirectory=/home/имя_папки/
ExecStart=/usr/bin/python3 /home/имя_папки/имя_файла.py \\ Здесь и выше укажите названия, которые установили для директории и файла с ботом.
RestartSec=60
Restart=always
[Install]
WantedBy=multi-user.target
Чтобы сохранить изменения и выйти, нажмите CTRL+S и CTRL+X. Теперь остается только запустить саму службу:
sudo systemctl enable example_bot
sudo systemctl start example_bot
Где example_bot — это название службы, которое вы указали в начале данного шага. Готово! Ваш телеграм-бот будет работать в фоновом режиме, даже когда вы отключитесь от сервера.
Заключение
Поставить на хостинг чат-бота для Телеграма может показаться сложной задачей, особенно для новичков. Но если вы будете следовать инструкции, которую мы написали, вам удастся разместить файлы и установить зависимости на сервере, чтобы ваш виртуальный ассистент работал 24/7.
Создание telegram-ботов на Python
Если вы хотите просто попробовать свои силы в размещении телеграм-бота и пока только знакомитесь, для ваших целей хватит базового тарифа. Когда бот вырастет, и ресурсов перестанет хватать, тариф можно будет увеличить.
Для готового бота подобрать ресурсы сложнее, и если вы не уверены, задайте вопрос нашей поддержке через форму подбора тарифа. Чем подробнее вы опишете ваш проект, тем точнее специалисты смогут подобрать подходящий тариф.
Операционная система подойдет любая, но если это ваш первый проект, то лучше выбрать Ubuntu: она проще в администрировании, чем CentOS.
Подключитесь к боксу по SSH и обновите ОС — с момента создания образа на нашей площадке могло выйти несколько обновлений для операционной системы и других пакетов, в которых могли быть закрыты обнаруженные уязвимости.
Для Ubuntu обновление проводится в 2 команды:
root@box-10000:~# apt-get update root@box-10000:~# apt-get upgrade
Их можно совместить в одну:
root@box-10000:~# apt-get update && apt-get upgrade
Когда все основные компоненты системы будут обновлены, можно приступать к подготовке бокса к размещению телеграм-бота.
Создание пользователя для бота
Запускать бота под пользователем root небезопасно. Сделайте отдельного пользователя для этих целей.
Запустите команду adduser, передав ей аргументом имя будущего пользователя.
root@box-10000:~# adduser bot
Далее команда предложит придумать пароль, повторить его ещё раз и заполнить информацию о новом пользователе. Все поля, кроме пароля, не обязательны, можно жать Enter для подстановки значения по умолчанию.
Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for username Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n]
Стать новым пользователем можно командой su:
root@box-10000:~# su - bot bot@box-10000:~$
Переключиться обратно к root-пользователю можно с помощью команды logout, либо сочетанием клавиш Ctrl+D, которое сразу выполнит эту команду:
bot@box-10000:~$ logout root@box-10000:~#
Подготовка окружения
Проверьте версию Python, на котором будет запускаться бот:
root@box-10000:~# python3 --version Python 3.8.5
Если вы будете размещать готового бота, версия Python должна соответствовать той, на которой бот был разработан.
Для создания нового бота подойдет любая версия.
Если у вас есть готовый бот, написанный на более старой версии языка, установите интерпретатор для него.
Установите менеджер пакетов pip. Он пригодится в дальнейшем для загрузки библиотек.
В Ubuntu установка производится так:
root@box-10000:~# apt install python3-pip
Следующий шаг — создание виртуального окружения. Это нужно для того, чтобы устанавливать разные модули разным проектам и избегать их конфликтов.
Станьте пользователем bot и установите модуль virtualenv командой:
bot@box-10000:~$ pip3 install virtualenv --user
Ключ —user поставит его локально для пользователя bot.
После установки добавьте виртуальное окружение в системные пути пользователя:
bot@box-10000:~$ export PATH=$HOME/.local/bin:$PATH
Создайте новое окружение:
bot@box-10000:~$ virtualenv --system-site-packages python
python — произвольное имя нового виртуального окружения
Ключ —system-site-packages задействует внутри окружения модули, уже установленные в системе.
И активируйте его:
bot@box-10000:~$ source ~/python/bin/activate (python) bot@box-10000:~$
Выйти из окружения можно с помощью команды deactivate:
(python) bot@box-10000:~$ deactivate bot@box-10000:~$
После создания и активации окружения можно устанавливать модули, которые нам потребуются для запуска бота. В первую очередь это pyTelegramBotAPI. Установим его:
(python) bot@box-10000:~$ pip3 install pyTelegramBotAPI
Регистрация бота
Создание любого бота начинается сообщения отцу ботов в телеграме — @BotFather.
Он может управлять всеми существующими ботами, с помощью множества команд. Их список в любой момент можно вызвать командой /help

Для создания нового бота отправьте команду /newbot. После ответов на пару вопросов бот будет создан, а отец ботов пришлёт токен. Его нужно будет указывать в коде для взаимодействия с BotAPI.
Токен для каждого бота уникален. Нельзя, чтобы он попал в открытый доступ. Однако если это произошло, его всегда можно сменить через ботопапу командой /revoke.
Так будет выглядеть диалог создания бота:

Создание бота
Окружение подготовлено, бот зарегистрирован, можно начать писать его код.
Создайте директорию для бота, в ней будут все файлы проекта:
bot@box-10000:~$ mkdir tgbot
В директории создайте конфигурационный файл, в котором будут храниться некоторые данные проекта, например, токен:
bot@box-10000:~$ vim tgbot/config.py
Помимо vim можно использовать vi или nano. Далее добавьте в файл токен, в виде такой строки:
TOKEN #bot-launch" name="bot-launch">Запуск ботаВ примере выше бот запускается прямым вызовом интерпретатора Python в консоли, но работать он будет, пока активна сессия SSH. Ещё можно запустить его в tmux или screen, но нужно будет следить за тем, чтобы бот всегда работал и поднимать его. Этот процесс можно упростить с помощью системных демонов linux.
Для этого создайте сервис:
root@box-10000:~# vim /etc/systemd/system/bot.serviceИ добавьте в него такой код:
[Unit] Description=Awesome Bot After=syslog.target After=network.target [Service] Type=simple User=bot WorkingDirectory=/home/bot/tgbot ExecStart=/usr/bin/python3 /home/bot/tgbot/bot.py Restart=always [Install] WantedBy=multi-user.targetПосле этого выполните 3 команды друг за другом. Первая перезапустит менеджер служб, вторая включит демона, третья — запустит бота:
root@box-10000:~# systemctl daemon-reload root@box-10000:~# systemctl enable bot root@box-10000:~# systemctl start botПроверить, что бот работает, можно командой:
root@box-10000:~# systemctl status botЕё вывод будет примерно таким:
● bot.service - Awesome Bot Loaded: loaded (/etc/systemd/system/bot.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2021-03-29 05:52:50 MSK; 3min 12s ago Main PID: 2087 (python3) Tasks: 4 (limit: 2344) Memory: 19.9M CGroup: /system.slice/bot.service └─2087 /usr/bin/python3 /home/bot/tgbot/bot.pyСамое важное здесь — состояние бота, в строке «Active». Если бот вдруг остановился, его можно снова запустить:
root@box-10000:~# systemctl start botКогда вы вносите изменения в код бота, сервис нужно перезапускать:
root@box-10000:~# systemctl restart botЧтобы отключить автоматический перезапуск бота, нужно его остановить и отключить демона:
root@box-10000:~# systemctl stop bot root@box-10000:~# systemctl disable botДокументация
- Вводная статья на сайте Telegram
- API telegram-ботов
- Библиотека pyTelegramBotAPI
Запускаем телеграм-бота на сервере
Тогда он будет работать круглые сутки, а вы — отдыхать.
Не так давно мы создали телеграм-бота на Python: можно было написать ему свой знак зодиака, а он в ответ давал предсказание о долгой счастливой жизни. Но у бота есть недостаток: он работает, пока запущена программа на нашем компьютере. Если мы её остановим или выключим компьютер, бот тоже перестанет отвечать на сообщения.
Вот что мы сделаем, чтобы бот работал независимо от всего:
- Выберем сервер.
- Подготовим программу для работы на нём.
- Зальём программу на сервер.
- Настроим сервер, чтобы он исполнял программу.
Выбираем сервер
Нам нужен сервер, который умеет работать с Python и запускать файлы программы автоматически. На самом деле он у нас уже есть — на нём крутится сайт mihailmaximov.ru. Если вы всё пропустили — держите подборку:
- что такое домен и как его получить;
- делаем страницу «О себе»;
- как опубликовать свой сайт в интернете.
Тот хостинг, который мы выбрали для проектов, уже умеет запускать Python-файлы. Если вы пользуетесь другим сервисом, то проверьте, умеет ли он то же самое.
Готовим программу и отправляем её на сервер
Единственное, что нужно добавить в наш код телеграм-бота, — специальную команду интерпретатору, чтобы он знал, как работать с нашим файлом. Но перед этим нужно проверить, какая версия Python на нём установлена.
Чтобы это узнать, соединимся с сервером по протоколу SSH и спросим у него напрямую. Для этого используем программу Putty, а настройки подключения возьмём в личном кабинете хостинга:

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

Теперь добавляем в самое начало нашего файла с программой такую строчку:
В статье о том, как опубликовать сайт в интернете, мы рассказывали, как залить файлы на сервер. Это умение нам сейчас пригодится: сохраняем нашу программу с гороскопом как файл с расширением .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.
Что дальше
Мы сделали самые базовые вещи — запустили скрипт на сервере и сделали так, чтобы он работал там постоянно. Но вот как можно это улучшить:
- сделать так, чтобы программа сама перезапускалась, если остановится;
- написать отдельный сервис, через который мы сможем запускать и останавливать бота;
- прикрутить этот сервис к другому телеграм-боту, чтобы в итоге боты управляли всем миром.
Апскиллинг, как говорится
Апскиллинг — это, например, переход с уровня junior на уровень middle, а потом — senior. У «Яндекс Практикума» есть курсы ровно для этого: от алгоритмов и типов данных до модных фреймворков.

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
