RDP Monster

Hosting Bot Discord di VPS: Bot Online 24/7 Tanpa Putus

Hosting Bot Discord di VPS: Bot Online 24/7 Tanpa Putus

Mengapa VPS adalah tempat bot Discord benar-benar tetap online

Bot Discord bukan halaman web. Setelah login, bot mempertahankan koneksi WebSocket persisten ke gateway Discord dan harus menjawab heartbeat terus-menerus; begitu prosesnya berhenti, bot tampil offline dan semua perintah gagal. Satu syarat itu, proses yang tidak pernah tidur, menggugurkan sebagian besar hosting "gratis":

  • Heroku menghapus dyno gratisnya pada November 2022.
  • Replit tidak lagi menjaga proyek gratis tetap berjalan; fitur always-on dipindah ke deployment berbayar.
  • Glitch mengakhiri layanan hosting aplikasinya pada 2025.
  • Paket web gratis yang tidur setelah tidak aktif memutus koneksi gateway setiap kali menganggur; bagi pengguna, bot itu sekadar mati.

Hosting bot Discord di VPS menyelesaikan masalah ini dari akarnya: mesin Linux dengan akses root yang menyala sepanjang waktu, tempat bot menjadi salah satu service yang dikelola sistem init. Panduan ini membangunnya di Ubuntu 24.04 (berlaku juga untuk 22.04 dan Debian 12) dengan discord.py dan discord.js, lalu membahas penanganan token, restart, log, pembaruan, dan memori.

Siapkan VPS: satu pengguna khusus dan sebuah runtime

Amankan pintu depan lebih dulu: aktifkan SSH di Ubuntu dan perkuat konfigurasinya dengan autentikasi kunci, tanpa login root, dan ufw. Bot menghubungi Discord ke luar dan tidak butuh port masuk, jadi firewall bisa tetap tertutup untuk semuanya kecuali SSH.

Langkah 1: buat akun tanpa hak istimewa untuk bot

sudo useradd -r -m -d /opt/mybot -s /usr/sbin/nologin bot

Akun khusus berarti bot yang bermasalah atau dependensi npm maupun PyPI yang disusupi tidak bisa membaca kunci SSH Anda atau menyentuh service lain. Semuanya berada di /opt/mybot, dimiliki oleh bot.

Langkah 2 (Python): pasang discord.py di virtual environment

sudo apt update && sudo apt install -y python3 python3-venv python3-pip
sudo -u bot python3 -m venv /opt/mybot/.venv
sudo -u bot /opt/mybot/.venv/bin/pip install -U discord.py python-dotenv

discord.py 2.x membutuhkan Python 3.8 atau lebih baru; Ubuntu 24.04 menyertakan 3.12 dan 22.04 menyertakan 3.10, jadi interpreter bawaan distribusi sudah memadai. Tambahkan discord.py[voice] dan ffmpeg hanya bila memakai kanal suara.

Langkah 3 (Node.js): pasang LTS terkini dan discord.js

curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs
sudo -u bot bash -c 'cd /opt/mybot && npm init -y && npm install discord.js dotenv'

Paket nodejs bawaan Ubuntu jauh tertinggal dari upstream dan discord.js v14 butuh runtime modern, jadi gunakan NodeSource (di atas) atau nvm untuk LTS terkini. Dengan nvm, jalankan which node dan pakai path absolut itu di unit service.

Jauhkan token dari kode: berkas .env

Token bot adalah kata sandi dengan kendali penuh atas bot: jangan pernah menempelkannya ke bot.py atau index.js, jangan pernah men-commit-nya. Taruh di /opt/mybot/.env, hanya bisa dibaca akun bot, dan gunakan editor alih-alih echo, karena token yang diketik di baris perintah akan tersimpan di riwayat shell Anda:

sudo -u bot nano /opt/mybot/.env        # one line: DISCORD_TOKEN=your-token-here
sudo chmod 600 /opt/mybot/.env
echo ".env" | sudo -u bot tee -a /opt/mybot/.gitignore

Formatnya satu KEY=value per baris, tanpa tanda kutip, tanpa export. python-dotenv dan paket npm dotenv membacanya, dan systemd dapat menyuntikkan berkas yang sama lewat EnvironmentFile= (bagian berikutnya); memakai keduanya tidak berbahaya, karena kedua pustaka tidak menimpa variabel yang sudah ada. Jika token bocor, segera reset di Developer Portal pada Bot → Reset Token.

