Top.Mail.Ru
Русский
Сценарий · 8 минут

Как выбрать VPS для Telegram-бота

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

В статьеРесурсыСетьРазвёртываниеДанныеНадёжность

Минимальные ресурсы зависят от нагрузки

СценарийСтартовая конфигурацияКогда увеличивать
Простой бот без БД1 vCPU, 1 ГБ RAM, 10–20 ГБ SSDПри росте одновременных обработчиков
Бот + PostgreSQL/Redis2 vCPU, 2–4 ГБ RAM, NVMeПри очередях и нехватке кэша
Медиа или ML-задачи2–4 vCPU, от 4 ГБ RAMПо измерениям CPU, RAM и диска

Оставьте 20–30% RAM свободными для системы и обновлений. Для базы данных важнее стабильный NVMe и достаточная память, чем большой диск. Не храните загруженные файлы бесконечно: переносите их в объектное хранилище или удаляйте по расписанию.

Long polling или webhook

Long polling проще запустить и не требует входящего HTTPS-соединения. Webhook удобен при масштабировании, но нужен домен, TLS-сертификат и доступный порт. В обоих случаях критичнее стабильность маршрута до API Telegram, чем гигабитный порт.

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

Как выбрать локацию и сеть

Бот общается одновременно с API Telegram, внешними сервисами и вашей базой. Локация должна иметь стабильный маршрут ко всем критичным точкам. Географическая близость к владельцу не всегда важна: пользователь отправляет сообщение через инфраструктуру Telegram, а задержка может возникнуть на запросе к стороннему API.

Попросите тестовый IP, проверьте маршрут в разное время и сначала запустите копию бота без переключения основного трафика. Гигабитный порт обычно не нужен текстовому боту, но для загрузки и обработки медиа важны и скорость, и месячный лимит. Условия больших объёмов разобраны в статье о трафике VPS.

Как развернуть без ручных перезапусков

  1. Создайте отдельного пользователя без постоянной работы от root.
  2. Храните токен и пароли в переменных окружения, а не в репозитории.
  3. Запускайте приложение через systemd или Docker с политикой перезапуска.
  4. Закройте лишние порты, включите SSH-ключи и автоматические обновления безопасности.
  5. Настройте логирование с ротацией, чтобы логи не заполнили диск.

Не сохраняйте секреты в образ контейнера или открытый файл конфигурации. Ограничьте права токена базы, меняйте скомпрометированные ключи и разделяйте тестовую и рабочую среды. Если используете webhook, автоматически обновляйте TLS-сертификат и следите за сроком его действия.

База данных, очередь и файлы

Для маленького бота SQLite может быть достаточна, если работает один процесс и запись невелика. При параллельных обработчиках, отчётах и росте данных удобнее PostgreSQL. Redis полезен для очереди и кэша, но не должен быть единственной копией важных данных без настроенного сохранения.

КомпонентОсновной рискЧто контролировать
Процесс ботаОстановка после ошибки или обновленияАвтоперезапуск, health check, число ошибок
База данныхПотеря или рост задержкиДампы, размер, медленные запросы, соединения
ОчередьНакопление задачДлину и возраст старейшей задачи
МедиафайлыЗаполнение дискаКвоту, срок хранения и очистку
Внешний APIЛимиты и временная недоступностьТаймауты, повторы с задержкой, число отказов

Не выполняйте долгую операцию прямо внутри обработчика сообщения. Поставьте задачу в очередь, сообщите пользователю о начале обработки и ограничьте число повторов. Это защищает бота от цепочки дублей при временной ошибке внешнего сервиса.

Мониторинг и резервные копии

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

Добавьте внешний мониторинг: если сервер целиком недоступен, локальный процесс не сможет отправить уведомление. Следите за CPU, RAM, swap, свободным диском, числом ошибок, временем обработки и длиной очереди. Порог выбирайте по обычному поведению бота, а не по случайному универсальному значению.

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

Когда увеличивать сервер

Масштабирование не исправляет бесконечный повтор запросов, утечку памяти или отсутствующий индекс. Сначала найдите узкое место по метрикам, затем меняйте только ограничивающий ресурс.

Проверка перед запуском

Перед переключением пользователей проведите тест с отдельным ботом или тестовым окружением. Имитируйте временную недоступность базы и внешнего API, перезагрузите сервер и убедитесь, что обработка продолжилась без дублей. Такой тест полезнее покупки ресурсов «с запасом».

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

Хватит ли 1 ГБ RAM для Telegram-бота?

Для простого бота без тяжёлой панели и большой базы — часто да. Для PostgreSQL, Redis и нескольких контейнеров безопаснее начать с 2–4 ГБ и наблюдать за памятью.

Нужен ли домен?

Для long polling — нет. Для webhook нужен доступный HTTPS-адрес; домен упрощает сертификат и перенос между серверами.

Можно ли держать базу на том же VPS?

Для небольшого проекта это нормально при регулярных внешних копиях. При росте нагрузки и требований к доступности базу можно вынести отдельно.

Хороший старт: 1–2 vCPU, 2 ГБ RAM, 20–30 ГБ NVMe, KVM, публичный IPv4, помесячная оплата и резервные копии. Увеличивайте ресурсы только после измерения узкого места.
Подберите недорогой VPS для ботаЗадайте минимум 1 ГБ RAM и SSD, затем отсортируйте подходящие варианты по цене.
Перейти в каталог

Для точного расчёта откройте таблицу CPU и RAM для разных задач.