Online 24 jam — auto-restart, anti mati
Bikin bot & app hidup 24 jam dengan PM2
Bot-mu mati begitu kamu menutup terminal SSH? Atau app hilang setelah server reboot? Di panduan ini kamu akan memakai PM2 — manajer proses yang menjaga aplikasi tetap menyala, otomatis menghidupkannya lagi saat crash, dan menyalakannya otomatis setiap server reboot. Dijelaskan dari nol, pelan-pelan.
Tutup SSH, tetap jalan
App terus hidup walau terminal kamu tutup.
Auto-restart
Crash atau reboot? App nyala lagi sendiri.
Log & monitoring
Lihat log dan pemakaian RAM/CPU kapan saja.
node index.js atau npm start). Kalau belum punya bot, ikuti dulu panduan bot Telegram.Kenapa butuh PM2?
Saat kamu menjalankan node index.jslewat SSH, proses itu "menempel" pada sesi terminalmu. Begitu kamu logout atau koneksi putus, prosesnya ikut mati — bot pun offline. Dan kalau server reboot, tidak ada yang menyalakannya kembali.
PM2 bertindak seperti penjaga setia: ia menjalankan appmu di latar belakang, mengawasinya, dan langsung menghidupkannya lagi kalau crash atau setelah reboot. Bandingkan dua dunia ini:
Tanpa PM2
- Tutup SSH → bot mati
- App crash → mati sampai kamu nyalakan manual
- Server reboot → semua offline
- Tidak ada catatan log yang rapi
Dengan PM2
- Tutup SSH → tetap jalan
- Crash → auto-restart instan
- Reboot → nyala otomatis
- Log & monitoring tersimpan
Yang perlu kamu siapkan
Cukup tiga hal:
- VPS dengan akses sudo (Ubuntu/Debian).
- Node.js & npm sudah terpasang (cek: node -v dan npm -v).
- Aplikasi/bot yang bisa dijalankan manual, mis. node index.js atau npm start.
Pasang PM2 di server
Masuk ke server lewat SSH, lalu pasang PM2 secara global memakai npm:
# DI SERVER — pasang PM2 secara global
sudo npm install -g pm2
# cek versinya
pm2 --versiondeploy@server:~$ pm2 --version5.4.2# PM2 siap dipakai ✅Jalankan aplikasi dengan PM2
Masuk ke folder project-mu, lalu jalankan lewat PM2. Beri --name agar mudah dikenali. Pilih cara yang sesuai dengan tipe app-mu:
# Cara cepat: jalankan langsung satu file
pm2 start index.js --name bot-telegram
# Untuk app Next.js (script "start" di package.json)
pm2 start npm --name blog -- start
# Lihat daftar proses yang dikelola PM2
pm2 listCek hasilnya dengan pm2 list. Kolom status harus online:
deploy@server:~$ pm2 list┌────┬──────────────┬─────────┬─────────┐│ id │ name │ status │ cpu │├────┼──────────────┼─────────┼─────────┤│ 0 │ bot-telegram │ online │ 0% │└────┴──────────────┴─────────┴─────────┘# status online = app berjalan ✅pm2 list — app tetap online. Itulah bedanya dengan node index.js biasa.Buat file config (ecosystem)
Daripada mengetik opsi panjang tiap kali, simpan pengaturan dalam satu file ecosystem.config.js di folder project. Di sini kamu bisa atur batas RAM, variabel lingkungan, dan auto-restart:
1module.exports = {2 apps: [3 {4 name: 'bot-telegram',5 script: './index.js',6 instances: 1,7 autorestart: true, // nyala lagi kalau crash8 watch: false, // true = restart saat file berubah9 max_memory_restart: '300M', // restart kalau RAM > 300MB10 env: {11 NODE_ENV: 'production',12 },13 },14 ],15}Teks lengkap yang bisa kamu salin:
// ecosystem.config.js — taruh di folder project
module.exports = {
apps: [
{
name: 'bot-telegram',
script: './index.js',
instances: 1,
autorestart: true, // nyala lagi kalau crash
watch: false, // true = restart saat file berubah
max_memory_restart: '300M', // restart kalau RAM > 300MB
env: {
NODE_ENV: 'production',
// TELEGRAM_TOKEN: 'isi-di-sini-atau-pakai-.env',
},
},
],
}Lalu jalankan semuanya hanya dengan satu perintah:
# Jalankan semua app yang didefinisikan di ecosystem.config.js
pm2 start ecosystem.config.js
# Simpan daftar proses saat ini supaya bisa dipulihkan otomatis
pm2 saveautorestart: true membuat app nyala lagi saat crash. max_memory_restart melindungi server dari app yang bocor memori (memory leak) dengan me-restart-nya otomatis.Auto-start otomatis saat server reboot
Ini langkah paling penting agar app benar-benar hidup 24 jam. Tanpa ini, setiap server reboot semua app akan mati. Jalankan:
# 1) Bikin PM2 jalan otomatis tiap server reboot
pm2 startup
# Perintah ini akan MENAMPILKAN satu baris perintah "sudo env ..."
# COPY baris yang ditampilkan itu, lalu jalankan.
# 2) Setelah app jalan seperti yang kamu mau, kunci daftarnya:
pm2 savepm2 startup akan menampilkan satu baris perintah yang diawali sudo env PATH=.... Kamu harus menyalin baris itu dan menjalankannya. Setelah itu jalankan pm2 save untuk mengunci daftar app saat ini.Alur sederhananya seperti ini — tiga "rem pengaman" agar app selalu kembali hidup:
Lihat log & monitoring
Kalau bot bertingkah aneh, log adalah tempat pertama untuk mencari tahu sebabnya. PM2 menyimpan semua output app-mu:
deploy@server:~$ pm2 logs bot-telegram[bot-telegram] Bot started, polling...[bot-telegram] Pesan masuk dari @andi# Ctrl+C untuk keluar dari tampilan logUntuk pantauan langsung RAM, CPU, dan jumlah restart tiap app, pakai dashboard bawaan PM2:
deploy@server:~$ pm2 monitbot-telegram CPU: 0% MEM: 48.2 MB ↺ 0# dashboard live di terminalPerintah harian PM2
Simpan tabel ini. Inilah perintah yang akan kamu pakai sehari-hari (ganti bot-telegram dengan nama app-mu):
| Perintah | Fungsinya |
|---|---|
| pm2 list | Lihat semua app + status (online/stopped) & pemakaian RAM/CPU. |
| pm2 logs | Lihat log semua app secara real-time (Ctrl+C untuk keluar). |
| pm2 logs bot-telegram | Lihat log satu app saja berdasarkan nama. |
| pm2 restart bot-telegram | Restart satu app (mis. setelah update kode). |
| pm2 reload blog | Reload tanpa downtime (cocok untuk web/app). |
| pm2 stop bot-telegram | Hentikan app tanpa menghapusnya dari daftar. |
| pm2 delete bot-telegram | Hapus app dari PM2 sepenuhnya. |
| pm2 monit | Dashboard live RAM/CPU/log per app di terminal. |
Masalah umum & cara mengatasinya
Kalau ada yang belum jalan, cek tabel ini dulu sebelum panik:
| Gejala | Sebab | Solusi |
|---|---|---|
| App "errored" terus di pm2 list | Kode error saat start (token salah, port dipakai, dependency kurang). | Baca penyebabnya: pm2 logs nama-app — perbaiki error lalu pm2 restart. |
| Setelah reboot, app tidak hidup | Lupa jalankan pm2 startup atau pm2 save. | Ulangi: pm2 startup (jalankan baris yang ditampilkan), lalu pm2 save. |
| pm2: command not found | PM2 belum terpasang global / PATH npm belum termuat. | Pasang ulang: sudo npm install -g pm2, lalu buka ulang sesi SSH. |
| App restart terus tiap beberapa detik | App crash berulang (loop). PM2 mencoba menghidupkan terus. | Cek pm2 logs untuk error-nya; perbaiki dulu, baru pm2 restart. |
Langkah berikutnya
App-mu kini hidup 24 jam. Sekarang amankan servernya dari serangan: firewall, kunci SSH, dan Fail2ban — biar tidur nyenyak.
Lanjutan: amankan server (Firewall, SSH Key, Fail2ban) →
Tutup pintu yang tidak perlu, ganti password dengan kunci, dan blokir penyerang otomatis. Lengkap dengan tombol salin.