Как разместить Telegram-бота на собственном VPS сервере

Чат-боты в Телеграм нужны, чтобы рекомендовать пользователям товары и услуги, делиться актуальными новостями или поддерживать разговор. После создания бота необходимо выбрать правильный хостинг для его размещения. В статье рассмотрим, как сделать своего Telegram-бота и разместить его на виртуальном сервере. Подробно разберем весь процесс — от заказа и настройки виртуальной машины до создания и запуска бота.

бумажные самолетики

Заказываем VPS

Первым делом создадим VPS сервер, где разместим бота. Для начала выбираем дата-центр, где он будет расположен.

выбираем дата-центр

Далее выбираем параметры сервера. Для Telegram-бота хватит сервера с минимальной конфигурацией. В качестве операционной системы выберем Ubuntu 22.04 LTS.

выберем Ubuntu 22.04 LTS

Оплачиваем сервер, дожидаемся завершения установки и переходим во вкладку «Мои серверы». Здесь можно увидеть данные для подключения к нему. В случае с Linux подключение будет происходить через SSH под пользователем root.

подключение

Настройка сервера

Теперь можно приступить к настройке сервера. Подключаемся к серверу по SHH (для этого можно воспользоваться встроенным терминалом или удобным сторонним ПО, например, PuTTy).

Подключаемся к серверу

Для начала добавим нового пользователя, через которого будем вносить все необходимые изменения в настройки сервера (для примера — пользователь с именем ruvds-user). Выполним команду:

Выполним команду

После выполнения данной команды указываем пароль для этого пользователя и заполняем информацию о нем.

заполняем информацию

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

команда

Теперь можем отключиться от пользователя root и начать производить все настройки через нового пользователя. 

Повторно подключаемся по SSH, указав в качестве пользователя ruvds-user:

настройки

Этот пользователь обладает достаточными правами, чтобы выполнять все команды администратора, поэтому в целях безопасности можно закрыть SSH доступ для пользователя root. Для этого откроем файл sshd_config:

откроем файл sshd_config

В открывшемся файле находим PermitRootLogin, удаляем # в начале (если есть) и устанавливаем значение no.

находим PermitRootLogin

Сохраняем изменения комбинацией клавиш Ctrl + X и выполняем команду:

Сохраняем изменения

Также для стабильной работы Telegram-бота необходимо настроить фаервол на сервере и добавить разрешающее правило. Для начала обновим список пакетов системы с помощью команды:

обновим список пакетов системы

Запустим установку UFW:

установка UFW

Теперь добавим правило, которое позволит получать доступ к серверу только через SSH:

добавим правило

И включаем брандмауэр:

включаем брандмауэр

Также можно дополнительно ограничить доступ к серверу для адресов, с которых за последние 30 секунд производится большое количество попыток подключения. Сделать это можно с помощью команды:

ограничить доступ к серверу

Проверить активные правила можно командой:

Проверить активные правила

активные правила

Также необходимо установить приложение wget, с помощью которого будем загружать файлы со сторонних ресурсов:

загружать файлы со сторонних ресурсов

Установка Python и библиотеки telebot

Для обеспечения безопасности сервера создадим еще одного пользователя, через которого и будет работать Telegram-бот. Так как у данного пользователя будут ограниченные права, учетные данные от него можно смело предоставить специалисту, который будет заниматься настройкой бота.

Создаем пользователя с помощью команды:

Создаем пользователя

Как в случае с прошлым пользователем, указываем пароль и заполняем при необходимости данные о пользователе.

указываем пароль и заполняем при необходимости данные

Выходим из учетной записи текущего пользователя с помощью сочетания клавиш Ctrl + D и подключаемся повторно, но под только что созданным пользователем. После авторизации выполним следующие команды:

выполним следующие команды

Для создания Telegram-бота на Python можем использовать простую библиотеку telebot, которая предоставляет доступ к API Telegram Bot. Это позволит легко создать и запустить бота на виртуальном сервере, а затем управлять им.

Необходимо отметить, что создание бота в этом контексте относится к написанию кода на Python, который будет обрабатывать запросы и выполнять нужные действия. Создание бота как регистрацию его в мессенджере Telegram рассмотрим позже.

Python по умолчанию уже установлен на виртуальных серверах RUVDS с Ubuntu 22.04. Вы можете проверить это, запросив номер версии, установленной в системе:

номер версии

Для установки библиотеки telebot можем воспользоваться менеджером пакетов pip, который позволяет устанавливать множество программных продуктов, написанных на Python. Для начала установки pip загрузим специальный скрипт с помощью утилиты wget. Делается это в каталоге /tmp (или любом другом) на виртуальном сервере, загрузив установочный скрипт следующей командой:

загрузить установочный скрипт

После того как скрипт будет загружен, можем выполнить его с помощью Python для установки pip:

выполнить скрипт

Теперь, когда pip установлен, можем использовать его для установки библиотеки telebot:

