Как запустить Telegram-бота 24/7 на VPS (Python + systemd)
Бот на ноутбуке умирает, когда закрываешь крышку. Разбираем, как запустить его на VPS: он работает без перерыва, сам перезапускается после сбоя и перезагрузки и стоит $10 в месяц.
Чтобы Telegram-бот работал круглосуточно, разместите его на VPS и запустите как службу systemd. systemd запускает бота при старте сервера и перезапускает его за несколько секунд после сбоя. В статье — путь от пустого сервера до работающего Python-бота примерно за десять минут, с точными командами.
Почему VPS, а не ноутбук
- Всегда онлайн — ноутбук засыпает, теряет Wi-Fi и перезагружается из-за обновлений, а сервер — нет.
- Перезапускается сам — systemd возвращает бота после сбоя или перезагрузки без вашего участия.
- Недорого — бот, который опрашивает Telegram, почти не нагружает процессор и память, хватит самого маленького тарифа.
Простое правило: бот с опросом Telegram спокойно работает на 1 vCPU и 1 ГБ оперативной памяти. Тариф Quark в Neckrez (1 vCPU, 1 ГБ, $10 в месяц) подходит. Переходите на Ion, только если у бота большая база данных или тяжёлые задачи.
Как это сделать в Neckrez
- 1. Зарегистрируйтесь по почте — без KYC, без карты и номера телефона.
- 2. Пополните баланс криптой — от $15. USDT в сетях BEP20, TON, Polygon или Solana стоит всего несколько центов комиссии.
- 3. Разверните сервер — выберите Ubuntu, любую локацию рядом с вами и тариф Quark.
- 4. Подождите около минуты — вы получите выделенный IPv4-адрес и полный root-доступ.
- 5. Платите почасово — списание идёт, только пока сервер существует, поэтому можно тестировать и удалять его когда угодно.
Подробнее об этом сценарии — на странице VPS для ботов.
Подготовьте сервер
Подключитесь под root по IP-адресу из личного кабинета, обновите систему и создайте отдельного пользователя для бота. Запускать бота от root плохая идея: если бота взломают, пострадает весь сервер.
ssh root@YOUR_SERVER_IP
apt update && apt upgrade -y
apt install -y python3 python3-venv ufw
adduser --disabled-password --gecos "" botuserУстановите бота
Перейдите под нового пользователя, создайте виртуальное окружение, чтобы библиотеки бота не смешивались с системными, и установите библиотеку Telegram.
su - botuser
mkdir -p ~/bot && cd ~/bot
python3 -m venv venv
./venv/bin/pip install python-telegram-botСохраните минимального бота как bot.py в этой папке. Он отвечает на /start — этого достаточно, чтобы убедиться, что всё работает. Потом замените его своим кодом.
import os
from telegram import Update
from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text("The bot is running 24/7")
app = ApplicationBuilder().token(os.environ["BOT_TOKEN"]).build()
app.add_handler(CommandHandler("start", start))
app.run_polling()Не храните токен бота в коде. Положите его в файл, который читает только пользователь бота:
echo 'BOT_TOKEN=PASTE_YOUR_TOKEN_FROM_BOTFATHER' > ~/bot/.env
chmod 600 ~/bot/.env
exitЗапустите как службу systemd
Снова под root создайте файл службы. Строка Restart=always — та самая, которая держит бота живым.
nano /etc/systemd/system/bot.service[Unit]
Description=Telegram bot
After=network-online.target
Wants=network-online.target
[Service]
User=botuser
WorkingDirectory=/home/botuser/bot
EnvironmentFile=/home/botuser/bot/.env
ExecStart=/home/botuser/bot/venv/bin/python bot.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.targetВключите автозапуск при каждой загрузке, запустите сейчас и проверьте, что служба работает:
systemctl daemon-reload
systemctl enable --now bot
systemctl status bot
journalctl -u bot -fОтправьте /start своему боту в Telegram: он должен ответить. Выйти из просмотра журнала можно по Ctrl+C. После изменения кода применяйте его командой systemctl restart bot.
Закройте сервер
Бот с опросом только делает исходящие соединения, поэтому открытым должен быть один SSH:
ufw allow OpenSSH
ufw enableОдна честная оговорка: в статье используется опрос (polling) как самый простой способ. Вебхуки реагируют быстрее, но требуют домена и HTTPS, поэтому начните с опроса и переходите, только если это нужно.
Что полезно для сервера с ботом
- Почасовая оплата — поднимите второй сервер, чтобы проверить рискованное изменение, затем удалите его и заплатите за несколько часов.
- Снимки — сделайте резервную копию перед большим обновлением, её можно восстановить на новый сервер позже (хранится 7 дней).
- Мгновенная смена IP — на серверах Vultr, если адрес попал в чёрный список, его можно сменить без пересоздания сервера.
- Бесплатная защита от DDoS на каждом тарифе.
FAQ
Нужен ли домен? Нет. Бот с опросом Telegram использует только IP-адрес сервера.
Запустится ли бот после перезагрузки? Да. systemctl enable запускает его при загрузке, а Restart=always возвращает после сбоя.
Сколько это стоит? Тариф Quark — $10 в месяц с почасовой оплатой, платить можно криптой.
Начать
Тарифы от $10 в месяц с почасовой оплатой. Разверните сервер и запустите бота.