Skip to content
VDS · Застосунки та боти

Discord-бот: запуск і моніторинг

Запуск Discord-бота на VPS під systemd, обмеження пам'яті, читання логів, боротьба з rate limits і оновлення без простою.

Оновлено 23 серпня 2026 р.

Discord-бот тримає постійне WebSocket-з'єднання з gateway Discord, тому йому потрібна машина, яка не вимикається. Його вимоги до ресурсів помірні, але на відміну від Telegram-бота він гірше переживає перезапуски: кожен із них змушує встановлювати нове з'єднання з gateway.

Встановлення

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

Покладіть токен і ID у .env. Токен із Discord Developer Portal — це повний доступ до бота, тож поводьтеся з ним як із паролем.

Для бібліотек 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 замість стандартних п'яти секунд: коли з'єднання з gateway обривається, часті перезапуски призводять до тимчасового блокування з'єднань із боку 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

Для загальної картини машини дивіться графіки CPU, пам'яті та трафіку в розділі «Огляд» панелі за адресою /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

Останній рядок обов'язковий: переконайтеся, що бот підключився до gateway, а не впав на новій залежності.

Поширені помилки

СимптомПричина
Бот онлайн, але не відповідає на командиУ Developer Portal не увімкнено потрібні intents
Постійні перепідключенняRestartSec закороткий або збій в обробнику подій
Invalid tokenТокен перегенерували, а .env не оновили
Команди дублюютьсяЗапущено дві копії бота — перевірте ps aux | grep node
Машина починає використовувати swapНемає MemoryMax, у коді витік

Не запускайте бота під screen чи tmux. Сесія переживе розрив SSH, але не перезавантаження машини — а за місяць ви забудете, де він узагалі працює.