Telegram-бот должен работать постоянно, чтобы отвечать на сообщения. Если запускать его на ноутбуке, он отключается, когда вы закрываете крышку. Небольшой VPS решает эту проблему за несколько долларов в месяц. В этом руководстве бот на Python запускается как служба systemd, поэтому он стартует при загрузке и перезапускается после сбоя.
Какой размер 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 не нужны открытые порты, поэтому настраивать домен или вебхук не требуется.
Шаг 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.