Всем привет! На связи Игорь из PQ.Hosting.

Хочу поделиться с вами одним наблюдением. Я довольно часто попадаю в такую ситуацию, когда ищу какую-нибудь базовую инструкцию и натыкаюсь на такие гайды, в которых явно чего-то не хватает. Один шаг пропущен, другой описан слишком вскользь, как будто это и так всем должно быть понятно. В итоге попытки следовать такой инструкции превращаются в сплошные боли и страдания. 

Мы с командой решили исправить это хотя бы в нашей сфере хостинга и серверов. С сегодняшнего дня запускаем рубрику «База», в которой будем максимально понятно и подробно объяснять то, о чём вы, возможно, стеснялись спросить.

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

Поехали!

Этап 1: подготовка сервера

Для начала нужно будет немного подготовить нашу VPS к установке бота. Кстати, для этого я по традиции буду использовать сервер от PQ.Hosting. Если захотите арендовать производительную и надежную машину, то обязательно переходите на сайт и выбирайте подходящий тариф. И не забудьте использовать промокод HABR — по нему вы получите скидку 15% на заказ виртуальногго сервера

Шаг 1. Обновление системы. Лучше, чтобы перед установкой все пакеты были свежими. Поэтому подключаемся к VPS по SSH и обновляемся: 

sudo apt update && sudo apt upgrade

Шаг 2. Создание пользователя для бота. Это нужно для безопасности — сидеть из под рута не самая лучшая затея. А с отдельным юзером мы сможем работать более изолировано. Не будем лишний раз креативить и для понятности назовем его botuser:

sudo adduser botuser

После выполнения команды вам предложит создать отдельный пароль для пользователя, а также внести дополнительную информацию. Ее можно оставить пустой — просто нажимаете Enter. 

Шаг 3. Установка Python 3 и pip. Свежая версия Ubuntu поставляется с Python 3. Вы можете проверить установленную версию «питона» с помощью команды: 

python3 --version. 

Но есть важный момент: в Ubuntu 24.04 (а также и в некоторых других дистрах с Python 3.12 и новее) не получится устанавливать необходимые библиотеки через менеджер pip в системный Python. Все этого сделано для того, чтобы не было конфликтов с пакетами из apt. Но ничего страшного: все это решается установкой через виртуальное окружение: 

sudo apt install -y python3 python3-pip python3-venv

Шаг 4. Заходим под пользователем — в моем случае это botuser. Но если вы использовали другое имя, то вставьте его: 

 sudo -iu botuser

Шаг 5. Создание и активация виртуального окружения. Для этого потребуется выполнить две команды: 

python3 -m venv ~/telegram-bot-venv

source ~/telegram-bot-venv/bin/activate

Шаг 6. Установка библиотеки. Здесь я использую самую популярную либу python-telegram-bot, но вы также можете установить Aiogram — на шаги деплоя этот выбор не повлияет. 

pip install python-telegram-bot

На этом этапе система готова. Поэтому немного отвлечемся от терминала и перейдем в Telegram. 

Этап 2: создание и деплой бота

Шаг 1. Получение токена Bot API. Для этого нам понадобится официальный бот BotFather — его можно найти по этой ссылке. Перейдите по ней, нажмите Start, выберите команду /newbot и следуйте дальнейшим инструкциям.

В итоге вы должны получить сообщение примерно такого вида, в котором будет содержаться API-токен.  

Шаг 2. Размещение бота на сервере. Снова возвращаемся в терминал и создаем отдельную папку для бота — так удобнее будет работать. 

mkdir -p /home/botuser/telegram-bot

После переходим в нее

cd /home/botuser/telegram-bot

Далее создаем файл bot.py. Я использую для таких задач nano — люблю минимализм :) Но вы можете использовать любой консольный текстовый редактор

nano bot.py

После скопируйте код бота и вставьте его в текстовый файл — он будет выводить «Привет, мир!»

from telegram import Update

from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes

BOT_TOKEN = "ВСТАВЬ_СЮДА_СВОЙ_ТОКЕН"

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):

    await update.message.reply_text("Привет, мир! Я бот :)")

async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE):

    await update.message.reply_text(update.message.text)

def main():

    app = Application.builder().token(BOT_TOKEN).build()

    app.add_handler(CommandHandler("start", start))

    app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))

    app.run_polling(stop_signals=None)

if name == "__main__":

    main()

Важно, чтобы токен был именно в кавычках — без них бот не будет работать. Сохраняем файл и выходим — в Nano это делается сочетанием клавиш Ctrl+O и Ctrl+X.

Шаг 3. Запуск бота. Осталось совсем немного! Запускаем файл, который мы ранее создали: 

python bot.py

После остается только найти бот в Telegram по названию и отправить /start — бот должен с вами поздороваться.

Вот так выглядит самый минимальный деплой бота на виртуальный сервер. Я намеренно тут избегал темы установки UFW и настройки автозапуска с помощью systemd, чтобы не перегружать инструкцию и сохранить ее максимально легкой. 

А вы уже пробовали размещать своих ботов на сервере? Или, может, есть идея для бота, которую давно хотите реализовать — но не знали, с чего начать? Делитесь в комментариях!

Комментарии (2)


  1. Andrey4ik
    16.05.2025 20:02

    Подскажите что за приложение терминала? Очень красивое, мне надо.


  1. makarbass
    16.05.2025 20:02

    А разве он не упадёт после закрытия соединения?