Daftar isi
Bot yang hanya membalas perintah sederhana tidak butuh database. Tapi begitu bot harus mengingat sesuatu, misalnya poin pengguna, pengaturan grup, daftar member premium, atau sesi login, datanya harus disimpan di tempat yang tidak hilang saat bot di-restart. Banyak bot, terutama bot WhatsApp dan Telegram, memakai MongoDB untuk itu.
Database bawaan panel adalah MySQL. Kalau kode botmu butuh MongoDB, kamu bisa memakai MongoDB Atlas, layanan MongoDB resmi yang punya cluster gratis. Di panduan ini kamu akan membuat cluster gratis, mengizinkan server panelmu masuk, lalu menyambungkannya ke bot.
MySQL panel atau MongoDB Atlas?
- Pakai MySQL bawaan panel kalau kode botmu memang memakai MySQL atau kamu bebas memilih. Caranya ada di Cara membuat dan memakai database.
- Pakai MongoDB Atlas kalau kode botmu sudah memakai MongoDB atau Mongoose, atau kamu menjalankan bot yang memang meminta
MONGODB_URIdi pengaturannya.
Data di Atlas tersimpan di luar server panel, jadi tidak ikut backup server. Ingat ini kalau datanya penting.
Yang perlu disiapkan
- Server panel dengan egg Node.js. Belum yakin? Lihat Memilih egg.
- Bot Node.js yang butuh MongoDB, atau pakai kode tes di panduan ini dulu.
- Alamat email aktif untuk mendaftar di MongoDB Atlas.
1. Daftar dan buat cluster gratis
- Buka mongodb.com/cloud/atlas/register, lalu daftar dengan email atau akun Google.
- Setelah masuk, buka halaman Project Overview, lalu klik Create untuk membuat cluster baru.
- Pilih opsi gratis M0.
- Pilih Provider. Amazon Web Services, Google Cloud, dan Azure sama-sama boleh. Kalau bingung, pilih yang pertama muncul.
- Pilih Region. Atlas hanya menampilkan region yang mendukung cluster gratis. Pilih yang paling dekat dengan lokasi servermu (misalnya region Asia) supaya bot tidak terasa lambat.
- Isi nama cluster. Boleh huruf, angka, dan tanda hubung. Nama ini tidak bisa diubah setelah cluster dibuat.
- Klik Create. Cluster biasanya siap dalam hitungan detik.

Tampilan Atlas bisa berubah dari waktu ke waktu. Kalau nama tombolnya sedikit berbeda, cari yang fungsinya sama.
2. Buat user database
Setelah cluster dibuat, Atlas menampilkan panduan keamanan. Bagian pertamanya meminta kamu membuat user database.
- Isi Username, misalnya
botuser. - Isi Password. Pakai kombinasi huruf dan angka saja. Karakter khusus seperti
@,:,/,?, dan#harus diubah bentuknya kalau masuk ke alamat koneksi, dan itu sumber error yang sering bikin pemula bingung. - Klik Create Database User.

User ini khusus untuk bot mengakses database. Ini bukan akun yang kamu pakai untuk login ke situs Atlas, jadi jangan samakan passwordnya dengan akun lain. Catat username dan passwordnya.
3. Izinkan IP server panelmu
Atlas menolak semua koneksi kecuali dari alamat IP yang ada di daftar izin (IP Access List). Artinya server panelmu harus didaftarkan dulu. Caranya, cari tahu dulu IP yang dipakai servermu saat menghubungi internet.
Cari IP servermu:
- Di tab Files, klik New File, beri nama
cek-ip.js, lalu isi dengan:
fetch('https://api.ipify.org')
.then((res) => res.text())
.then((ip) => console.log('IP keluar server ini:', ip))
.catch((err) => console.error('Gagal cek IP:', err.message))- Buka tab Startup, isi variabel file utama dengan
cek-ip.jsatau ganti isi Command Run menjadinode cek-ip.js. Nama kolomnya bisa berbeda tergantung egg, detailnya di Startup dan variabel. - Buka tab Console, klik Start. Dalam beberapa detik muncul tulisan
IP keluar server ini:diikuti angka. Itu IP-nya. Setelah selesai, server akan berhenti sendiri karena programnya memang cuma satu perintah. Itu normal.