Bot minimal dengan discord.py dan discord.js

Kedua contoh membaca token dari environment, mengaktifkan intent Message Content, dan menjawab !ping. Di Developer Portal, buat sebuah application, tambahkan bot user, salin token (hanya ditampilkan sekali), aktifkan Message Content Intent di Bot → Privileged Gateway Intents, lalu undang bot ke server uji lewat OAuth2 URL generator dengan scope bot.

discord.py: /opt/mybot/bot.py

import os
import discord
from dotenv import load_dotenv

load_dotenv()

intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)

@client.event
async def on_ready():
    print(f"Logged in as {client.user}")

@client.event
async def on_message(message):
    if message.author == client.user:
        return
    if message.content == "!ping":
        await message.channel.send("pong")

client.run(os.environ["DISCORD_TOKEN"])

discord.js: /opt/mybot/index.js

require("dotenv").config();
const { Client, GatewayIntentBits, Events } = require("discord.js");

const client = new Client({
  intents: [
    GatewayIntentBits.Guilds,
    GatewayIntentBits.GuildMessages,
    GatewayIntentBits.MessageContent,
  ],
});

client.once(Events.ClientReady, (c) => {
  console.log(`Logged in as ${c.user.tag}`);
});

client.on(Events.MessageCreate, (message) => {
  if (message.author.bot) return;
  if (message.content === "!ping") message.reply("pong");
});

client.login(process.env.DISCORD_TOKEN);

Jalankan sekali di foreground: sudo -u bot /opt/mybot/.venv/bin/python /opt/mybot/bot.py atau sudo -u bot node /opt/mybot/index.js, tunggu pesan Logged in as, kirim !ping, lalu Ctrl-C. Untuk saat ini bot hanya hidup selama sesi SSH Anda: menutup terminal mengirim SIGHUP ke proses anaknya dan bot mati.

Jalankan lewat systemd dengan Restart=always

systemd sudah menjadi sistem init Ubuntu, jadi cara paling bersih menjaga bot tetap online setelah logout, crash, dan reboot adalah unit service: tanpa daemon tambahan, dan log langsung masuk ke journal.

Langkah 1: tulis unit-nya

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

[Service]
Type=simple
User=bot
Group=bot
WorkingDirectory=/opt/mybot
EnvironmentFile=/opt/mybot/.env
Environment=PYTHONUNBUFFERED=1
ExecStart=/opt/mybot/.venv/bin/python /opt/mybot/bot.py
Restart=always
RestartSec=5
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/opt/mybot

[Install]
WantedBy=multi-user.target

Untuk discord.js, setel ExecStart=/usr/bin/node /opt/mybot/index.js dan hapus baris PYTHONUNBUFFERED. Direktif yang penting:

  • Restart=always menghidupkan ulang proses pada setiap keluaran, baik crash maupun sys.exit() yang bersih; RestartSec=5 mencegah bot yang langsung mati (token salah, syntax error) berputar dalam loop rapat.
  • Wants=/After=network-online.target menunda start sampai jaringan siap, sehingga login pertama setelah reboot tidak gagal karena DNS.
  • PYTHONUNBUFFERED=1: tanpa terminal, Python melakukan block-buffer pada stdout, sehingga baris print() baru sampai ke journal beberapa menit kemudian atau hanya saat keluar.
  • Baris Protect*, PrivateTmp, dan NoNewPrivileges membuat sisa filesystem hanya-baca atau tak terlihat bagi bot; tambahkan direktori mana pun yang perlu ditulisi ke ReadWritePaths=.

Langkah 2: aktifkan, jalankan, dan verifikasi

sudo systemctl daemon-reload
sudo systemctl enable --now mybot
systemctl status mybot
sudo systemctl kill --signal=KILL mybot   # simulate a crash; status is active again after 5 s

enable membuat symlink boot dan --now menjalankan unit. Baris kill adalah uji sesungguhnya: jika beberapa detik kemudian systemctl status mybot menampilkan active (running), kebijakan restart berfungsi, dan sudo reboot membuktikan jalur boot-nya. Untuk melihatnya bersama semua service lain, tampilkan daftar service yang berjalan dengan systemctl; ia muncul sebagai mybot.service, dan systemctl is-enabled mybot memastikan ia kembali setelah restart.

Alternatif: pm2, dan perbandingannya dengan screen, nohup, serta Docker

Setiap cara menjaga bot tetap hidup menjawab tiga pertanyaan: apakah bertahan setelah logout SSH, hidup ulang saat crash, dan menyala saat reboot?

