Replit goes idle. Heroku free is gone. Your laptop dies. A $3/mo Pulsar67 VPS runs your bot 24/7 - it never sleeps, never idles, with full root and zero cold starts.
Replit sleeps unless you keep it warm. Glitch boots are slow. Railway, Render, Fly - they're all great until your bot stays online long enough to hit a billing surprise.
A VPS is one fixed cost per month, no cold starts, no sleep, no surprise tier bumps. Whether your bot serves one server or a thousand, the bill stays $3.
No idle timeout, no cold starts. systemd keeps your bot running across reboots.
No "compute hours" surprises. One bot, ten bots, hundred-server bot - same bill.
discord.js, discord.py, JDA, serenity-rs, anything. Install whatever runtime you need.
Postgres, Redis, SQLite - all on the same box, no managed-DB markup.
Most Discord bots fit comfortably on our smallest tier. Scale up only if you actually need to.
systemd service file (15 lines, will survive reboots)fail2ban on SSH, basic ufw rulesThe cheapest plan runs your bot indefinitely. No per-message billing.
From order to ssh root@your-bot in under a minute.
Bot takes off? Upgrade in the dashboard - same IP, two clicks.
The person debugging your network issue has SSH'd into the host.
Move your bot to a VPS that doesn't fall asleep. Three dollars a month, no asterisks.
Concrete setup details for the first deploy, the firewall, and the first thing to check when something acts strange.
No inbound app port required for most bots. Keep SSH on 22 or your custom SSH port, then let the bot connect outbound to the Discord Gateway over HTTPS/WebSocket.
Nano works for several lightweight Node.js or Python bots. Starter is the safer floor once you add Redis, Postgres, image generation, or larger command queues.
Run the bot as a systemd service with an EnvironmentFile for tokens. Store logs in journald or rotate a small app log under /var/log.
If the bot shows as offline, check systemctl status, journalctl -u your-bot, token scope, gateway intents, and outbound firewall rules.