Несколько ботов на одном VPS: правильная организация
Держать по серверу на каждого бота — дорого и неудобно. Один 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. Тогда сбойный бот упрётся в свой потолок и не заберёт все ресурсы у остальных.