VMHeaven

Discord Bot Hosting Run Discord and Telegram bots 24/7 on your own VPS

To host a Discord or Telegram bot 24/7, run it on a small Linux VPS under systemd. Here that is a KVM server with Ubuntu or Debian and full root from €4.99/month in Amsterdam, online about a minute after your payment is confirmed, with its own IPv4 address. discord.js, discord.py, JDA, aiogram, python-telegram-bot or Go — whatever runs on Linux runs here.

  • Any language Linux runs
  • Own IPv4 address
  • Online in about a minute
  • Always-on DDoS protection

Bot VPS

For Discord and Telegram bots

Runtime
Node.js, Python, Go, Java… (you install)
System
Ubuntu · Debian
Process manager
systemd · pm2 · Docker
Inbound port
None for a Gateway bot
IP address
Own IPv4
From
€4.99/month

01Why a VPS

Why host a bot on a VPS instead of a free host?

A bot has to stay connected around the clock. Free tiers often put idle apps to sleep, share one IP address between many users and limit what you can install; a VPS is a server of your own that stays on.

Nothing goes to sleep

The server runs until you stop it: no idle timeout, no keep-alive pings needed. Your bot's Gateway connection stays up as long as your code does.

An IPv4 address of your own

Discord temporarily blocks IP addresses that send too many invalid requests. On a shared address, other people's bots can trigger that block for yours; on your own IPv4, only your own code can.

Full root

Install any runtime in any version, a database such as PostgreSQL or Redis, ffmpeg or Lavalink, and run as many processes as the plan has room for.

A fixed monthly price

€4.99/month for the smallest plan in Amsterdam, the same every month — nothing is billed by CPU hours or requests. Prepay up to 12 months and the rate drops by up to 15%.

02Networking

Do I need an open port or a domain for my bot?

Usually not. A bot that connects out to Discord or Telegram needs neither; only setups where the platform calls your server do.

Discord Gateway bot

discord.js, discord.py, JDA and most other libraries open a WebSocket from your server to Discord's Gateway. All of it is outbound, so no port has to be open and no domain is needed — a firewall that lets in SSH only is enough.

Discord interactions endpoint

Set an Interactions Endpoint URL instead, and Discord delivers each slash command as an HTTPS request to your server. That needs a public HTTPS URL — in practice a domain with a TLS certificate. Point a domain at your VPS and add HTTPS first.

Telegram bot

Long polling (getUpdates), the usual start in aiogram and python-telegram-bot, needs no domain and no open port. A webhook needs a public HTTPS URL on port 443, 80, 88 or 8443 — and while one is set, getUpdates stops working.

Our own bots run the same way: @vmheaven_bot uses long polling and our Discord app connects over the Gateway, so neither needs an inbound port.

03Deploy

How do I deploy a bot so it runs 24/7?

With systemd, which every Ubuntu and Debian server already runs: it starts the bot at boot and restarts it after a crash. Five steps from a fresh server:

  1. 01

    Create a user for the bot

    Log in over SSH and add an unprivileged user with adduser bot, so a bug in the bot cannot reach the rest of the system. Our first-ten-minutes checklist covers SSH keys and updates.

  2. 02

    Fetch your code

    Clone your repository into the bot user's home directory with git clone — or copy it over with scp or rsync.

  3. 03

    Install the runtime

    Python: apt install python3-venv, create a virtual environment and pip install your requirements inside it — pip refuses system-wide installs on current Debian and Ubuntu, and the command is python3, not python. Node.js: install a current LTS release from NodeSource or nvm, then npm ci; the distribution's nodejs package often lags behind.

  4. 04

    Write a systemd unit

    Create /etc/systemd/system/bot.service as below. Restart=always brings the bot back after a crash, and the token sits in an EnvironmentFile — a line such as DISCORD_TOKEN=… in a file with permissions 600 — not in your code or your Git history.

  5. 05

    Enable it and watch the log

    systemctl enable --now bot starts the bot now and at every boot; journalctl -u bot -f follows its log. To ship an update: git pull, then systemctl restart bot. If a webhook bot fails to restart with EADDRINUSE, the old process still holds its port.

/etc/systemd/system/bot.service
[Unit]
Description=Discord bot
After=network-online.target
Wants=network-online.target

