Хостинг для Telegram-ботов: сравнение вариантов

Хостинг для Telegram-бота выбирают один раз, а переделывают потом месяцами: сначала бот отвечает с ноутбука, потом переезжает на VPS, а рядом уже нужны сайт, база и админка. Ниже — честное сравнение трёх подходов: готовых платформ (git push и Docker), собственного VPS и serverless. Не «кто лучше вообще», а какой подход какой задаче подходит.

Три подхода: в чём разница

Готовая платформа (PaaS). Вы приносите код, платформа собирает его в Docker-контейнер, запускает и держит доступным. Администрирования нет: ни установки языка, ни systemd, ни сертификатов.

Свой VPS. Виртуальный сервер в ваших руках: любой язык, любой софт, root-доступ. Взамен — установка и обслуживание на вас.

Serverless. Код запускается короткими вызовами в ответ на событие и живёт только во время вызова. Между запросами ничего не работает и состояние в памяти не хранится.

КритерийПлатформа (PaaS)Свой VPSServerless
Кто администрируетплатформавыпровайдер, но код обязан быть stateless
Время до первого ответадеплой из Git, минутывечер на настройкубыстро, но обязателен webhook
Данныепостоянное хранилище плюс база сервисомчто настроитевнешняя база обязательна
Автоперезапускплатформа самаsystemd рукамиповтор вызова, без памяти

Дальше — по каждому критерию отдельно.

Готовая платформа: git push вместо администрирования

Платформа закрывает ровно те задачи, из-за которых бот и замолкает ночью:

  • Сборка. Из репозитория или архива собирается образ: язык определяется по файлам проекта, Dockerfile не обязателен.
  • Запуск и перезапуск. Контейнер работает постоянно; упал — платформа поднимает его сама, без вашего участия.
  • Секреты. Токен от BotFather и ключи хранятся отдельно от кода: имена видны, значения зашифрованы.
  • Логи и HTTPS. Вывод процесса виден в панели, адрес с сертификатом выдаётся при публикации.

Цена такой простоты — вы не решаете, какой будет машина. На Dockbox это выглядит так: подключили Git или залили ZIP — получили HTTPS-ссылку, контейнеры работают постоянно, тариф один и в рублях.

Свой VPS: контроль, за который платите временем

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

  • Автозапуск после перезагрузки. Без юнита systemd бот замолчит после первого же обновления ядра (пример ниже).
  • Обновления системы. Патчи безопасности и перезагрузки — ваша работа.
  • Диск и сертификаты. Логи растут, место кончается, сертификат надо продлевать.
  • Разбор сбоев. Упал процесс — логи смотрите сами и решаете, что делать.

Юнит для бота — не страшно, но это файл, который надо написать и поддерживать:

[Unit]
Description=Telegram bot
After=network.target
[Service]
WorkingDirectory=/home/bot/mybot
ExecStart=/home/bot/mybot/venv/bin/python main.py
EnvironmentFile=/home/bot/mybot/.env
Restart=always
[Install]
WantedBy=multi-user.target

Когда VPS оправдан. Если нужен root, своя сеть или серверы вам просто интересны — это нормальный выбор. Для «одного бота» он дороже по времени.

Serverless: почему боту там тесно

Serverless хорошо ложится на HTTP-эндпоинты, но Telegram-бот — не совсем HTTP-сервис.

Polling не работает. Классический бот сам опрашивает Telegram в цикле — это долгоживущий процесс, а serverless живёт только во время одного вызова.

Webhook работает, но с оговорками. Telegram может присылать апдейты на HTTPS-адрес, и тогда serverless подходит. Но появляются холодные старты, лимит на длительность вызова и требование быть stateless: между вызовами нельзя держать ни соединение, ни счётчик в памяти.

Честно: для бота на webhook с редкими запросами serverless бывает дешевле. Для бота, который работает постоянно и что-то помнит, — почти всегда нет.

Цена: как считать честно

Сравнивать «цену за бота» бессмысленно, если один подход берёт фиксированную сумму, а другой — за потреблённое.

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

Serverless. Платите за вызовы и время выполнения: при редких запросах дёшево, при постоянном опросе — непредсказуемо. Актуальные тарифы — у провайдера.

Платформа. Одна фиксированная сумма, внутри которой уже есть сервер, сборка, HTTPS и логи. На Dockbox:

Starter — 990 ₽/мес. 1 vCPU, 2 GB RAM, 20 GB SSD, один проект, первый месяц бесплатно.

Pro — 2 490 ₽/мес. 2 vCPU, 4 GB RAM, до пяти проектов — если рядом с ботом сайт или база.

Team — 4 990 ₽/мес. Для команд с запасом ресурсов и SLA.

Тарифы и подробности — на dockbox.host.

Данные: где живут база и файлы

VPS. Где скажете — там и лежат. Расплата — бэкапы и место на диске на вас.

Serverless. Постоянного диска нет: база только внешняя, файлы — только в объектном хранилище, свой файл SQLite положить некуда.

Платформа. Есть постоянное хранилище: файлы, которые бот пишет сам, и SQLite переживают публикацию новой версии. Базу можно поднять вторым сервисом в docker-compose с именованным томом:

services:
  bot:
    build: .
    volumes:
      - bot_data:/data
  db:
    image: postgres:16
    volumes:
      - db_data:/var/lib/postgresql/data
volumes:
  bot_data:
  db_data:

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

Автоперезапуск и логи: что происходит при сбое

Бот умирает тихо, поэтому лучший тест подхода — «что будет в три часа ночи».

Платформа. Процесс живёт в контейнере, платформа следит за ним и перезапускает упавший. Логи остаются в панели, текст ошибки виден без SSH.

VPS. Перезапуск делает systemd (Restart=always в юните выше) — но только если юнит написан и включён. Логи — через journalctl, и это снова терминал.

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

Когда какой вариант выбрать

Один бот, который должен просто работать. Платформа: деплой из Git, перезапуск сам, токен секретом, оплата в рублях.

Бот плюс сайт, база или админка. Платформа: всё в одном проекте и на одном счёте вместо трёх отдельных мест.

Бот на webhook с редкими запросами. Serverless имеет смысл, если готовы держать состояние снаружи.

Нужны root, SSH, своя сеть, managed-база или Kubernetes. Тогда VPS или большое облако, и делать вид, что платформа это заменит, мы не будем.

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

Чем готовая платформа отличается от VPS?

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

Почему serverless неудобен именно для бота?

Классический бот работает в режиме опроса: он постоянно держит соединение с Telegram. Serverless запускает код только на время одного вызова и не хранит состояние, поэтому боту нужен webhook, а вместо локального файла — внешняя база.

Можно ли перенести бота без переписывания кода?

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

Бот отвечает через сообщение после переезда — почему?

Почти всегда потому, что старая копия ещё запущена. У одного токена может быть только один работающий экземпляр: две копии делят апдейты, и половина ответов теряется (Telegram сообщает о конфликте getUpdates). Оставьте одну копию.

Что будет с базой и файлами бота при обновлении кода?

Файлы вне постоянного хранилища при новой публикации создаются заново. Всё, что бот накопил, держите в постоянном хранилище: SQLite, загруженные файлы, а базу на PostgreSQL или MySQL — вторым сервисом проекта с именованным томом.