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

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

Несколько ботов на одном VPS: systemd, изоляция, ресурсы
Блог MAATRIX · 2026-07-07

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

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

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

Большинство ботов простаивают: 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
sudo -u bots bash -c 'mkdir -p ~/bot1 ~/bot2 ~/bot3'
sudo -u bots bash -c 'cd ~/bot1 && python3 -m venv venv && venv/bin/pip install aiogram'
sudo -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'
[Unit]
Description=Bot 1 (aiogram)
After=network-online.target
Wants=network-online.target

[Service]
User=bots
WorkingDirectory=/home/bots/bot1
EnvironmentFile=/home/bots/bot1/.env
ExecStart=/home/bots/bot1/venv/bin/python bot.py
Restart=always
RestartSec=5
MemoryMax=512M

[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now bot1

Для остальных ботов делаем аналогичные unit-файлы (bot2.service, bot3.service), меняя пути. Управляем ими по отдельности или группой:

sudo systemctl restart bot2
sudo systemctl status 'bot*'
journalctl -u bot3 -f

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

Один сбойный бот, уходящий в бесконечный цикл или течь памяти, не должен положить весь сервер. systemd умеет ограничивать ресурсы каждого сервиса через cgroups — задайте потолок по памяти и доле CPU.

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

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

Когда ботов много, важно видеть картину целиком. systemctl с маской покажет статус всех разом, а systemd-cgtop — потребление ресурсов в реальном времени, как top, но по сервисам.

systemctl list-units 'bot*' --type=service
systemd-cgtop
journalctl -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 для нескольких ботов

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

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

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

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

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

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

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

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