Discord-бот живёт ровно столько, сколько работает процесс, который его запускает: закрыли ноутбук — бот ушёл в офлайн, и участники видят серый значок. Значит, нужна машина, которая не выключается: бесплатная площадка, PaaS-платформа или собственный виртуальный сервер. Для бота с командами, ролями и модерацией хватает одного ядра и 1 ГБ памяти — такие тарифы в каталоге VPS под ботов начинаются от 59 ₽ в месяц. Бот на 1000–2000 активных пользователей спокойно живёт на этой конфигурации.
Материал для тех, кто уже написал бота на discord.js или discord.py и думает, куда его положить. Разберём реальные ограничения бесплатных площадок, посчитаем стоимость своего сервера и пошагово запустим бота на Ubuntu через systemd — так, чтобы он сам поднимался после перезагрузки и после падения. Отдельно поговорим про токен: держать его в коде нельзя, и это не формальность.
Что Discord-боту нужно от сервера на самом деле
Главное отличие бота от сайта: он не принимает входящие соединения. Бот сам подключается к шлюзу Discord и держит это соединение открытым, слушая события — новое сообщение, вход участника, реакцию. Практичный вывод: боту не нужны домен, SSL-сертификат и открытые порты. Нужен исходящий доступ в интернет и процесс, который никто не убивает.
Ресурсы такой процесс ест скромно. Пустой бот на Node.js после старта занимает ориентировочно 60–90 МБ оперативной памяти, на Python с discord.py — 40–70 МБ. Остальное съедает кэш серверов и участников, который библиотека держит в памяти: на 20–30 подключённых Discord-серверах это ещё 100–200 МБ. Итого 1 ГБ — не минимальный, а рабочий объём с запасом.
Процессор загружается всплесками: обработка команды занимает миллисекунды, между командами ядро простаивает. Одного виртуального ядра хватает, пока бот не делает что-то тяжёлое — музыку (перекодирование аудио грузит CPU постоянно), генерацию картинок, разбор больших выгрузок. Что входит в понятие хостинга Discord-бота, разобрано в глоссарии.
Диск боту почти не нужен: код с зависимостями занимает 200–400 МБ, база с настройками — единицы мегабайт. Базовых 10 ГБ хватает с запасом, и место скорее съедят логи.
Три способа разместить бота: бесплатно, PaaS или свой VPS
Вариантов по большому счёту три, и различаются они не столько ценой, сколько тем, кто отвечает за непрерывную работу. На бесплатных площадках не отвечает никто. На PaaS отвечает платформа, но по своим правилам. На собственном сервере — вы, и правила устанавливаете тоже вы.
Колонка «Круглосуточно» отвечает на главный вопрос: будет ли бот онлайн в четыре часа ночи, когда к нему никто не обращался восемь часов.
| Вариант | Стоимость | Круглосуточно | Главное ограничение |
|---|---|---|---|
| Домашний компьютер | 0 ₽ | Нет | Отключения света и перезагрузки |
| Бесплатный тариф облака | 0 ₽ | Условно | Засыпание, лимит часов, сброс файлов |
| PaaS с платным планом | ориентировочно 300–900 ₽/мес | Да | Оплата за время работы контейнера |
| Свой VPS | от 59 ₽/мес | Да | Настраивать систему придётся самому |
Четвёртый вариант — обычный виртуальный хостинг — почти всегда не работает. Классический шаред-хостинг рассчитан на короткие PHP-запросы и убивает фоновые процессы, которые висят дольше нескольких минут. Исключение — тарифы с явным разрешением на длительные процессы, они собраны в разделе хостинга для Python-ботов.

