Discord bot: pokretanje i nadzor
Pokretanje Discord bota na VPS-u pod systemd-om, ograničavanje memorije, čitanje logova, rešavanje rate limit-a i ažuriranje bez zastoja.
Ažurirano 23. avgust 2026.
Discord bot drži stalnu WebSocket vezu sa Discord gateway-om, pa mu treba mašina koja je stalno uključena. Zahtevi za resursima su mu skromni, ali za razliku od Telegram bota lošije podnosi restarte: svaki restart zahteva novu vezu sa gateway-om.
Instalacija
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
Token i ID-ove stavi u .env. Token iz Discord Developer Portal-a je pun pristup botu — tretiraj ga kao lozinku.
Za Python biblioteke postupak je isti, uz virtuelno okruženje; vidi Python aplikacija.
Servis
/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 umesto standardnih pet sekundi: kada veza sa gateway-om padne, česti restarti dovode do privremene blokade konekcija sa Discord-ove strane.
MemoryMax sprečava da bot sa curenjem memorije povuče celu mašinu za sobom — posebno važno na VDS-1 sa 2 GB.
Nadzor
systemctl status dbot
journalctl -u dbot -f
journalctl -u dbot --since today -p err
systemctl show dbot -p NRestarts
NRestarts je najkorisnija metrika: ako brojač raste svakog sata, bot pada i Restart=always to samo maskira.
Potrošnja memorije određenog servisa:
systemctl status dbot | grep Memory
Za opštu sliku mašine pogledaj grafikone CPU-a, memorije i saobraćaja u „Pregledu“ panela na /hosting/vds/m/<id>.
Ograničenje brzine
Discord ograničava broj API poziva. Znaci su 429 greške u logovima i komande koje se „zaglave“. Šta pomaže:
- ne šalji poruke u petlji bez pauza;
- menjaj jednu poruku umesto da šalješ nove;
- keširaj referentne podatke umesto da ih tražiš na svaki događaj;
- koristi Redis red za masovna obaveštenja.
Ažuriranje
cd /srv/dbot
sudo -u dbot git pull
sudo -u dbot npm ci --omit=dev
systemctl restart dbot
journalctl -u dbot -n 50
Poslednja linija je obavezna: uveri se da se bot povezao na gateway, a nije pao zbog nove zavisnosti.
Česte greške
| Simptom | Uzrok |
|---|---|
| Bot je onlajn ali ne odgovara na komande | Potrebni intents nisu uključeni u Developer Portal-u |
| Stalna ponovna povezivanja | RestartSec je prekratak, ili je pad u event handler-u |
Invalid token | Token je regenerisan a .env nije ažuriran |
| Komande se dupliraju | Rade dve kopije bota — proveri ps aux | grep node |
| Mašina počinje da svopuje | Nema MemoryMax, curenje u kodu |
Ne pokreći bota pod
screenilitmux. Sesija preživi prekid SSH veze, ali ne i restart mašine — a za mesec dana ćeš zaboraviti gde uopšte radi.