[Service]
User=bot
WorkingDirectory=/home/bot/app
EnvironmentFile=/home/bot/app/.env
ExecStart=/usr/bin/node index.js
# Python: ExecStart=/home/bot/app/.venv/bin/python bot.py
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

For a Python bot, use the commented ExecStart line instead; with nvm, use the path that which node prints. After every change to a unit, run systemctl daemon-reload.

Prefer a different tool? pm2 does the same for Node.js — pm2 start index.js, then pm2 startup and pm2 save so it survives a reboot — and Docker Compose with restart: unless-stopped works for any language (docker: command not found?). systemd needs a full VM: in a container systemctl is missing, and every KVM server here has it. Before the bot goes live, switch to SSH keys and turn on a UFW firewall that lets in SSH only, plus 443 for a webhook.

Pick Ubuntu 24.04 LTS or Debian 13 (Trixie) at checkout — older releases are on the list too — and reinstall from the panel whenever you want a clean start. More on Ubuntu VPS and Debian VPS.

04Plans

Which plan does my bot need?

Less than you might think: the smallest plan runs a typical slash-command or moderation bot comfortably. Size up for voice, music and very large bots.

Standard KVM

Most bots
Intel · DDR4 ECC

The most vCores and RAM per euro — 2 vCores and 4 GB RAM for €4.99. Room for the bot, its database and a second or third bot next to it.

Amsterdam In stockFrankfurt Sold out
PlanvCoresRAMStorageAmsterdam
STANDARD KVM 124 GB DDR420 GB€4.99/mo
STANDARD KVM 248 GB DDR440 GB€9.99/mo
STANDARD KVM 3612 GB DDR460 GB€14.99/mo
All 9 Standard KVM plans

Hi-CPU KVM

One hot thread
AMD EPYC 7443 · ECC

Fewer vCores per plan, on AMD EPYC 7443. Node.js and Python run a bot's own code in one main thread; when that thread is the bottleneck, this is the line for it.

Amsterdam In stockFrankfurt Sold out
PlanvCoresRAMStorageAmsterdam
HI-CPU 112 GB ECC20 GB€4.99/mo
HI-CPU 224 GB ECC40 GB€9.99/mo
HI-CPU 336 GB ECC60 GB€14.99/mo
All 9 Hi-CPU KVM plans

Simple bots

Slash commands, moderation, reminders, a small SQLite or PostgreSQL database: the €4.99 plan. A bot like this typically uses a small part of its 4 GB.

Voice and music bots

Encoding audio with ffmpeg, or running Lavalink — a Java server — beside the bot, costs CPU for every active voice channel and memory for the JVM. Take a larger Standard plan for RAM, or Hi-CPU when one busy thread is the limit.

Big bots

From 2,500 servers on, Discord requires sharding; every shard is another Gateway connection and more memory. Grow along the Standard line — and if the kernel kills the bot for lack of memory, that is the sign.

Several bots, one server

Give each bot its own user and its own unit — bot-a.service, bot-b.service — so a crash or a deploy of one never touches the others.

Start small: an upgrade from the panel gives the same server more vCores, RAM and storage — your data and your IP address stay, and the new resources apply after a reboot.

Standard KVM and Hi-CPU KVM are sold out in Frankfurt right now. For a bot in Germany, DMCA Ignored KVM and Pentesting KVM are on sale there from €8.99 — VPS in Germany shows what Frankfurt sells.

Pay by card, PayPal or in crypto — Bitcoin, Ethereum, USDT, Litecoin, Monero and more — with no ID check: how paying in crypto works.

05Chat control

Can I manage my server from Discord or Telegram?

Yes. Our Telegram bot @vmheaven_bot and our Discord app connect to your VMHeaven account, so the server your bot runs on can be checked and restarted from the same chat app.

Connect in the panel

Open Settings → Contact, tick the consent box and connect Telegram, Discord or both. Connecting Discord also adds you to the VMHeaven Discord server, which is what lets the bot message you. /unlink or Disconnect ends it at any time.

Status and power

/services lists your servers with live status, IP address and renewal date. Start, stop or restart one with a tap — stop and restart ask for confirmation first.

Invoices and balance

/invoices shows what is open and /balance your credit; pay an invoice or top up right in the chat, by card or crypto.

