Будни техпода. Как разместить Telegram-бота на виртуальном сервере

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.


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

А не возникало ли у вас желания запустить собственный Telegram-бот на своей удалённой виртуалке? Если да, то добро пожаловать под кат, где мы разбираем весь процесс от заказа и подготовки виртуальной машины до запуска бота в работу. Скажем сразу, данная статья — для тех, кто мало знаком с работой Linux-систем и написанием кода Telegram-ботов, но хочет сделать по этому пути один из первых своих шагов.

▍ Заказываем виртуальный сервер


Итак, переходим к созданию виртуального сервера, на котором будет размещаться наш бот. Во-первых, выбираем дата-центр.


Затем указываем конфигурацию нашего будущего VPS. Для хостинга простенького Telegram-бота подойдёт сервер в практически минимальной комплектации под управлением Ubuntu 22.04.


После того, как закончится установка операционной системы, новый VPS появится в списке серверов. Там же указана информация для подключения к нему по SSH: IP-адрес, учётные данные для авторизации — имя пользователя и пароль.


▍ Предварительная настройка операционной системы


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

Во-первых, мы добавим в систему новую учётную запись, которую будем использовать в качестве администратора вместо пользователя root, обладающего абсолютными правами доступа ко всем ресурсам и функциям системы. Команды, требующие для своего выполнения повышения прав до уровня root, мы будем запускать от имени нового пользователя с использованием команды sudo (superuser do).

Итак, подключаемся к нашему серверу по SSH. Для подключения будем использовать соответствующее приложение — Putty. Загружаем дистрибутив, устанавливаем программу и запускаем её. В строку Host Name (or IP address) вводим IP-адрес нашего VPS и нажимаем Open.


В открывшемся терминале вводим имя пользователя и пароль, которые берём в настройках сервера из личного кабинета RUVDS. Первый вход производится с использованием учётной записи root.


После успешной авторизации в системе создаём нового пользователя. В нашем примере его имя будет ruvds-user.

adduser ruvds-user

При создании нового пользователя нужно будет придумать и дважды ввести для него новый пароль. Остальные поля можно пройти, просто нажимая клавишу Enter.


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

usermod -aG sudo ruvds-user

На этом миссия учётной записи root заканчивается, поэтому отключаемся от сервера, используя комбинацию клавиш Ctrl d.

Теперь снова запускаем Putty, вводим IP-адрес и авторизуемся на сервере под именем нового пользователя, которым в нашем примере является учётная запись ruvds-user.


Наш новый пользователь обладает достаточным уровнем полномочий для того, чтобы исполнять команды от имени администратора системы. Исходя из этого, мы закроем доступ по SSH для учётной записи root. Для чего при помощи текстового редактора nano необходимо отредактировать файл sshd_config, который располагается в каталоге /etc/ssh/.

cd /etc/ssh/
sudo nano sshd_config

В тексте файла находим строку, содержащую название параметра PermitRootLogin, удаляем в начале строки символ #, если он есть. Данный символ означает, что такая строка является закомментированной, то есть не учитывается в текущей конфигурации. После чего устанавливаем значение параметра в no вместо yes.


Теперь закрываем текстовый редактор с сохранением внесённых изменений. Для этого используем комбинацию клавиш Ctrl x, затем нажимаем y и Enter. И наконец, чтобы изменения вступили в силу, перезапускаем службу SSH при помощи команды:

sudo service ssh restart

Теперь для защиты нашего сервера активируем на нём межсетевой экран. В операционных системах Ubuntu и Debian для управления брандмауэром часто применяется утилита iptables. Её более простым интерфейсом в части настройки межсетевого экрана является UFW — Uncomplicated Firewall. Чтобы открыть доступ к серверу через какое-либо приложение или порт, необходимо добавить в UFW разрешающее правило для этого приложения или порта.

Но сначала брандмауэр нужно установить. Для чего обновляем списки пакетов в системе:

sudo apt update

Затем запускаем инсталляцию UFW:

sudo apt install ufw

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

sudo ufw app list

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


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

sudo ufw allow OpenSSH

Теперь включим брандмауэр:

sudo ufw enable

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

sudo ufw limit ssh

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

sudo ufw status



Дополнительно устанавливаем консольное приложение wget, которое чуть позже понадобится для загрузки файлов со сторонних ресурсов:

sudo apt install wget

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


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

Нового пользователя назовём bot-user (вы, конечно же, можете выбрать другое имя):

sudo adduser bot-user


После чего закрываем терминал с использованием комбинации клавиш Ctrl d и снова подключаемся к серверу, но теперь уже под учётной записью нового пользователя. Если получилось успешно авторизоваться в системе, переходим в домашний каталог и там создаём директорию, в которой будут находиться файлы нашего Telegram-бота:

