Чат-боты в Телеграм нужны, чтобы рекомендовать пользователям товары и услуги, делиться актуальными новостями или поддерживать разговор. После создания бота необходимо выбрать правильный хостинг для его размещения. В статье рассмотрим, как сделать своего Telegram-бота и разместить его на виртуальном сервере. Подробно разберем весь процесс — от заказа и настройки виртуальной машины до создания и запуска бота.
Заказываем VPS
Первым делом создадим VPS сервер, где разместим бота. Для начала выбираем дата-центр, где он будет расположен.
Далее выбираем параметры сервера. Для Telegram-бота хватит сервера с минимальной конфигурацией. В качестве операционной системы выберем Ubuntu 22.04 LTS.
Оплачиваем сервер, дожидаемся завершения установки и переходим во вкладку «Мои серверы». Здесь можно увидеть данные для подключения к нему. В случае с Linux подключение будет происходить через SSH под пользователем root.
Настройка сервера
Теперь можно приступить к настройке сервера. Подключаемся к серверу по SHH (для этого можно воспользоваться встроенным терминалом или удобным сторонним ПО, например, PuTTy).
Для начала добавим нового пользователя, через которого будем вносить все необходимые изменения в настройки сервера (для примера — пользователь с именем ruvds-user). Выполним команду:
После выполнения данной команды указываем пароль для этого пользователя и заполняем информацию о нем.
Также необходимо этому пользователю предоставить права администратора, чтобы у него была возможность вносить изменения в настройки системы. Выполним команду:
Теперь можем отключиться от пользователя root и начать производить все настройки через нового пользователя.
Повторно подключаемся по SSH, указав в качестве пользователя ruvds-user:
Этот пользователь обладает достаточными правами, чтобы выполнять все команды администратора, поэтому в целях безопасности можно закрыть SSH доступ для пользователя root. Для этого откроем файл sshd_config:
В открывшемся файле находим PermitRootLogin, удаляем # в начале (если есть) и устанавливаем значение no.
Сохраняем изменения комбинацией клавиш Ctrl + X и выполняем команду:
Также для стабильной работы Telegram-бота необходимо настроить фаервол на сервере и добавить разрешающее правило. Для начала обновим список пакетов системы с помощью команды:
Запустим установку 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:
Подключение бота к Telegram
Теперь приступим к регистрации бота в Telegram. Для этого открываем мессенджер и в строке поиска вводим @BotFather.
Как только найдем @BotFather в списке результатов поиска, нажимаем на него, чтобы открыть диалог. В этом диалоге можем создать нового бота, следуя инструкциям BotFather. Для создания нового бота мы отправляем команду /newbot и следуем инструкциям, вводя имя и уникальное имя пользователя (username) для бота.
После успешного создания бота BotFather предоставит токен доступа к API бота. Этот токен необходим для идентификации бота при взаимодействии с API Telegram.
Обязательно сохраните этот токен в безопасном месте, так как он является ключом к API нашего бота.
Размещение бота на VPS
Напишем код для Telegram-бота, который будет иметь минимальный функционал. Создадим два файла: main.py для основного скрипта и config.py для файла конфигурации с токеном, выданным @BotFather.
Так выглядит код нашего бота:
Для создания бота на сервере подключаемся к виртуальной машине под учетной записью пользователя bot-user. Затем переходим в каталог, предназначенный для размещения файлов бота test_bot, и создаем сам файл:
Далее открываем только что созданный файл:
Вставим в него код бота, сохраним и закроем. После этого создаем еще один файл:
И добавим в него строку:
Вместо слова token следует вставить токен, который сохраняли ранее при добавлении бота в @BotFather.
Также файл бота можно создать на своем ПК и затем загрузить на VPS. Сделать это можно с помощью команды scp:
В случае с Linux можно воспользоваться WinSCP и скопировать файлы через протокол SFTP (SSH File Transfer Protocol).
Запуск бота
Для запуска бота перейдем в его каталог:
И выполним команду:
Если после выполнения команды нет ошибок, значит, бот запустился и работает в фоновом режиме. Проверим его работу, открыв в Telegram.
Чтобы обеспечить постоянную работу Telegram-бота без привязки к активному сеансу в терминале, можем использовать команду nohup. Она позволяет запустить процесс в фоновом режиме и сохранить его работу после завершения текущего сеанса.
Для запуска бота в фоновом режиме из директории бота можем использовать следующую команду:
После выполнения этой команды бот будет запущен и продолжит работать независимо от подключения к серверу. Файл вывода (nohup.out) будет создан в текущей директории, куда будут записываться все сообщения и ошибки, связанные с работой бота.
Для возврата в командную строку из режима, в котором запущен Telegram-бот, необходимо нажать клавишу Enter.
Чтобы убедиться, что Telegram-бот работает, можем выполнить команду для вывода списка запущенных процессов с фильтром по имени файла main.py, установленным с помощью утилиты grep:
Тут можем увидеть номер процесса бота (в данном случае это 757).
Если потребуется внести изменения в код бота, то для этого нужно сначала остановить работу бота, завершив процесс. Делается это командой:
И после внесения изменений, находясь в каталоге ~/test_bot/, вновь запускаем команду:
Запуск бота в качестве службы
Можно было бы остановиться на дальнейших настройках, ведь бот успешно запустился и работает. Но что произойдет если вдруг, наш VPS перезагрузится? Бот просто выключится и перестанет работать. Для его запуска вновь потребуется подключиться к серверу и вручную запустить его. Но этого можно избежать, настроив автоматический запуск при запуске системы.
Подключаемся к серверу под учетной записью с правами администратора и выполняем следующие команды:
В открывшемся окне прописываем следующий текст:
Где:
- Description — имя службы;
- WorkingDirectory — место расположения файлов бота;
- ExecStart — команда для запуска бота;
- User — пользователь, под которым запускается бот;
- Restart=always — указание на перезапуск службы при возникновении ошибки.
Сохраняем все изменения и закрываем файл. Далее выполним команду:
Включим новую службу:
И запустим ее:
Проверить состояние службы можно командой:
Если все без ошибок, значит, служба будет теперь автоматически запускаться с системой.
Бот, описанный в статье, представляет собой только начало. Используя этот пример как отправную точку, вы можете разработать бота с более разнообразным и насыщенным функционалом в зависимости от потребностей и задач.
Автор: специалист хостинг-провайдера RUVDS Игорь Закалин