Хостинг для Telegram-бота выбирают один раз, а переделывают потом месяцами: сначала бот отвечает с ноутбука, потом переезжает на VPS, а рядом уже нужны сайт, база и админка. Ниже — честное сравнение трёх подходов: готовых платформ (git push и Docker), собственного VPS и serverless. Не «кто лучше вообще», а какой подход какой задаче подходит.
Три подхода: в чём разница
Готовая платформа (PaaS). Вы приносите код, платформа собирает его в Docker-контейнер, запускает и держит доступным. Администрирования нет: ни установки языка, ни systemd, ни сертификатов.
Свой VPS. Виртуальный сервер в ваших руках: любой язык, любой софт, root-доступ. Взамен — установка и обслуживание на вас.
Serverless. Код запускается короткими вызовами в ответ на событие и живёт только во время вызова. Между запросами ничего не работает и состояние в памяти не хранится.
| Критерий | Платформа (PaaS) | Свой VPS | Serverless |
|---|---|---|---|
| Кто администрирует | платформа | вы | провайдер, но код обязан быть 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 — вторым сервисом проекта с именованным томом.