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, але не перезавантаження машини — а за місяць ви забудете, де він узагалі працює.