VPS для Telegram-бота: как запустить и держать его живым

Бот написан, на компьютере работает, отвечает на команды. Но стоит закрыть ноутбук - и он замолкает. Чтобы бот отвечал круглосуточно, ему нужен сервер, который никогда не выключается. Для этой задачи берут VPS.

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

Почему боту нужен VPS, а не хостинг

Обычный виртуальный хостинг рассчитан на сайты: пришёл запрос, отдалась страница, процесс завершился. Бот устроен иначе - это программа, которая работает постоянно, годами не завершаясь, и всё время слушает Telegram на предмет новых сообщений.

Хостинг такое чаще всего запрещает: долгоживущие фоновые процессы там либо не разрешены, либо принудительно завершаются. VPS даёт то, чего боту не хватает на хостинге:

  • постоянно работающий процесс без ограничений по времени;
  • полный доступ, чтобы поставить нужную версию Python или Node и любые библиотеки;
  • свой белый IP, если бот работает через webhook;
  • автозапуск после перезагрузки сервера.

Локальный компьютер или ноутбук на эту роль не годятся: их выключают, у них рвётся интернет, они уходят в сон. Боту нужна машина, которая просто всегда включена.

Сколько ресурсов нужно боту

Хорошая новость: боту нужно совсем немного. Логика простая - большинство ботов почти всё время ждут сообщений и почти не нагружают процессор.

Тип ботаvCPURAMДиск
Простой бот: команды, уведомления11 ГБ10 ГБ NVMe
Бот с базой данных, до 10 000 пользователей12 ГБ20 ГБ NVMe
Бот с обработкой картинок или файлов22 ГБ20 ГБ NVMe
Бот с нейросетью или тяжёлой логикой24 ГБ40 ГБ NVMe
Несколько ботов на одной машине24 ГБ40 ГБ NVMe

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

Система - любой Linux, лучше всего Ubuntu Server LTS: под неё больше всего примеров и готовых инструкций.

Polling или webhook: два способа работы

У Telegram-бота есть два способа получать сообщения, и от выбора зависит, нужен ли боту домен.

чем отличаются polling и webhook.
чем отличаются polling и webhook.

Polling - бот сам постоянно спрашивает Telegram: "есть новые сообщения?". Работает из коробки, ничего дополнительно настраивать не нужно, домен и SSL не требуются. Это способ по умолчанию, с него все начинают.

Webhook - наоборот: Telegram сам присылает сообщение боту, как только оно приходит. Работает быстрее и экономичнее, но требует домен с SSL-сертификатом, потому что Telegram шлёт данные только на HTTPS-адрес.

PollingWebhook
Кто инициируетБот спрашивает TelegramTelegram шлёт боту
Нужен домен и SSLНетДа
Сложность запускаМинимальнаяВыше
НагрузкаЧуть вышеНиже
Когда выбиратьСтарт, большинство ботовВысокие нагрузки, много сообщений

Практический совет: начинайте с polling. Его достаточно для абсолютного большинства ботов, и он не требует ни домена, ни возни с сертификатами. На webhook переходят позже, если бот вырастает в нагруженный сервис.

Как запустить бота на сервере

После аренды сервер нужно подготовить: обновить систему и провести базовую настройку безопасности. Это подробно расписано в статье настройка VPS с нуля, пройдите её первым делом.

Дальше на примере Python-бота. Ставим Python и загружаем код бота на сервер:

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

Создаём отдельное окружение для зависимостей бота, чтобы не смешивать их с системными:

cd ~/mybot
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

Проверяем, что бот вообще запускается:

python3 bot.py

Если бот ответил в Telegram - код рабочий. Но запущенный так бот живёт только пока открыта сессия SSH: закроете терминал, и он остановится. Нужен способ держать его в работе постоянно.

Чтобы бот не падал: systemd

Правильный способ держать бота живым на Linux - оформить его как системную службу через systemd. Тогда бот запустится сам после перезагрузки сервера и автоматически перезапустится, если вдруг упадёт.

Создаём файл службы:

sudo nano /etc/systemd/system/mybot.service

Содержимое (пути и имя пользователя подставьте свои):

[Unit]
Description=Telegram Bot
After=network.target

[Service]
Type=simple
User=mike
WorkingDirectory=/home/mike/mybot
ExecStart=/home/mike/mybot/venv/bin/python3 bot.py
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Ключевая строка здесь - Restart=always: если бот по любой причине завершится, systemd поднимет его заново через 5 секунд.

Включаем автозапуск и стартуем бота:

sudo systemctl daemon-reload
sudo systemctl enable --now mybot

Проверяем, что всё работает:

sudo systemctl status mybot

Строка active (running) означает, что бот запущен и находится под присмотром systemd. Теперь он переживёт и закрытие SSH, и перезагрузку сервера.

Смотреть логи бота, если что-то идёт не так:

journalctl -u mybot -f

Альтернатива: Docker

Если бот уже упакован в Docker, его запускают контейнером с флагом автоперезапуска:

docker run -d --restart=always --name mybot mybot-image

Флаг --restart=always делает то же, что Restart=always в systemd: контейнер поднимется после перезагрузки и после падения. Для работы с Docker сервер должен быть на KVM-виртуализации, на OpenVZ он работает с ограничениями.

Частые ошибки

Запустили бота через python3 bot.py и закрыли SSH. Бот остановился вместе с сессией. Нужен systemd или Docker, а не запуск руками.

Не поставили автоперезапуск. Бот упал ночью из-за ошибки и лежит до утра. Restart=always поднимает его сам.

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

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

Взяли webhook, не разобравшись. Без домена и SSL webhook не заработает, а polling дал бы результат сразу. Начинайте с polling.

Частые вопросы

Какой язык и библиотека - неважно для сервера? Верно, серверу всё равно. Python с aiogram или python-telegram-bot, Node.js с Telegraf, что угодно другое - все работают на обычном Linux VPS одинаково. Меняется только команда запуска в службе.

Сколько ботов можно держать на одном сервере? Несколько простых ботов спокойно живут на одной машине с 1-2 ГБ памяти. Каждый оформляется отдельной службой systemd. Ограничение не в количестве, а в суммарной нагрузке.

Нужен ли боту статический IP? Для polling - нет, бот сам обращается к Telegram. Статический белый IP нужен для webhook, потому что Telegram должен знать постоянный адрес, куда слать сообщения. У VPS белый IP есть по умолчанию.

Что будет с ботом при перезагрузке сервера? Если бот оформлен как служба systemd с enable, он запустится автоматически сразу после загрузки системы. Именно для этого его и делают службой, а не запускают руками.

Бот иногда перестаёт отвечать, в чём дело? Частые причины: процесс упал без автоперезапуска, кончилась память, или бот словил необработанную ошибку. Посмотрите логи через journalctl -u имя_бота - там будет видно, что произошло. Restart=always защищает от первого случая.

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


Нужен сервер под Telegram-бота? VPS на Linux и NVMe с root-доступом и белым IP, активация за 3 минуты. Хватит самого доступного тарифа, а нарастить ресурсы под нейросеть можно за минуты. Первые 7 дней - тестовый период с возвратом средств.

Что дальше