Бесплатные площадки: чем приходится платить вместо денег
Бесплатный план выглядит идеально ровно до первой ночи. Три ограничения встречаются практически везде, и о них обычно узнают уже после запуска.
Засыпание. Многие бесплатные тарифы усыпляют контейнер, если к нему не приходили HTTP-запросы 15–30 минут. Для сайта это терпимо: пришёл посетитель — сервис проснулся за пару секунд. Для бота это смерть: HTTP-запросов он не принимает, будить его некому, соединение со шлюзом рвётся, и бот висит в офлайне до следующего деплоя.
Лимит часов. Бесплатные планы дают фиксированный запас машинного времени. Если его меньше, чем 744 часа (столько в месяце из 31 дня), круглосуточная работа не выйдет по арифметике: бот отработает 20–25 дней и отключится до первого числа.
Потеря состояния. Файловая система бесплатных контейнеров чаще всего эфемерная: при перезапуске всё, что бот записал на диск, исчезает. SQLite-база с настройками серверов, счётчики предупреждений, накопленный опыт участников — всё обнулится. Лечится внешней базой данных, но бесплатные базы приходят со своими лимитами: обычно 0,5–1 ГБ и около сотни одновременных подключений.
PaaS: удобный деплой, пока бот один и без состояния
PaaS — платформа, куда вы отдаёте код, а она сама собирает контейнер и запускает его. Ни ОС, ни systemd, ни SSH: пуш в репозиторий, и через минуту новая версия в работе. Для первого бота это честно удобно, особенно если разбираться с Linux не хочется.
Дальше начинаются нюансы. Тарификация обычно поминутная и считает не только процессорное время, но и память: бот, который висит круглые сутки, оплачивается все 720–744 часа месяца. Счёт за постоянно работающий контейнер с 512 МБ памяти выходит ориентировочно 300–900 ₽ в месяц — в 5–8 раз дороже базового VPS с тем же объёмом.
Свобода нужна, когда боту потребуется что-то за пределами кода: свой бинарник ffmpeg для музыки, локальный Redis, задача по расписанию с еженедельной выгрузкой, вторая база. На PaaS каждый такой пункт — либо отдельная платная услуга, либо «нельзя». На своём сервере это одна команда установки пакета.
Разумный сценарий такой: начать на PaaS, пока бот — эксперимент, и переехать на VPS, когда он обрастёт базой, расписанием и вторым процессом. Переезд занимает вечер, потому что systemd-юнит и env-файл переносятся один в один.
Сколько стоит собственный VPS под Discord-бота
В каталоге недорогих VPS конфигурация «1 ядро + 1 ГБ + 10 ГБ NVMe» стартует с 59 ₽ в месяц — примерно 2 ₽ в сутки. Ниже — цены на такие тарифы.
| Провайдер | Цена от | Базовая конфигурация | Рейтинг |
|---|---|---|---|
| Cloudcore | 59 ₽/мес | 1 ядро, 1 ГБ, 10 ГБ NVMe | 3,3 |
| HostVDS | 127 ₽/мес | 1 ядро, 1 ГБ, 10 ГБ NVMe | 3,3 |
| 4VPS | 110 ₽/мес | 1 ядро, 1 ГБ, 5 ГБ NVMe | 4,0 |
| Selectel | 200 ₽/мес | 1 ядро, 1 ГБ, 10 ГБ NVMe | 4,5 |
| AdminVPS | 299 ₽/мес | 1 ядро, 1 ГБ, 15 ГБ NVMe | 4,5 |
| Beget | 330 ₽/мес | 1 ядро, 1 ГБ, 10 ГБ NVMe | 4,5 |
| Aéza | 593 ₽/мес | 1 ядро, 2 ГБ, 30 ГБ NVMe | 4,6 |
Данные проверены 02.09.2026.
Разброс от 59 до 593 ₽ объясняется тем, что входит в цену: у дешёвых тарифов плотнее заселены хосты и скромнее поддержка. У Aéza в базовом тарифе сразу 2 ГБ памяти и 30 ГБ диска, а всего в каталоге провайдера 151 тариф — расти есть куда. Разница в 300 ₽ в месяц даёт 3600 ₽ в год.
Какую конфигурацию брать: 1 ГБ, 2 ГБ или больше
Память — единственный ресурс, из-за нехватки которого бот падает молча и внезапно. Когда свободная оперативная память заканчивается, ядро Linux запускает механизм OOM killer и убивает самый прожорливый процесс — обычно как раз бота. В журнале останется одна строка, а в Discord — офлайн-статус.
Ориентируйтесь на тип бота, а не на число участников: сотня серверов с ботом-«эхо» нагрузит машину меньше, чем один сервер с музыкальным ботом. Значения в таблице ориентировочные, но по ним удобно выбирать тариф.
| Тип бота | Память | Ядра | Комментарий |
|---|---|---|---|
| Команды, роли, модерация | 1 ГБ | 1 | 1000–2000 активных пользователей без проблем |
| Бот с SQLite или PostgreSQL | 1–2 ГБ | 1 | База на том же сервере добавляет 150–250 МБ |
| Музыкальный бот | 2 ГБ | 2 | Каждый поток аудио — постоянная нагрузка на CPU |
| Бот с генерацией изображений | 4 ГБ | 2–4 | Пики памяти при обработке крупных картинок |
Практичный компромисс — тариф на 1 ГБ плюс файл подкачки на 1–2 ГБ. Это резерв на диске, который спасает процесс в момент пикового потребления: на NVMe подкачка работает достаточно быстро, чтобы бот пережил всплеск.