MetodeBertahan setelah logout SSHHidup ulang saat crashMenyala saat rebootKesimpulan
nohup / &YesNoNoHanya untuk uji cepat.
screen / tmuxYesNoTidak, kecuali dibuatkan skripUntuk debugging, bukan produksi.
pm2YesYesYa, setelah pm2 startup + pm2 saveCocok untuk tim Node.js; satu CLI untuk log dan restart.
unit systemdYesYa (Restart=)Ya (enable)Direkomendasikan; tanpa perangkat lunak tambahan, hardening sudah termasuk.
Docker, restart: unless-stoppedYesYesYa, bersama daemon DockerBagus bila bot memang sudah dikemas sebagai image.

pm2 adalah pilihan populer di dunia Node.js dan bisa menangani Python juga. Jalankan sebagai akun pemilik bot:

sudo npm install -g pm2
cd /opt/mybot
pm2 start index.js --name mybot
pm2 start bot.py --name mybot --interpreter /opt/mybot/.venv/bin/python   # Python variant
pm2 save
pm2 startup                    # prints a sudo command to run once
pm2 logs mybot
pm2 install pm2-logrotate      # ~/.pm2/logs/ otherwise grows forever

pm2 startup menghasilkan unit systemd pm2-<user> yang menghidupkan kembali daftar proses tersimpan Anda saat boot, jadi pm2 berdiri di atas systemd alih-alih menggantikannya: itulah alasan jujur untuk memakai systemd secara langsung bagi satu bot. pm2 layak dipakai bila ada beberapa proses Node atau tim yang sudah terbiasa dengannya.

Jika Anda lebih suka kontainer, padanannya adalah restart: unless-stopped di berkas Compose; panduan memasang Docker di VPS Ubuntu membahas engine, Compose, dan perilaku saat boot. Catatan ufw di sana tidak memengaruhi bot, yang tidak membuka port apa pun.

Log, pembaruan, dan penentuan ukuran memori

Log

journalctl -u mybot -f                    # follow live
journalctl -u mybot --since "1 hour ago"
journalctl -u mybot -p err -b             # errors since boot
sudo journalctl --vacuum-size=200M        # cap journal size

journald merotasi dan mengompresi log secara mandiri. Jika bot menulis berkas lognya sendiri, gunakan logging.handlers.RotatingFileHandler di Python atau transport rotatif dengan pino maupun winston di Node, supaya handler yang cerewet tidak memenuhi disk.

Pembaruan

cd /opt/mybot
sudo -u bot git pull
sudo -u bot .venv/bin/pip install -U -r requirements.txt   # Node: sudo -u bot npm ci
sudo systemctl restart mybot

Restart memutus koneksi gateway selama beberapa detik; pustaka akan menyambung kembali dan pengguna jarang menyadarinya. Kunci versi pustaka di requirements.txt atau package-lock.json dan baca changelog sebelum naik versi mayor. Jaga OS tetap mutakhir dengan sudo apt update && sudo apt upgrade atau unattended-upgrades.

Berapa RAM yang dibutuhkan bot?

Jangan menentukan ukuran dari angka umum; ukurlah. systemctl status mybot menampilkan baris Memory: dan pm2 list menunjukkan hal yang sama. Bot discord.py yang hanya menangani perintah biasanya menganggur di kisaran puluhan megabita; bot discord.js menanggung runtime Node di atasnya. Memori bertambah seiring state: cache member dan pesan di server besar, voice dan musik (satu proses ffmpeg per stream), pembuatan gambar, atau basis data. Dalam praktiknya RAM 1 GB nyaman menjalankan OS plus bot kecil atau menengah; bot yang berat di sisi voice atau beberapa bot dalam satu mesin membenarkan 2 GB atau lebih, dan di atas 2.500 server Discord mewajibkan sharding, yang melipatgandakan konsumsi. Dua jaring pengaman murah: MemoryMax=512M di unit, agar kebocoran memori memicu restart bot alih-alih menjatuhkan mesin, dan sebuah berkas swap kecil.

Semua ini mengandaikan sebuah mesin Linux dengan akses root yang menyala sepanjang waktu. Jika Anda masih membutuhkan mesin itu, VPS bot Discord rdp.monster online sekitar 10 detik setelah pembayaran dikonfirmasi, dengan CPU dan RAM khusus, akses root penuh, bandwidth tanpa batas (fair-use), tanpa KYC, menerima kripto, mulai $8.99/bulan, sehingga langkah systemctl enable --now mybot di atas bisa menjadi hal terakhir yang Anda ketik sebelum bot menyala hijau.

