MAATRIX / Блог / Несколько ботов на одном VPS: правильная организация

Несколько ботов на одном VPS: правильная организация

Блог MAATRIX · 2026-07-07

Держать по серверу на каждого бота — дорого и неудобно. Один VPS спокойно тянет десяток лёгких ботов, если правильно их изолировать и раздать ресурсы. Разберём организацию: отдельные пользователи, независимые окружения, свои systemd-сервисы и лимиты.

Почему это выгодно и что учесть

['Большинство ботов простаивают: Telegram-бот отвечает на редкие команды, парсер работает раз в час, Discord-бот ждёт событий. Ресурсы такого бота в среднем близки к нулю, поэтому один VPS с 2-4 ГБ RAM легко обслуживает 5-15 ботов одновременно, а платите вы за один сервер вместо десяти.', 'Ключевой принцип — изоляция. Боты не должны делить одно окружение Python, иначе конфликт версий библиотек сломает сразу всех. Каждый бот получает свой venv, свои переменные окружения и свой systemd-сервис, чтобы падение одного не задело остальных.', '
  • Экономия — один сервер вместо нескольких.
  • Изоляция окружений — свой venv у каждого бота.
  • Независимые сервисы — падение одного не роняет других.
']

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.

Арендовать VPS для нескольких ботов

Структура директорий и пользователей

['Раскладываем ботов по отдельным каталогам, каждому — свой venv. Можно держать всех под одним пользователем bots или выделить пользователя на бота (безопаснее, если боты разного доверия).', "
sudo useradd -r -m -s /bin/bash bots\nsudo -u bots bash -c 'mkdir -p ~/bot1 ~/bot2 ~/bot3'\nsudo -u bots bash -c 'cd ~/bot1 && python3 -m venv venv && venv/bin/pip install aiogram'\nsudo -u bots bash -c 'cd ~/bot2 && python3 -m venv venv && venv/bin/pip install vkbottle'
", 'Каждый бот держит свои секреты в своём .env — токены не пересекаются и не утекают между ботами.']

Отдельный systemd-сервис на каждого бота

['Главное правило — один бот, один сервис. Так вы перезапускаете, останавливаете и читаете логи каждого бота независимо. Создаём unit для первого:', "
sudo tee /etc/systemd/system/bot1.service > /dev/null <<'EOF'\n[Unit]\nDescription=Bot 1 (aiogram)\nAfter=network-online.target\nWants=network-online.target\n\n[Service]\nUser=bots\nWorkingDirectory=/home/bots/bot1\nEnvironmentFile=/home/bots/bot1/.env\nExecStart=/home/bots/bot1/venv/bin/python bot.py\nRestart=always\nRestartSec=5\nMemoryMax=512M\n\n[Install]\nWantedBy=multi-user.target\nEOF\nsudo systemctl daemon-reload\nsudo systemctl enable --now bot1
", 'Для остальных ботов делаем аналогичные unit-файлы (bot2.service, bot3.service), меняя пути. Управляем ими по отдельности или группой:', "
sudo systemctl restart bot2\nsudo systemctl status 'bot*'\njournalctl -u bot3 -f
"]

Лимиты ресурсов и защита от жадных ботов

['Один сбойный бот, уходящий в бесконечный цикл или течь памяти, не должен положить весь сервер. systemd умеет ограничивать ресурсы каждого сервиса через cgroups — задайте потолок по памяти и доле CPU.', '
# в секции [Service]:\nMemoryMax=512M\nCPUQuota=50%\nTasksMax=100
', 'MemoryMax убьёт бота при превышении лимита (лучше упасть одному, чем всем по OOM), CPUQuota=50% не даст занять больше половины ядра, а TasksMax ограничит число потоков. Проверить фактическое потребление можно так:', '
systemctl status bot1 | grep Memory\nsystemd-cgtop
']

Мониторинг всех ботов сразу

['Когда ботов много, важно видеть картину целиком. systemctl с маской покажет статус всех разом, а systemd-cgtop — потребление ресурсов в реальном времени, как top, но по сервисам.', "
systemctl list-units 'bot*' --type=service\nsystemd-cgtop\njournalctl -u 'bot*' --since '1 hour ago'
", 'Для оповещений о падениях удобно добавить в каждый unit директиву OnFailure с сервисом-нотификатором, который шлёт сообщение в Telegram — тогда вы узнаете о сбое бота сразу, а не при жалобе пользователей.']

Сколько ботов потянет сервер и где его взять

['Ориентир: лёгкие боты (Telegram, VK, Discord без медиа) — 5-15 штук на 2 ГБ RAM. Тяжёлые (headless-браузер, ML, перекодировка) — 1-3 на сервер. Быстрый диск важен при частом старте и логировании многих сервисов.', 'На тарифах MAATRIX это AMD EPYC + NVMe — процессор с высокой производительностью на ядро тянет десятки процессов, а NVMe убирает дисковые задержки. Растёте — легко переезжаете на старший тариф без смены провайдера. Локации UK/США, ежедневные бэкапы, оплата картой РФ, СБП, криптой или MAAT. От $8/мес.', '
  • Общий venv на всех — конфликт версий ломает сразу всех ботов.
  • Один сервис на всех ботов — падение одного роняет остальных.
  • Нет лимитов памяти — течь одного бота убивает сервер по OOM.
  • Секреты в общем файле — токены ботов пересекаются и путаются.
']

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.

Арендовать VPS для нескольких ботов

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

Сколько ботов можно держать на одном VPS?

Лёгких ботов (Telegram, VK, Discord) — 5-15 на 2 ГБ RAM, они почти не грузят сервер. Тяжёлых (headless, ML) — 1-3. Всё зависит от нагрузки каждого.

Нужен ли Docker для нескольких ботов?

Не обязательно. systemd с отдельными сервисами и venv даёт достаточную изоляцию. Docker удобен, если у ботов сложные и конфликтующие системные зависимости.

Как не дать одному боту положить сервер?

Задайте в systemd лимиты MemoryMax и CPUQuota через cgroups. Тогда сбойный бот упрётся в свой потолок и не заберёт все ресурсы у остальных.