Deploy a Discord bot in 5 minutes with Renzom
Step-by-step: from zero to a 24/7 Discord.js bot running on a Renzom node. Bring your own code via Git or upload via SFTP.
- #discord-bot
- #tutorial
- #hosting
We just shipped a dedicated Discord-Bot Node tier on the pricing page. This post walks through the actual deploy β what you do after you've paid, in plain words, no screenshots from 2018.
What you get
When you order a Discord-Bot Node from us:
- A clean Node.js (current LTS) container, always-on
discord.jsanddotenvpre-installed (so you canrequire("discord.js")immediately)- Full SFTP access to upload your bot files
- Optional Git auto-clone-and-update from your repo (public or private with token)
- A web panel to start / stop / view logs / edit files in the browser
- The optional dedicated-IP add-on if you need a stable outbound IP for rate-limit reasons
Costs from ~β¬2.65/month for 1 GB RAM (live-priced β see the configurator). Most Discord bots fit comfortably in 1 GB.
Option A: Upload via SFTP (simplest)
After your order is provisioned (usually under a minute), you'll get login details for the panel.
In the panel, open your server β Files β SFTP details. You'll see a host, port, and username. The password is your panel password.
In your local terminal:
sftp -P <port> <user>@<host>put -r ./your-bot-folder /home/container/Edit
index.js(the default main file) so it has your bot logic. Or upload your existingindex.jsover the placeholder.Create a
.envfile with at minimum:DISCORD_TOKEN=your_bot_token_hereBack in the panel: hit Start. The first start runs
npm installautomatically.
Done. Logs are live in the panel console.
Option B: Auto-deploy from Git (recommended for serious bots)
If you have your bot in a Git repo, this is much nicer because every push redeploys automatically.
- In the panel, open your server β Startup tab.
- Set:
- Git Repo Address:
https://github.com/yourusername/yourbot.git - Install Branch:
main - Auto Update:
1(re-pull on every restart)
- Git Repo Address:
- If the repo is private:
- Git Username: your GitHub username
- Git Access Token: a fine-grained Personal Access Token with
Contents: Readon that repo
- Hit Reinstall in the top-right of the panel. This wipes the container and clones your repo fresh.
- Add your
.envfile via SFTP (don't commit.envto your repo). - Start.
From now on, every time you restart the bot it will git pull and npm install automatically.
A minimal index.js to test
If you don't have a bot yet, here's the smallest thing that proves the setup works:
require("dotenv").config();
const { Client, GatewayIntentBits } = require("discord.js");
const client = new Client({
intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages],
});
client.once("ready", () => {
console.log(`Logged in as ${client.user.tag}`);
});
client.login(process.env.DISCORD_TOKEN);
Save that as index.js, set DISCORD_TOKEN in your .env, hit Start. The console should print Logged in as YourBot#0000 within seconds.
Common things that go wrong (and fixes)
"Used disallowed intents." β In the Discord Developer Portal, go to your application β Bot β enable the privileged intents you actually request. MessageContent is the most common one.
Bot starts and immediately crashes with MODULE_NOT_FOUND. β You either committed a node_modules/ folder (delete it from the repo) or your package.json doesn't list the dependency. We pre-install discord.js and dotenv as a default, but anything else needs to be in your package.json.
Bot works locally but not on the server. β Almost always .env differences. Check the panel's environment variables AND your .env file. The .env file wins for dotenv-style loading.
"Rate limited" β If you're hitting Discord rate limits aggressively (e.g. mass-DM, mass-role-changes), you're being noisy and Discord will eventually IP-ban the source. This is the one situation where the dedicated-IP add-on is worth it for a Discord bot β your IP isn't shared with anything else doing the same thing.
Memory keeps growing until the bot OOMs. β Almost always a memory leak in your code, not the host. Common causes: holding references to old messages, never closing voice connections, growing in-memory caches without bounds. Use --max-old-space-size=512 in the startup args as a hard cap, then look for the leak.
What's not in this tier
We don't run music bots that require voice on this tier β the egg is tuned for text/slash-command bots. If you want a Discord music bot (JMusicBot, Aoede, etc.), let us know and we'll deploy one of the existing music-bot eggs on a separate slot for you. Voice has different RAM and CPU profiles and we'd rather give you a server that's actually configured for it.
Pricing reality check
A Discord bot doesn't need much. Our 1 GB tier is enough for almost any reasonable bot, starting at ~β¬2.65/month (live-priced β check the configurator for the current rate). If you're being charged β¬5+/month elsewhere for a bot host with similar specs, you're probably overpaying β most bots don't even use 256 MB.
That said: cheap doesn't mean reliable. If your "cheap" host restarts your container every 6 hours, you'll see "Bot is offline" messages from your users every 6 hours. We don't do that. Your container runs until you stop it or push a new commit. That's the actual product.
Pick a tier or ping us on Discord if you have questions.