Pertanyaan yang sering ditanyakan

Bisakah saya meng-hosting bot Discord gratis 24/7?

Tidak lagi secara andal: paket gratis yang dulu menjaga bot tetap terjaga sudah dihapus atau kini tidur saat tidak aktif.
Heroku menghapus dyno gratis pada November 2022, Replit memindahkan always-on ke deployment berbayar, dan Glitch mengakhiri hosting aplikasi pada 2025. Paket web gratis yang tersisa tidur setelah tidak aktif, yang menutup koneksi gateway bot. Menjalankannya di PC sendiri berhasil sampai PC reboot atau tidur. Opsi andal termurah adalah VPS kecil dengan RAM sekitar 1 GB, tempat systemd menghidupkan ulang bot saat crash dan reboot, dan tidak ada yang menangguhkannya karena menganggur.

Apakah bot Discord perlu IP statis atau port terbuka di VPS?

Tidak: bot terhubung keluar ke Discord, jadi tidak ada port masuk yang harus dibuka dan IP tidak jadi soal.
Bot gateway membuka WebSocket keluar ke Discord dan menerima event lewat koneksi yang sama, sehingga firewall di VPS bisa tetap tertutup untuk semuanya kecuali SSH, dan IP server tidak pernah tampak oleh pengguna. Anda hanya butuh port terbuka dan hostname publik bila beralih ke HTTP interaction endpoint, yang dipanggil Discord melalui URL yang Anda daftarkan, atau bila menambahkan dashboard web. Dalam kasus itu, letakkan di balik HTTPS dengan reverse proxy.

Bisakah saya menjalankan beberapa bot Discord di satu VPS?

Ya, satu unit systemd (atau proses pm2) per bot, idealnya masing-masing di bawah pengguna dan direktorinya sendiri.
Tidak ada yang membatasi Anda pada satu bot per mesin. Beri setiap bot direktorinya sendiri seperti /opt/bot-a dan /opt/bot-b, .env-nya sendiri dengan tokennya sendiri, dan berkas unit-nya sendiri, lalu jalankan systemctl enable --now untuk masing-masing. Pengguna sistem terpisah mencegah bug di satu bot membaca token bot lainnya. Satu-satunya anggaran bersama adalah RAM dan CPU: pantau systemctl status per unit, dan pindah ke paket lebih besar saat totalnya mendekati batas.

Sebaiknya meng-hosting bot Discord di VPS Windows atau Linux?

Linux adalah pilihan baku untuk bot: lebih murah, lebih ringan, dan perkakasnya (systemd, pm2, Docker) memang dibuat untuknya.
discord.py dan discord.js sama-sama berjalan di Windows, dan VPS Windows adalah pilihan tepat bila bot bergantung pada aplikasi khusus Windows atau Anda memang lebih suka desktop. Untuk bot biasa, Linux unggul: OS-nya memakai sebagian kecil RAM, server minimal nyaris tidak punya permukaan serangan, dan menjaga proses tetap hidup cukup dengan unit systemd sepuluh baris. Di Windows Anda perlu Task Scheduler atau NSSM untuk mendapat perilaku restart-saat-boot yang sama dengan lebih banyak klik.

Adrien Roche, Editor Infrastruktur & Hosting

Insinyur sistem yang sudah 10+ tahun mengelola server Windows Server dan Linux. Adrien mengurus dokumentasi infrastruktur rdp.monster dan menulis panduan kami tentang RDP, hosting VPS, administrasi server, jaringan, dan tool privasi.

Gabung program reseller kami

Data Anda

Jika Anda punya pertanyaan, klik di sini untuk menghubungi kami !
Nama(Wajib)
Masukkan alamat email Anda, pastikan Anda sudah punya akun di manager.rdp.monster !

Perusahaan Anda

Masukkan alamat situs web Anda jika ada
Ceritakan singkat cara Anda menjual layanan ke pelanggan. Misalnya, lewat obrolan di forum.

Bahkan monster pun suka cookie!

Kami memakai cookie agar penjelajahan Anda lebih nyaman, untuk menampilkan iklan atau konten yang dipersonalisasi, dan untuk menganalisis lalu lintas kami. Dengan mengklik “Terima”, Anda menyetujui penggunaan cookie oleh kami.