Hosted sandboxes can idle, free tiers change, and laptops are not production servers. A $3/mo Pulsar67 VPS keeps your bot online 24/7 with full root access and no cold starts.
A VPS gives your bot a stable home with predictable monthly pricing, SSH access, and enough control to run the exact runtime, queue, and database setup you want.
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 stays online. Plans start at $3/month.
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.