VPS для Telegram-бота: что нужно боту и как выбрать тариф
Боту с меню и парой команд хватает самого дешёвого сервера, а бот с рассылками, файлами и базой упирается совсем в другие ресурсы. Разбираем, что на самом деле потребляет бот, какие ограничения Telegram влияют на выбор сервера и как не переплатить.
Запрос «VPS для бота» обычно заканчивается выбором самого дешёвого тарифа, и в половине случаев это правильно. Проблемы начинаются позже: бот отправляет рассылку и получает ошибки 429, не может скачать присланное видео, после переезда на новый сервер перестаёт получать webhook или теряет сообщения за ночь простоя. Почти всё это объясняется не нехваткой ядер, а тем, как устроен Bot API. Ниже — как оценить нагрузку своего бота, какие правила Telegram задают требования к серверу и что проверить в тарифе до оплаты.
Что на самом деле потребляет бот
Сам по себе бот — это небольшой процесс, который принимает обновления от Telegram и отправляет ответы. Ресурсы съедает то, что вокруг него.
- Сеть и задержка. Каждое действие бота — HTTPS-запрос к api.telegram.org. Для бота с меню важна стабильность канала, а не его ширина: трафик измеряется мегабайтами в день.
- База данных. Пока пользователей сотни, хватает SQLite. Когда появляются тысячи пользователей, заказы, статистика и одновременные запросы, нужен PostgreSQL или MySQL, а это уже сотни мегабайт памяти и быстрый диск.
- Очереди и фоновые задачи. Рассылки, напоминания по расписанию, обработка платежей через внешние сервисы. Обычно это Redis и отдельный процесс-обработчик.
- Файлы. Конвертация видео, генерация картинок, PDF-отчёты нагружают процессор и диск сильнее, чем всё остальное вместе.
- Внешние API. Бот, который пересылает запросы в нейросеть по API, почти не нагружает сервер сам: он ждёт ответа. Бот с локальной моделью — это уже задача для мощного сервера или GPU.
Оценивайте не «сколько весит бот», а сколько у него таких компонентов и что из них работает постоянно.
Лимиты Bot API, которые влияют на сервер
У Telegram есть ограничения, которые не обойти мощностью сервера. Их стоит знать до выбора тарифа, чтобы не платить за ресурсы, которые бот не сможет использовать.
- Скорость отправки. Telegram рекомендует не отправлять в один чат больше одного сообщения в секунду, в группу — больше 20 сообщений в минуту, а массовые рассылки — быстрее примерно 30 сообщений в секунду. При превышении Bot API возвращает ошибку 429 с параметром
retry_after. Рассылка на 10 000 пользователей занимает минимум несколько минут на любом сервере, поэтому нужна очередь с ограничением скорости, а не лишние ядра. - Размер файлов. Через стандартный Bot API бот скачивает файлы до 20 МБ и отправляет до 50 МБ. Если нужно больше, разворачивают собственный сервер Bot API (открытый проект telegram-bot-api): он снимает ограничение на скачивание и позволяет отправлять файлы до 2000 МБ. Такой сервер хранит файлы на диске, поэтому под него нужен запас диска и памяти.
- Хранение обновлений. Пока бот недоступен, Telegram копит входящие обновления, но не дольше 24 часов. Сутки простоя без мониторинга — и часть сообщений пользователей потеряна безвозвратно.
Требования webhook к серверу
Базовые правила webhook — HTTPS и порты 443, 80, 88 или 8443 — разобраны на странице VPS для Telegram-бота. Есть ещё несколько требований, о которых узнают уже после покупки сервера.
- Только IPv4. Telegram доставляет webhook только на IPv4-адреса, IPv6 не поддерживается. Самые дешёвые тарифы без выделенного IPv4 для webhook не подойдут — остаётся long polling или IPv4 за доплату.
- TLS 1.2 и новее. Старые версии SSL и TLS 1.0/1.1 не принимаются. Сертификат должен совпадать с доменом; самоподписанный сертификат допустим, если загрузить его при вызове
setWebhook. - Адреса отправителя. Запросы приходят из подсетей 149.154.160.0/20 и 91.108.4.0/22. Порт webhook в брандмауэре можно открыть только для них.
- Секретный заголовок. Параметр
secret_tokenвsetWebhookзаставляет Telegram добавлять к каждому запросу заголовокX-Telegram-Bot-Api-Secret-Token. Проверяйте его в приложении, чтобы отсекать поддельные запросы. - Параллельные соединения. По умолчанию Telegram держит до 40 одновременных соединений с webhook (настраивается от 1 до 100). Если обработчик медленный, запросы копятся, поэтому тяжёлую работу лучше отдавать в очередь и отвечать Telegram сразу.
Пока webhook установлен, получать обновления через getUpdates нельзя. При переезде на новый сервер сначала поднимите бота там, затем переустановите webhook на новый адрес; параметр drop_pending_updates при этом используйте только если старые обновления действительно не нужны.
Какой тариф под какой бот
Ориентиры для Linux-сервера с ботом на Python, Node.js или Go. Цифры с запасом под систему, логи и обновления.
| Профиль бота | Что работает на сервере | Тариф |
|---|---|---|
| Меню, команды, формы заявок | Бот и SQLite | 1 vCPU, 1 ГБ RAM, 10–20 ГБ SSD |
| Магазин или запись клиентов | Бот, PostgreSQL, Redis, админка | 2 vCPU, 2–4 ГБ RAM, 30–40 ГБ NVMe |
| Рассылки по большой базе | Бот, база, очередь, обработчики | 2 vCPU, 4 ГБ RAM, NVMe |
| Файлы и медиа | Бот, свой сервер Bot API, конвертация | 4 vCPU, 4–8 ГБ RAM, диск 80 ГБ и больше |
| Несколько ботов в Docker | Контейнеры, обратный прокси, общая база | 2–4 vCPU, 4 ГБ RAM, KVM |
Для первых двух профилей подойдут подборки VPS с 1 ГБ и VPS с 2 ГБ. Если боты живут в контейнерах, нужна виртуализация KVM — подробнее на странице VPS для Docker. База с тысячами пользователей заметно выигрывает от NVMe, см. VPS для баз данных.
Что проверить в тарифе
- Выделенный IPv4 — обязателен для webhook и упрощает работу с внешними API.
- Тип ядер. Для бота с меню общих ядер достаточно. Для конвертации медиа и рассылок по расписанию, которые совпадают с пиковыми часами соседей, стабильнее выделенные.
- Почасовая оплата. Удобно, чтобы проверить бота под реальной нагрузкой перед долгой оплатой и не платить за тестовый сервер весь месяц — подборка VPS с почасовой оплатой.
- Снапшоты и резервные копии. База пользователей бота — самое ценное на сервере. Уточните, входят ли копии в цену или стоят отдельно.
- Локация. Для бота важнее стабильный маршрут до Telegram и до внешних API, чем пинг до пользователей. Если бот хранит персональные данные россиян, учитывайте требования 152-ФЗ о хранении в России.
Как сравнить сеть и диск разных хостеров ещё до оплаты, описано в статье Как проверить пинг и скорость VPS до оплаты.
Надёжность: чтобы бот не терял сообщения
Перезапуск после сбоя через systemd или Docker — минимум. Этого мало, если бот приносит деньги.
- Внешний мониторинг. Раз в несколько минут проверяйте, что бот отвечает: метод
getWebhookInfoпоказывает число ожидающих обновлений и последнюю ошибку доставки. Растущая очередь — сигнал, что бот завис, хотя процесс формально жив. - Резервная копия базы вне сервера. Ежедневный дамп в другое хранилище. Снапшот у того же хостера не спасает, если проблема с аккаунтом или дата-центром.
- Обновления системы. Автоматическая установка обновлений безопасности и перезагрузка в ночное окно, когда у бота меньше всего пользователей.
- Ротация логов. Бот с подробными логами за несколько месяцев может заполнить небольшой диск, и тогда база перестаёт записывать данные.
Токен и доступ к серверу
Токен бота даёт полный контроль над ним: с ним можно читать входящие сообщения и писать от имени бота. Храните его в переменных окружения или файле с правами только для пользователя бота, не в репозитории. Запускайте бота под отдельным пользователем без прав root. Вход на сервер — по SSH-ключам, вход по паролю отключите. Если токен мог утечь, отзовите его через @BotFather командой /revoke и выпустите новый.
Если бот принимает оплату, держите платёжные ключи отдельно от токена и не логируйте содержимое запросов от платёжного сервиса целиком.
Когда одного VPS мало
Один сервер справляется с ботом на десятки тысяч пользователей, если тяжёлые задачи вынесены в очередь. Разделять стоит, когда база и обработчики мешают друг другу: база переезжает на отдельный сервер с NVMe, обработчики медиа — на сервер с большим числом ядер. Общие принципы выбора процессора, памяти и диска — в статье Как выбрать VPS. Для ботов в других мессенджерах есть отдельные подборки, например VPS для Discord-бота.