«Один бот — один сервер» — привычка родом из мира VPS. Она держится ровно до того момента, пока ботов не станет три: сначала бот для себя, потом для друга, потом для клиента с другими формулировками. Дальше выясняется, что второй и третий бот не требуют второго и третьего сервера — достаточно, чтобы платформа давала нужное число проектов, а каждый бот жил в своём контейнере. Разбираем, как это устроено на Dockbox и как считать деньги, когда ботов пять.
Почему на своём сервере несколько ботов — это несколько проблем
На одной машине каждый новый бот — это отдельная история. Где-то не та версия Python, где-то конфликт библиотек, где-то забыт автозапуск. Через месяц вы получаете сервер, к которому страшно прикоснуться: непонятно, от чего зависит какой процесс и что сломается при очередном обновлении.
Что происходит на практике. Боты делят один и тот же набор системных пакетов. Один требует старую версию aiogram, второй — новую; обновление ради одного ломает соседа. Токены лежат где-то в файлах рядом, и рано или поздно два процесса стартуют с одним и тем же токеном.
Почему так выходит. VPS даёт вам машину, а не среду выполнения. Разделение ботов — целиком ваша задача, и решается она руками: отдельные виртуальные окружения, отдельные systemd-юниты, отдельные папки с данными. Каждая новая единица — ещё один повод что-нибудь забыть.
Тариф отвечает за одно, число проектов — за другое
Это два разных вопроса, и их стоит разделить сразу.
Как бот работает решает платформа, а не тариф. На Dockbox контейнеры работают постоянно — без остановки по времени и без простоя: бот живёт ровно столько, сколько вы держите его запущенным. При сбое процесс перезапускается автоматически, логи видны в панели.
Сколько ботов у вас есть — отдельная строка. Число проектов заложено в тариф: один на Starter, пять на Pro, безлимит на Team. То есть пять ботов — это не пять тарифов, а один тариф Pro с пятью проектами.
Сколько ботов влезает в тариф
- Starter — 990 ₽/мес, 1 vCPU, 2 GB RAM, 1 проект. Первый месяц бесплатный — этого хватает, чтобы довести первого бота до работы;
- Pro — 2 490 ₽/мес, 2 vCPU, 4 GB RAM и 5 проектов — базовый вариант для нескольких ботов;
- Team — 4 990 ₽/мес — проектов без ограничения, если ботов становится больше пяти.
Посчитайте альтернативу: три бота на своих серверах — это три машины по 200–400 ₽, три окружения и три точки отказа. На Pro три бота — это один тариф и три проекта в одной панели, а сумма не растёт с каждым новым ботом. Полный список тарифов и лимитов — на Dockbox.
Каждый бот — отдельный контейнер, а не папка в общем проекте
Соблазн «положить всех ботов в один проект» понятен, но обходится дороже, чем экономит. Разделение даёт каждому боту три вещи:
- свои логи — по падению сразу видно, какой именно бот и на какой строке;
- своё постоянное хранилище — данные, которые бот накапливает, лежат отдельно и не путаются с данными соседа;
- независимые обновления — правка одного бота не перезапускает остальных.
Держите структуру репозиториев простой: один бот — один репозиторий, который подключается как отдельный проект.
support-bot/
main.py
requirements.txt
Токен каждого бота живёт отдельно
У каждого бота свой токен от @BotFather. Хранится он в переменных окружения проекта — не в коде и не в архиве. В коде только чтение:
TOKEN = os.environ["BOT_TOKEN"]
А сами значения задаются в панели проекта или в файле переменных:
BOT_TOKEN=7123456789:AA...
BOT_NAME=support_bot
Токены не переходят из проекта в проект, поэтому запустить двух ботов на одном токене по ошибке не получится. Это важно и технически: Telegram не разрешает двум процессам работать с одним токеном — второй получит ошибку 409 Conflict и не запустится.
Если один бот упал, остальные продолжают работать
Разные контейнеры — разные процессы. Падение одного бота не тянет за собой остальных: у соседей своя память, свои зависимости, свой цикл перезапуска. Платформа поднимает упавший контейнер автоматически, а вы в это время спокойно отвечаете клиенту в другом боте.
На общем сервере такого не получается почти никогда: нехватка памяти или упавшее обновление системы уносит всех сразу, потому что процесс-то один — общий.
Как добавить второго бота
- Заведите отдельный репозиторий под нового бота — с кодом,
requirements.txtи командой запуска; - Создайте новый проект в панели и подключите к нему этот репозиторий;
- Добавьте переменные окружения:
BOT_TOKENот BotFather и всё, что код читает черезos.environ; - Дождитесь сборки Docker-образа и запуска контейнера;
- Проверьте бота в Telegram:
/startдолжен получить ответ, а в логах не должно быть ошибок.
Тот же порядок повторите для третьего и пятого бота. Если проект нужно посмотреть руками, контейнер можно запустить локально той же командой:
docker run -d --restart unless-stopped \
--env-file .env \
--name support-bot support-bot:latest
Частые вопросы
Нужен ли каждому боту отдельный сервер?
Нет. Отдельный сервер нужен ровно одному боту — если вы вообще хотите администрировать машину. На платформе каждый бот получает свой контейнер внутри одного тарифа: на Pro это 5 проектов, на Team — без ограничения.
Сколько ботов можно держать на одном тарифе?
На Starter — один проект, на Pro — пять, на Team — столько, сколько нужно. Второй и последующие боты не требуют второго тарифа: вы просто создаёте ещё один проект в панели.
Можно ли запустить несколько ботов внутри одного проекта?
Технически да, но это плохая идея. Отдельные проекты дают каждому боту свои логи, своё постоянное хранилище и независимые обновления: правка одного бота не перезапускает соседей, а падение одного не тянет за собой остальных.
Что будет, если один бот упадёт?
Упадёт только он. Контейнер перезапускается автоматически, а остальные боты продолжают работать, потому что живут в отдельных контейнерах со своими зависимостями и памятью.
Боты работают круглосуточно на младшем тарифе?
Да. Круглосуточная работа — это стандартный режим контейнера на Dockbox, а не отдельная функция плана. Он одинаково работает и на Starter, и на Pro, и на Team: контейнеры не останавливаются по времени и не уходят в простой.