Reminders and alerts

Expiry reminders 7, 3 and 1 day ahead, bundled into one message a day, a warning when your credit won't cover an auto-renewal, and a note when a new server is ready or a server is back online after its host restarted.

Support tickets

A message when support answers your ticket — the answer itself stays in the panel — and you can reply to the ticket straight from the chat.

No passwords in chat

Passwords and login details are never sent through Telegram or Discord. They stay in your e-mail and the panel.

Both bots are in beta and gain features regularly — tell us in a ticket what you are missing. To talk to other customers and the team, join our Discord server or our Telegram channel.

06Rules

What bots are allowed?

Any lawful bot. Our Acceptable Use Policy names “automated tasks, bots, and scripts for lawful purposes” as permitted use.

Allowed

Community, moderation, utility, game, music and notification bots, the APIs and dashboards behind them, and any other lawful automation.

Forbidden

Malware and botnet command-and-control, phishing and fraud, and spam. Botnet controllers are terminated automatically, and activity that gets the range blacklisted on Spamhaus or URLHaus can end the service at once.

Platform rules are yours

Discord and Telegram have terms of their own: selfbots — automated user accounts — break Discord's, and mass-DM, raid and spam tools break both. Keeping your bot within them is up to you as its owner.

The complete rules are in our Acceptable Use Policy.

07FAQ

Discord bot hosting: questions

Everything you need to know before deploying — and a human if you need more.

From €4.99 a month in Amsterdam for the smallest Standard KVM plan: 2 vCores, 4 GB RAM and 20 GB storage, with its own IPv4 address and always-on DDoS protection. The price is fixed per month, and prepaying up to 12 months lowers it by up to 15%. One plan can run several bots, Telegram bots included.

Most bots run comfortably on the smallest plan at €4.99. Choose a larger Standard KVM plan for more RAM — music bots with Lavalink, big caches, many shards — and Hi-CPU KVM when one busy thread is the bottleneck. You can upgrade later from the panel: the same server gets more resources and keeps its data and IP address.

Yes. A VPS runs as many bots as its resources allow — Discord, Telegram or both — each as its own systemd service. A Telegram bot on long polling needs no domain and no open port; a webhook bot needs a public HTTPS URL on port 443, 80, 88 or 8443.

Yes. Every server comes with an IPv4 address of its own, plus an IPv6 prefix where the location has one free, and it keeps that address when you upgrade the plan. That matters for bots: Discord temporarily blocks IP addresses that send too many invalid requests, and on a shared address another user's bot can trigger the block for yours.

Run it as a systemd service with Restart=always and switch it on with systemctl enable --now bot: systemd then restarts it after a crash and starts it at every boot. pm2 (with pm2 startup and pm2 save) or Docker with restart: unless-stopped do the same. If the host node itself restarts, our platform starts the servers that went down with it again automatically.

Yes, but plan for more CPU and memory than a text bot needs: audio is encoded for every active voice channel, and Lavalink runs as a Java process of its own. Start on a larger Standard KVM plan or on Hi-CPU KVM. You are responsible for having the rights to what the bot streams, and some streaming platforms restrict requests from data-centre IP addresses — on any host.

Not for the server: Ubuntu and Debian run Python, Node.js, Go, Java and anything else Linux runs, in the version you install. The differences are in the setup. Python bots belong in a virtual environment, because current Debian and Ubuntu refuse system-wide pip installs; Node.js bots are best run on a current LTS release, often newer than the one the distribution ships. Both run a bot's own code in one main thread, which is why Hi-CPU KVM suits a busy single-process bot.

Yes. Our Acceptable Use Policy names “automated tasks, bots, and scripts for lawful purposes” as permitted use. What it forbids applies to bots like anything else: malware and botnets, phishing and fraud, and spam. Discord's and Telegram's own terms apply on top — selfbots and mass-DM or raid tools break them.

08Use cases & related

Related plans and guides

Other servers we run for neighbouring jobs, each with its starting price, and three guides worth reading before you order.

Related plans

GuidesFrom the VMHeaven blog

Ready to run your bot 24/7?

Enterprise-grade compute in the EU — no contracts, cancel anytime, backed by our 99.5% uptime SLA.