Перейти к содержимому
VDS · Приложения и боты

Дискорд-бот: запуск и присмотр

Запуск дискорд-бота на VDS под systemd, ограничение памяти, чтение логов, борьба с ограничением частоты запросов и обновление без простоя.

Обновлено 23 августа 2026 г.

Дискорд-бот держит постоянное соединение WebSocket с шлюзом Discord, поэтому ему нужна машина, которая не выключается. По ресурсам он скромен, но в отличие от телеграм-бота хуже переносит перезапуски: после каждого идёт повторное подключение к шлюзу.

Установка

useradd -r -m -d /srv/dbot -s /usr/sbin/nologin dbot
cd /srv/dbot && sudo -u dbot git clone https://github.com/you/bot.git .
sudo -u dbot npm ci --omit=dev
install -o dbot -g dbot -m 600 /dev/null /srv/dbot/.env

В .env кладите токен и идентификаторы. Токен из панели разработчика Discord — это полный доступ к боту, обращайтесь с ним как с паролем.

Для Python-библиотек порядок тот же с виртуальным окружением, см. приложение на Python.

Служба

/etc/systemd/system/dbot.service:

[Unit]
Description=Discord bot
After=network-online.target
Wants=network-online.target

[Service]
User=dbot
WorkingDirectory=/srv/dbot
EnvironmentFile=/srv/dbot/.env
ExecStart=/usr/bin/node index.js
Restart=always
RestartSec=15
MemoryMax=512M
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now dbot

RestartSec=15 вместо стандартных пяти секунд: при обрыве связи с шлюзом частые перезапуски приводят к временной блокировке подключений со стороны Discord.

MemoryMax не даёт боту с утечкой памяти утащить за собой всю машину — особенно важно на VDS-1 с 2 ГБ.

Присмотр

systemctl status dbot
journalctl -u dbot -f
journalctl -u dbot --since today -p err
systemctl show dbot -p NRestarts

NRestarts — самый полезный показатель: если счётчик растёт каждый час, бот падает, а Restart=always это маскирует.

Расход памяти конкретной службы:

systemctl status dbot | grep Memory

Общая картина по машине — графики процессора, памяти и трафика в «Обзоре» панели /hosting/vds/m/<id>.

Ограничение частоты запросов

Discord ограничивает частоту вызовов API. Признаки — ошибки 429 в логах и «залипающие» команды. Что помогает:

  • не отправлять сообщения в цикле без пауз;
  • редактировать одно сообщение вместо отправки новых;
  • кэшировать справочные данные, а не запрашивать их на каждое событие;
  • использовать очередь на Redis для массовых рассылок.

Обновление

cd /srv/dbot
sudo -u dbot git pull
sudo -u dbot npm ci --omit=dev
systemctl restart dbot
journalctl -u dbot -n 50

Последняя строка обязательна: убедитесь, что бот подключился к шлюзу, а не упал на новой зависимости.

Частые ошибки

СимптомПричина
Бот в сети, но не отвечает на командыНе включены нужные интенты в панели разработчика
Постоянные переподключенияСлишком короткий RestartSec или падение в обработчике события
Invalid tokenТокен перевыпущен, .env не обновлён
Команды дублируютсяРаботают две копии бота — проверьте ps aux | grep node
Машина уходит в свопНет MemoryMax, утечка в коде

Не запускайте бота под screen или tmux. Сессия переживёт разрыв SSH, но не перезагрузку машины, и через месяц вы забудете, где он вообще запущен.