установка библиотеки telebot

Подключение бота к Telegram

Теперь приступим к регистрации бота в Telegram. Для этого открываем мессенджер и в строке поиска вводим @BotFather.

в строке поиска вводим

Как только найдем @BotFather в списке результатов поиска, нажимаем на него, чтобы открыть диалог. В этом диалоге можем создать нового бота, следуя инструкциям BotFather. Для создания нового бота мы отправляем команду /newbot и следуем инструкциям, вводя имя и уникальное имя пользователя (username) для бота.

отправляем команду /newbot

После успешного создания бота BotFather предоставит токен доступа к API бота. Этот токен необходим для идентификации бота при взаимодействии с API Telegram.

Обязательно сохраните этот токен в безопасном месте, так как он является ключом к API нашего бота.

Размещение бота на VPS

Напишем код для Telegram-бота, который будет иметь минимальный функционал. Создадим два файла: main.py для основного скрипта и config.py для файла конфигурации с токеном, выданным @BotFather.

Так выглядит код нашего бота:

код нашего бота

Для создания бота на сервере подключаемся к виртуальной машине под учетной записью пользователя bot-user. Затем переходим в каталог, предназначенный для размещения файлов бота test_bot, и создаем сам файл:

создаем сам файл

Далее открываем только что созданный файл:

открываем только что созданный файл

Вставим в него код бота, сохраним и закроем. После этого создаем еще один файл:

создаем еще один файл:

И добавим в него строку:

добавим в него строку

Вместо слова token следует вставить токен, который сохраняли ранее при добавлении бота в @BotFather.

Также файл бота можно создать на своем ПК и затем загрузить на VPS. Сделать это можно с помощью команды scp: 

создать на своем ПК и затем загрузить на VPS

В случае с Linux можно воспользоваться WinSCP и скопировать файлы через протокол SFTP (SSH File Transfer Protocol).

Запуск бота

Для запуска бота перейдем в его каталог: 

перейдем в каталог

И выполним команду:

выполним команду

Если после выполнения команды нет ошибок, значит, бот запустился и работает в фоновом режиме. Проверим его работу, открыв в Telegram.

Проверим работу

Чтобы обеспечить постоянную работу Telegram-бота без привязки к активному сеансу в терминале, можем использовать команду nohup. Она позволяет запустить процесс в фоновом режиме и сохранить его работу после завершения текущего сеанса.

Для запуска бота в фоновом режиме из директории бота можем использовать следующую команду:

nohup

После выполнения этой команды бот будет запущен и продолжит работать независимо от подключения к серверу. Файл вывода (nohup.out) будет создан в текущей директории, куда будут записываться все сообщения и ошибки, связанные с работой бота.

Для возврата в командную строку из режима, в котором запущен Telegram-бот, необходимо нажать клавишу Enter.

Чтобы убедиться, что Telegram-бот работает, можем выполнить команду для вывода списка запущенных процессов с фильтром по имени файла main.py, установленным с помощью утилиты grep:

выполнить команду для вывода списка

Тут можем увидеть номер процесса бота (в данном случае это 757).

номер процесса бота

Если потребуется внести изменения в код бота, то для этого нужно сначала остановить работу бота, завершив процесс. Делается это командой:

остановить работу бота

И после внесения изменений, находясь в каталоге ~/test_bot/, вновь запускаем команду:

вновь запускаем команду

Запуск бота в качестве службы

Можно было бы остановиться на дальнейших настройках, ведь бот успешно запустился и работает. Но что произойдет если вдруг, наш VPS перезагрузится? Бот просто выключится и перестанет работать. Для его запуска вновь потребуется подключиться к серверу и вручную запустить его. Но этого можно избежать, настроив автоматический запуск при запуске системы.

Подключаемся к серверу под учетной записью с правами администратора и выполняем следующие команды:

выполняем следующие команды

В открывшемся окне прописываем следующий текст:

прописываем следующий текст

Где:

  • Description — имя службы;
  • WorkingDirectory — место расположения файлов бота;
  • ExecStart — команда для запуска бота;
  • User — пользователь, под которым запускается бот;
  • Restart=always — указание на перезапуск службы при возникновении ошибки.

Сохраняем все изменения и закрываем файл. Далее выполним команду:

Далее выполним команду

Включим новую службу:

Включим новую службу

И запустим ее:

запустим ее

Проверить состояние службы можно командой:

Проверить состояние службы

Если все без ошибок, значит, служба будет теперь автоматически запускаться с системой.

служба будет теперь автоматически запускаться

Бот, описанный в статье, представляет собой только начало. Используя этот пример как отправную точку, вы можете разработать бота с более разнообразным и насыщенным функционалом в зависимости от потребностей и задач.

Автор: специалист хостинг-провайдера RUVDS Игорь Закалин

Что будем искать? Например,ChatGPT

Мы в социальных сетях