cd ~
mkdir test_bot

Наш Telegram-бот будет работать на Python, для чего наиболее простым методом выглядит использование простой библиотеки telebot, которая предоставляет доступ к API Telegram Bot. С её помощью мы сможем создать Telegram-бота, запустить его на виртуальном сервере и впоследствии управлять им. Здесь не следует путать создание бота, то есть его тела — файла, содержащего код в нашем случае на Python, и создание бота как его регистрацию в мессенджере Telegram, к которой мы ещё вернёмся. Непосредственно сам Python предустановлен по умолчанию на виртуальных серверах RUVDS с Ubuntu 22.04. Убедиться в этом можно через запрос версии Python, проинсталлированной в системе:

python3 --version

Судя по выводу команды, на нашем VPS уже стоит Python версии 3.10.12.


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

cd /tmp
wget https://bootstrap.pypa.io/get-pip.py

После чего запускаем его:

python3 get-pip.py

После того, как скрипт отработал, проверяем версию проинсталлированного менеджера pip:

python3 -m pip --version

В нашем случае вывод команды показал версию менеджера пакетов как 23.3.2.



И теперь запускаем установку библиотеки telebot:

python3 -m pip install pyTelegramBotAPI

▍ Регистрация бота в Telegram


Пришло время зарегистрировать нашего бота в Telegram. Открываем мессенджер и в строке поиска набираем @BotFather — это специальный сервис для управления ботами в Telegram.


Переходим в @BotFather и отправляем ему сообщение с текстом /newbot. В ответ на наше сообщение сервис попросит ввести название для создаваемого бота. Оно не обязательно должно быть уникальным, поэтому мы назвали наш просто — Our First Test Bot.


Затем @BotFather предложит придумать и ввести для нашего бота username. Это своего рода уникальный идентификатор для бота, заканчивающийся на bot, который не должен быть никем использован ранее. В нашем случае мы ввели our_first_test_bot.


Если придуманный идентификатор соответствует требованиям сервиса, @BotFather выведет соответствующее сообщение, где помимо прочего указан токен для API, который обязательно нужно сохранить в надёжном и безопасном месте. Чуть позже этот токен нам очень пригодится.


▍ Размещение бота на сервере


Пришло время написать код нашего Telegram-бота и запустить его на уже подготовленном виртуальном сервере. Итак, наш бот будет иметь самый минимальный функционал. Он будет уметь отвечать «Привет!» в ответ на сообщение /start и сможет представляться «Я — тестовый бот!» в ответ на сообщение /help. Всё! Остановимся на том, что он больше ничего умеет и будет игнорировать все другие сообщения, отправляемые ему.
Код бота мы разместим в двух файлах:

  • main.py — основной скрипт, содержащий всю логику нашего бота. В файле мы опишем реакцию бота на сообщения /start и /start, больше — ничего. Такая вот логика.
  • config.py — файл конфигурации, содержащий токен, который при создании бота выдал нам @BotFather (см. выше).

Код нашего простейшего бота выглядит так:

import telebot
from config import botkey
bot = telebot.TeleBot(botkey)
@bot.message_handler(commands=['start'])
def handle_message(message):
    bot.send_message(message.chat.id, 'Привет❗️')
@bot.message_handler(commands=['help'])
def handle_message(message):
    bot.send_message(message.chat.id, '						
Источник: https://habr.com/ru/companies/ruvds/articles/786014/


Интересные статьи

Интересные статьи

Хабр, привет! В лабораторию Центра компетенций «ИТ-инфраструктура» КРОК поступил новый пациент — 1U сервер OpenYard RS1B7I из семейства RS101.Результаты обследования тестирования сервера ждут вас под ...
Многим B2B-продуктам необходима интеграция с другими системами, но не у всех она есть. Поэтому хочу рассказать, что необходимо для старта, и какую пользу такая интеграция принесет продукту. Разберу эт...
Предполагается, что для настройки WireGuard сервера, нужно вручную сгенерировать ключи, выбрать подсеть и задать ещё несколько параметров. Потом для каждого клиента также генерировать ключи, присваива...
Дано: домашний сервер под управлением Debian 11 с установленным гипервизором Xen.Требуется: развернуть Kubernetes-кластер для получения опыта, связанного с настройкой и управлением Kubernetes-кластера...
В этом материале будет кратко рассказано, почему Shift-Left – это не всегда хорошо и почему не стоит забывать о традиционной модели тестирования. Рассмотрим паттерны поведения QA при тестировании обыч...