Kalau muncul fetch is not defined, versi Node.js servermu terlalu lama. Baca Cara mengganti versi Node.js lewat Docker Image. Kalau pengecekan ini gagal karena alasan lain, tanyakan IP servermu ke CS.
Daftarkan IP itu di Atlas:
- Di menu kiri Atlas, buka bagian Security, lalu pilih Network Access (di tampilan baru namanya bisa Database & Network Access, lalu tab IP Access List).
- Klik Add IP Address.
- Tempel IP servermu, lalu klik Confirm.
- Tunggu statusnya berubah jadi Active.

Dua hal yang perlu kamu tahu:
- IP bisa berubah kalau servermu dipindah ke node lain, misalnya setelah klaim garansi. Kalau koneksi tiba-tiba gagal padahal tidak ada yang kamu ubah, ulangi pengecekan IP ini.
- Atlas juga punya opsi Allow Access from Anywhere (
0.0.0.0/0). Ini membuat koneksi tidak perlu daftar IP, tapi semua orang di internet bisa mencoba masuk, dan Atlas sendiri memberi peringatan soal ini. Kalau terpaksa memakainya, pakai password database yang panjang dan unik, dan jangan simpan data penting.
4. Ambil alamat koneksi
- Di halaman cluster, klik Connect.
- Pilih Drivers, lalu pilih Node.js.
- Salin alamat koneksi yang ditampilkan. Bentuknya seperti ini:
mongodb+srv://<db_username>:<db_password>@namacluster.xxxxx.mongodb.net/?retryWrites=true&w=majority- Ganti
<db_username>dan<db_password>dengan user dan password dari langkah 2. Tanda kurung sudut<dan>ikut dihapus.
Contoh hasil akhirnya:
mongodb+srv://botuser:[email protected]/?retryWrites=true&w=majority
Alamat ini mengandung password database. Perlakukan seperti kunci rumah, jangan dikirim ke siapa pun dan jangan ditaruh di kode.
5. Siapkan kode tes
Sebelum memasang di bot sungguhan, tes dulu koneksinya. Buat folder di komputermu dan isi dua file ini.
File package.json:
{
"name": "tes-mongodb",
"version": "1.0.0",
"main": "index.js",
"dependencies": {
"mongodb": "^6.0.0",
"dotenv": "^16.4.5"
}
}File index.js:
require('dotenv').config()
const { MongoClient } = require('mongodb')
const uri = process.env.MONGODB_URI
if (!uri) {
console.error('MONGODB_URI belum diisi di file .env')
process.exit(1)
}
const client = new MongoClient(uri)
async function main() {
await client.connect()
console.log('Terhubung ke MongoDB Atlas.')
const koleksi = client.db('botku').collection('tes')
await koleksi.insertOne({ pesan: 'halo dari panel', waktu: new Date() })
const jumlah = await koleksi.countDocuments()
console.log(`Berhasil menyimpan data. Jumlah dokumen di koleksi tes: ${jumlah}`)
}
main()
.catch((err) => console.error('Gagal terhubung:', err.message))
.finally(() => client.close())6. Upload dan jalankan
- Di tab Files, hapus
cek-ip.jskalau masih ada, lalu Uploadpackage.jsondanindex.js. Jangan upload foldernode_modules, paketnya dipasang otomatis. Detailnya di Mengunggah file dengan File Manager dan SFTP. - Klik New File, beri nama
.env, lalu isi dengan satu baris berikut. Tempel alamat koneksimu tanpa spasi dan tanpa tanda kutip, lalu Save:
MONGODB_URI=mongodb+srv://botuser:[email protected]/?retryWrites=true&w=majority- Di tab Startup, ubah file utama jadi
index.js. - Di tab Console, klik Start. Tunggu satu sampai dua menit karena paket dipasang dulu.
- Kalau berhasil, konsol menampilkan
Terhubung ke MongoDB Atlas.laluBerhasil menyimpan data.
Untuk memastikan datanya benar-benar masuk, buka Atlas, klik Browse Collections di halaman cluster, lalu cari database botku dan koleksi tes. Dokumen "halo dari panel" harus ada di sana. Server akan berhenti sendiri setelah tes selesai, dan itu normal.
Cara menyimpan token dan alamat koneksi di .env dijelaskan lebih lengkap di Menyimpan token dan data rahasia dengan .env.
7. Pasang di bot sungguhan
Pindahkan bagian koneksinya ke bot. Prinsipnya: sambung satu kali saat bot mulai, lalu pakai terus. Jangan menyambung ulang setiap ada pesan masuk.
const { MongoClient } = require('mongodb')
const client = new MongoClient(process.env.MONGODB_URI)
let db
async function mulaiDatabase() {
await client.connect()
db = client.db('botku')
console.log('Database siap.')
}
// Contoh: tambah satu poin untuk seorang pengguna
async function tambahPoin(idPengguna) {
await db.collection('pengguna').updateOne(
{ _id: idPengguna },
{ $inc: { poin: 1 } },
{ upsert: true }
)
}Panggil mulaiDatabase() satu kali sebelum bot login. Database dan koleksinya dibuat otomatis saat data pertama masuk, jadi tidak perlu dibuat manual di Atlas.
Kalau botmu memakai Mongoose, tambahkan "mongoose": "^8.0.0" di dependencies, lalu sambungkan dengan await mongoose.connect(process.env.MONGODB_URI). Alamat koneksinya sama.
Batas cluster gratis
Cluster gratis cukup untuk bot kecil sampai menengah, tapi ada batasnya (menurut dokumentasi MongoDB Atlas):
- Penyimpanan 0,5 GB.
- Maksimal 500 koneksi dan 100 operasi per detik.
- Satu cluster gratis per project Atlas.
- Cluster dijeda otomatis kalau 30 hari tanpa satu pun koneksi. Bot yang hidup terus tidak akan kena, dan cluster yang dijeda bisa dilanjutkan lagi dari Atlas.
Kalau botmu sudah ramai dan bumpet di batas ini, itu tanda saatnya naik ke cluster berbayar atau memindahkan data ke database lain.
Kalau tidak berhasil
| Yang kamu lihat | Penyebab | Solusi |
|---|---|---|
MongoServerSelectionError atau pesan timeout | IP servermu belum ada di IP Access List, statusnya belum Active, atau IP-nya sudah berubah | Cek IP lagi (langkah 3), tambahkan di Atlas, tunggu sampai Active, lalu Restart |
bad auth : authentication failed | Username atau password salah, atau <db_password> masih bertanda kurung | Cek ulang di .env. Kalau password mengandung karakter khusus, buat password baru yang hanya huruf dan angka |
MONGODB_URI belum diisi di file .env | File .env belum dibuat atau namanya salah | Pastikan namanya persis .env di folder yang sama dengan index.js |
Invalid connection string atau Invalid scheme | Alamat koneksi tertempel sebagian, atau ada spasi dan tanda kutip | Tempel ulang tanpa spasi dan tanpa kutip |
Cannot find module 'mongodb' | Paket belum terpasang | Baca Mengatasi error "Cannot find module" |
fetch is not defined (saat cek IP) | Versi Node.js terlalu lama | Baca Cara mengganti versi Node.js lewat Docker Image |
Kalau masih buntu, kirim potongan log konsol ke CS. Jangan kirim alamat koneksi atau password databasenya. CS tidak pernah memintanya.
Kalau alamat koneksi bocor
Segera ganti password user database: buka Atlas, menu Database Access, klik Edit di user botmu, buat password baru, lalu perbarui .env dan Restart server. Panduan keamanan lainnya ada di Keamanan akun dan server.
Apakah artikel ini membantu?
