All posts
by Renzom Team4 min read

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
Also available in Deutsch

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.js and dotenv pre-installed (so you can require("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.

  1. In the panel, open your server β†’ Files β†’ SFTP details. You'll see a host, port, and username. The password is your panel password.

  2. In your local terminal: sftp -P <port> <user>@<host>

  3. put -r ./your-bot-folder /home/container/

  4. Edit index.js (the default main file) so it has your bot logic. Or upload your existing index.js over the placeholder.

  5. Create a .env file with at minimum:

    DISCORD_TOKEN=your_bot_token_here
    
  6. Back in the panel: hit Start. The first start runs npm install automatically.

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.

  1. In the panel, open your server β†’ Startup tab.
  2. Set:
    • Git Repo Address: https://github.com/yourusername/yourbot.git
    • Install Branch: main
    • Auto Update: 1 (re-pull on every restart)
  3. If the repo is private:
    • Git Username: your GitHub username
    • Git Access Token: a fine-grained Personal Access Token with Contents: Read on that repo
  4. Hit Reinstall in the top-right of the panel. This wipes the container and clones your repo fresh.
  5. Add your .env file via SFTP (don't commit .env to your repo).
  6. 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.