OffshoreVps
Инструкции8 окт. 20265 мин чтенияАвтор: команда OffshoreVps

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

Получите токен бота, напишите бота на Python, надёжно храните токен и обеспечьте работу 24/7 с помощью службы systemd.

Telegram-бот должен работать постоянно, чтобы отвечать на сообщения. Если запускать его на ноутбуке, он отключается, когда вы закрываете крышку. Небольшой VPS решает эту проблему за несколько долларов в месяц. В этом руководстве бот на Python запускается как служба systemd, поэтому он стартует при загрузке и перезапускается после сбоя.

Окно терминала на VPS с командами для размещения Telegram-бота, начиная с «sudo apt update && sudo apt install -y python3 p»
Примерно такие команды вы будете выполнять на своём сервере в этом руководстве.

Какой размер VPS?

Большинство ботов нетребовательны. Тарифа с 1–2 vCPU и 2 ГБ RAM более чем достаточно. Рекомендуемые тарифы смотрите на странице хостинга для Telegram-ботов.

Шаг 1: получите токен бота

Напишите @BotFather в Telegram, отправьте /newbot, выберите имя и имя пользователя, оканчивающееся на bot, и скопируйте токен. Относитесь к нему как к паролю, потому что любой, у кого он есть, может управлять ботом.

Шаг 2: подготовьте сервер

sudo apt update && sudo apt install -y python3 python3-venv
sudo adduser --disabled-password --gecos "" botuser
sudo -iu botuser
mkdir ~/mybot && cd ~/mybot
python3 -m venv .venv
. .venv/bin/activate
pip install python-telegram-bot

Шаг 3: напишите небольшого бота

# bot.py
import os
from telegram import Update
from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes

async def start(update: Update, ctx: ContextTypes.DEFAULT_TYPE):
    await update.message.reply_text("Hello! I am running on a VPS.")

app = ApplicationBuilder().token(os.environ["BOT_TOKEN"]).build()
app.add_handler(CommandHandler("start", start))
app.run_polling()

Для polling не нужны открытые порты, поэтому настраивать домен или вебхук не требуется.

Шаги этого руководства по порядку: 1. Какой размер VPS нужен?; 2. получите токен бота; 3. напишите небольшого бота; 4. надёжно храните токен; 5. Обновление и наблюдение; 6. Polling или вебхук?
Шаги этого руководства по порядку.

Шаг 4: надёжно храните токен

echo "BOT_TOKEN=123456:ABC..." > ~/mybot/.env
chmod 600 ~/mybot/.env

Шаг 5: запустите как службу

Снова войдя как администратор, создайте /etc/systemd/system/mybot.service:

[Unit]
Description=Telegram bot
After=network-online.target

[Service]
User=botuser
WorkingDirectory=/home/botuser/mybot
EnvironmentFile=/home/botuser/mybot/.env
ExecStart=/home/botuser/mybot/.venv/bin/python bot.py
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now mybot
sudo journalctl -u mybot -f

Обновление и наблюдение

  • Обновите код, затем выполните sudo systemctl restart mybot.
  • Проверяйте журналы командой journalctl -u mybot -n 100.
  • Используйте резервные копии, если бот хранит данные.

Polling или вебхук?

Polling проще всего и подходит для большинства ботов. Используйте вебхук, если нужна мгновенная доставка при большом объёме, для чего нужны домен и HTTPS. См. размещение с Nginx и HTTPS.