Пошаговый запуск бота на Ubuntu 24.04
Берём чистый сервер с Ubuntu 24.04: это LTS-версия с поддержкой до 2029 года и свежими пакетами Node.js и Python. Команды выполняются в терминале сервера после подключения по SSH — если шаг новый, начните с гайда как настроить SSH на VPS.
Схема простая: обновляем систему, ставим среду выполнения, заводим отдельного пользователя, кладём код и запускаем. Пользователь без прав администратора нужен ради безопасности.
- Обновите пакеты:
sudo apt update && sudo apt upgrade -y— команда закрывает известные уязвимости. - Установите среду:
sudo apt install -y nodejs npmилиsudo apt install -y python3 python3-venv. Версию проверьте черезnode -v: discord.js требует Node.js 18 и новее. - Создайте пользователя без права входа:
sudo useradd -r -s /usr/sbin/nologin botuser. Флаг-rделает системную учётную запись,nologinзапрещает вход под ней по SSH. - Положите код в
/opt/discord-bot— стандартный каталог для стороннего софта — и передайте права:sudo chown -R botuser:botuser /opt/discord-bot. - Установите зависимости:
sudo -u botuser npm ci --omit=devилиpip install -r requirements.txt. - Проверьте запуск вручную:
sudo -u botuser node index.js. Бот появится онлайн за 3–10 секунд; остановите его через Ctrl+C.
Systemd-юнит: бот поднимается сам после перезагрузки
Запуск через node index.js в терминале годится только для проверки: закроете SSH-сессию — процесс умрёт вместе с ней. Нужен менеджер служб, и в Ubuntu он уже есть. Systemd стартует бота при загрузке сервера, перезапускает после падения и собирает логи.
Создайте файл /etc/systemd/system/discord-bot.service командой sudo nano /etc/systemd/system/discord-bot.service и вставьте описание службы.
[Unit]
Description=Discord bot
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=botuser
WorkingDirectory=/opt/discord-bot
EnvironmentFile=/etc/discord-bot.env
ExecStart=/usr/bin/node /opt/discord-bot/index.js
Restart=always
RestartSec=10
StartLimitBurst=0
[Install]
WantedBy=multi-user.target
Разберём ключевые строки. After=network-online.target откладывает старт до момента, когда сеть реально поднялась, — иначе бот стартует раньше сети и упадёт на первом подключении. Restart=always поднимает процесс после любого завершения, RestartSec=10 выдерживает паузу в 10 секунд, чтобы не долбить API Discord в цикле. StartLimitBurst=0 снимает ограничение systemd, который по умолчанию сдаётся после 5 перезапусков подряд.
Дальше три команды: sudo systemctl daemon-reload перечитывает конфигурацию, sudo systemctl enable discord-bot включает автозапуск, sudo systemctl start discord-bot запускает службу. Проверка — systemctl status discord-bot, в выводе должно быть active (running). Перезагрузите сервер через sudo reboot и убедитесь, что через 30–60 секунд бот снова онлайн.
Где хранить токен бота и почему не в коде
Токен — это пароль, который даёт полный доступ к вашему приложению в Discord. Кто получил токен, тот управляет ботом: рассылает сообщения от его имени, выдаёт роли и банит участников на всех серверах, куда бот добавлен. Поэтому строка вида const TOKEN = "MTA5..." прямо в файле — самая частая и самая дорогая ошибка новичков.
Проблема не в сервере, а в том, что код путешествует. Файл с токеном уезжает в публичный репозиторий, попадает в скриншот, остаётся в архиве, который вы отправили другу. Боты-сканеры находят утёкшие токены за минуты. Правильный способ — переменные окружения: они лежат отдельно от кода.
Создайте файл /etc/discord-bot.env с одной строкой DISCORD_TOKEN=ваш_токен без кавычек и пробелов вокруг знака равенства. Закройте к нему доступ: sudo chmod 600 /etc/discord-bot.env и sudo chown root:root /etc/discord-bot.env. Права 600 означают, что читать файл может только владелец — root и запущенная от него служба, но не другие пользователи сервера.
В коде токен читается из окружения: process.env.DISCORD_TOKEN в Node.js или os.environ["DISCORD_TOKEN"] в Python. Если токен уже засветился — сбросьте его в панели разработчика Discord и перезапустите службу, старый перестанет работать мгновенно.
Логи и автоперезапуск: как понять, почему бот упал
Служба под systemd пишет весь вывод бота в системный журнал, отдельный файл лога не нужен. Смотреть журнал в реальном времени — journalctl -u discord-bot -f: флаг -f держит вывод открытым и дописывает новые строки. Последние 200 строк покажет journalctl -u discord-bot -n 200, события за сутки — journalctl -u discord-bot --since "24 hours ago".
Журнал разрастается. На диске в 10 ГБ разговорчивый бот за пару месяцев съест несколько гигабайт логов, и сервер встанет из-за нехватки места. Ограничьте объём в /etc/systemd/journald.conf параметром SystemMaxUse=500M и выполните sudo systemctl restart systemd-journald.
Автоперезапуск решает мелкие аварии, но маскирует крупные: если бот падает раз в 30 секунд, systemd будет поднимать его вечно, а вы узнаете об этом от участников. Кроме Restart=always нужен внешний контроль — счётчик перезапусков виден в systemctl status, оповещения настраиваются по инструкции как настроить мониторинг сервера.
Отдельно позаботьтесь о данных: код лежит в Git, а база с настройками серверов и уровнями участников — только на диске VPS. Ежедневный дамп в 4 утра и хранение 7–14 копий закрывают риск за десять минут настройки.
Частые ошибки
Проблемы с круглосуточной работой повторяются от проекта к проекту. Перед запуском пробегитесь по списку — он экономит вечер отладки.
- Запуск через
nohupилиscreenвместо systemd: после перезагрузки сервера бот не поднимется, и вы узнаете об этом через сутки. - Токен в коде или в файле внутри репозитория — самая частая причина угона бота.
- Тариф с 512 МБ памяти «для экономии»: бот с базой упирается в потолок и попадает под OOM killer на второй неделе.
- Отсутствие
After=network-online.target: бот стартует раньше сети и падает при каждой перезагрузке. - Работа от root: любая уязвимость в зависимостях превращается в полный доступ к серверу.
- Забытый мониторинг свободного места — логи и дампы базы забивают диск за пару месяцев.
Отдельная категория — попытки обойти засыпание бесплатного контейнера самодельным пингом раз в 5 минут. Схема держится ровно до правки правил площадки, после чего бот отключают без предупреждения. Если бот нужен людям каждый день, дешевле сразу заплатить 59–150 ₽ в месяц за предсказуемость.
Частые вопросы
Можно ли держать Discord-бота на обычном виртуальном хостинге? Как правило, нет: шаред-хостинг рассчитан на короткие веб-запросы и убивает фоновые процессы. Работают только тарифы, где длительные процессы разрешены явно. Проще взять VPS от 59 ₽ в месяц.
Хватит ли 1 ГБ памяти для бота на 50 Discord-серверах? Для бота с командами, ролями и модерацией — да, 1 ядра и 1 ГБ достаточно при 1000–2000 активных пользователях; кэш участников добавит ориентировочно 150–300 МБ. Если бот играет музыку, берите 2 ГБ и 2 ядра.
Что произойдёт с ботом при перезагрузке сервера? Если служба включена командой systemctl enable, бот стартует сам через 30–60 секунд после загрузки. Без этого шага сервер поднимется, а бот останется в офлайне.
Можно ли запускать на одном VPS несколько ботов? Да: три-четыре лёгких бота уживаются на 1 ГБ. Для каждого заводите свой systemd-юнит, каталог и env-файл с токеном — тогда падение одного не заденет остальных.
Как понять, что серверу пора добавить ресурсов? Смотрите на три сигнала: занятость памяти выше 85%, активную подкачку и записи OOM killer в журнале. Ещё признак — задержка ответа выросла с сотен миллисекунд до нескольких секунд.
Чем размещение Discord-бота отличается от Telegram-бота? Технически почти ничем: тот же постоянный процесс, тот же systemd, те же требования к памяти. Разница в модели общения с API — Telegram-бот умеет работать через опрос или вебхук, Discord-бот всегда держит открытое соединение. Пошаговый разбор соседнего сценария есть в гайде по развёртыванию Telegram-бота на VPS.
Итог
Бесплатные площадки годятся, чтобы показать бота друзьям на выходных, но круглосуточную работу не гарантируют: засыпание, лимит машинных часов и эфемерный диск съедают экономию. PaaS снимает возню с системой, зато постоянно работающий контейнер обходится в 300–900 ₽ в месяц. Свой VPS на 1 ядро и 1 ГБ стоит от 59 ₽ и даёт полный контроль: за вечер настройки вы получаете бота, который поднимается сам.
Тарифы, на которых боты работают без сюрпризов, собраны в разделе VPS для ботов — там видны цены, конфигурации и отзывы, от AdminVPS за 299 ₽ до Aéza за 593 ₽ в месяц.