Halo, sobat sysadmin dan pengguna VPS!
Pernahkah Anda merasa kewalahan mengelola VPS karena harus bergantian antara berbagai perintah di terminal untuk memantau sumber daya, bandwidth, hingga melakukan reboot? Jika ya, maka Anda perlu sebuah Admin Panel yang terintegrasi.
Postingan kali ini akan menjadi panduan lengkap Anda untuk membuat sebuah panel administrasi VPS yang powerful dan mudah digunakan langsung dari terminal. Kita akan menambahkan fitur monitoring real-time dengan Netdata, kontrol sistem, dan tentu saja, semua dalam satu perintah yang sederhana.
Fase 1: Instalasi Alat Pendukung
Pertama, kita akan menginstal beberapa alat yang akan digunakan oleh panel.
- Instal Speedtest by Ookla
Digunakan untuk melakukan tes kecepatan internet dari VPS.
curl -s https://packagecloud.io/install/repositories/ookla/speedtest-cli/script.deb.sh | sudo bash sudo apt-get install speedtest -y - Instal Vnstat dan Nload
vnstat: Untuk memantau penggunaan bandwidth secara historis.nload: Untuk memantau trafik jaringan secara real-time.
sudo apt-get install vnstat nload -y - Inisialisasi Database Vnstat
vnstatperlu membuat database untuk mulai mencatat data. Gantieth0jika nama interface jaringan Anda berbeda (cek denganip a).vnstat -i eth0 --create
Fase 2: Membuat Skrip Panel Utama
Kita akan membuat file skrip baru bernama panel yang akan menjadi menu utama.
- Buat File Skrip
Buka editor teks
nanountuk membuat file baru di/usr/bin/panel.nano /usr/bin/panel - Salin dan Tempel Kode Berikut
#!/bin/bash # Fungsi untuk menampilkan header panel header() { clear echo -e "\033[1;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" echo -e "\E[44;1;39m • VPS ADMIN PANEL • \E[0m" echo -e "\033[1;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" } # Fungsi untuk menampilkan menu utama panel menu_panel() { header echo -e "\E[36m1)\E[0m \033[1;37mInformasi VPS Lengkap\033[0m" echo -e "\E[36m2)\E[0m \033[1;37mCek Kecepatan Internet (Speedtest)\033[0m" echo -e "\E[36m3)\E[0m \033[1;37mMonitor Bandwidth (Vnstat)\033[0m" echo -e "\E[36m4)\E[0m \033[1;37mSystem Monitoring Center (Netdata)\033[0m" echo -e "\E[36m5)\E[0m \033[1;37mKelola Layanan Monitoring\033[0m" echo -e "\E[36m6)\E[0m \033[1;37mPenggunaan Sumber Daya (CPU/RAM/Disk)\033[0m" echo -e "\E[36m7)\E[0m \033[1;37mCek Pembaruan Sistem\033[0m" echo -e "\E[36m8)\E[0m \033[1;37mPengguna yang Sedang Login\033[0m" echo -e "\E[36m9)\E[0m \033[1;37mAuto Reboot VPS\033[0m" echo -e "\E[36m10)\E[0m \033[1;37mRestart VPS Sekarang\033[0m" echo -e "\E[36m0)\E[0m \033[1;37mKeluar\033[0m" echo -e "\033[1;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" echo -ne "\033[1;32mPilih menu: \033[0m" read option case $option in 1) vps_info ;; 2) run_speedtest ;; 3) run_vnstat ;; 4) netdata_info ;; 5) manage_services_menu ;; 6) system_resources ;; 7) check_updates ;; 8) current_users ;; 9) auto_reboot_menu ;; 10) restart_vps ;; 0) clear ; exit ;; *) echo "Pilihan tidak valid!"; sleep 2; menu_panel ;; esac } # Fungsi Informasi VPS vps_info() { header echo -e "\E[44;1;39m • INFORMASI VPS LENGKAP • \E[0m" echo -e "\033[1;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" OS=$(hostnamectl | grep "Operating System" | cut -d':' -f2 | xargs) KERNEL=$(uname -r) UPTIME=$(uptime -p) IP_PUB=$(wget -qO- ipinfo.io/ip) CPU_CORE=$(nproc) CPU_MODEL=$(lscpu | grep "Model name" | cut -d':' -f2 | xargs) RAM_TOTAL=$(free -h | awk 'NR==2{print $2}') DISK_TOTAL=$(df -h / | awk 'NR==2 {print $2}') echo -e "\E[36mSistem Operasi:\E[0m \033[1;37m$OS\033[0m" echo -e "\E[36mVersi Kernel:\E[0m \033[1;37m$KERNEL\033[0m" echo -e "\E[36mIP Publik:\E[0m \033[1;37m$IP_PUB\033[0m" echo -e "\E[36mUptime:\E[0m \033[1;37m$UPTIME\033[0m" echo -e "\E[36mCPU:\E[0m \033[1;37m$CPU_MODEL ($CPU_CORE Core)\033[0m" echo -e "\E[36mTotal RAM:\E[0m \033[1;37m$RAM_TOTAL\033[0m" echo -e "\E[36mTotal Disk:\E[0m \033[1;37m$DISK_TOTAL\033[0m" echo -e "\033[1;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" read -n 1 -s -r -p "Tekan tombol apa saja untuk kembali ke menu..." menu_panel } # Fungsi Speedtest run_speedtest() { header echo -e "\E[44;1;39m • SPEEDTEST BY OOKLA • \E[0m" echo -e "\033[1;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" speedtest echo -e "\033[1;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" read -n 1 -s -r -p "Tekan tombol apa saja untuk kembali ke menu..." menu_panel } # Fungsi Vnstat run_vnstat() { header echo -e "\E[44;1;39m • MONITOR BANDWIDTH (VNSTAT) • \E[0m" echo -e "\033[1;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" echo "Penggunaan per jam (Interface eth0):" vnstat -i eth0 -h echo -e "\033[1;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" echo "Penggunaan per hari (10 hari terakhir):" vnstat -i eth0 -d | tail -n 11 echo -e "\033[1;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" echo "Penggunaan per bulanan:" vnstat -i eth0 -m echo -e "\033[1;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" read -n 1 -s -r -p "Tekan tombol apa saja untuk kembali ke menu..." menu_panel } # Fungsi Info Netdata netdata_info() { header echo -e "\E[44;1;39m • SYSTEM MONITORING CENTER (NETDATA) • \E[0m" echo -e "\033[1;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" echo -e "\E[36mDashboard Netdata sudah berjalan di VPS Anda.\E[0m" echo "" echo -e "\E[32mCara Akses yang Aman (Menggunakan SSH Tunnel):\E[0m" echo -e "\033[1;37m1. Buka terminal di KOMPUTER Anda.\E[0m" echo -e "\033[1;37m2. Jalankan perintah: \E[0m \E[33mssh -L 19999:127.0.0.1:19999 root@IP_VPS_ANDA\E[0m" echo -e "\033[1;37m3. Buka browser dan akses: \E[0m \E[33mhttp://localhost:19999\E[0m" echo "" echo -e "\E[31mPERINGATAN: Jangan membuka port 19999 ke publik!\E[0m" echo -e "\033[1;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" read -n 1 -s -r -p "Tekan tombol apa saja untuk kembali ke menu..." menu_panel } # Fungsi Menu Kelola Layanan manage_services_menu() { header echo -e "\E[44;1;39m • KELOLA LAYANAN MONITORING • \E[0m" echo -e "\033[1;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" echo -e "\E[36m1)\E[0m \033[1;37mHidupkan/Matikan Netdata\033[0m" echo -e "\E[36m2)\E[0m \033[1;37mHidupkan/Matikan Vnstat\033[0m" echo -e "\E[36m3)\E[0m \033[1;37mStatus Semua Layanan\033[0m" echo -e "\E[36m0)\E[0m \033[1;37mKembali ke Menu Utama\033[0m" echo -e "\033[1;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" echo -ne "\033[1;32mPilih menu: \033[0m" read option case $option in 1) toggle_service "netdata" ;; 2) toggle_service "vnstat" ;; 3) check_all_services_status ;; 0) menu_panel ;; *) echo "Pilihan tidak valid!"; sleep 2; manage_services_menu ;; esac } # Fungsi untuk menghidupkan/mematikan layanan toggle_service() { local service_name=$1 if [[ $(systemctl is-active $service_name) == 'active' ]]; then systemctl stop $service_name echo -e "\E[31mLayanan $service_name telah dihentikan untuk menghemat RAM.\E[0m" else systemctl start $service_name echo -e "\E[32mLayanan $service_name telah dihidupkan kembali.\E[0m" fi sleep 2 manage_services_menu } # Fungsi untuk mengecek status semua layanan check_all_services_status() { header echo -e "\E[44;1;39m • STATUS SEMUA LAYANAN • \E[0m" echo -e "\033[1;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" services=("netdata" "vnstat") for service in "${services[@]}"; do if [[ $(systemctl is-active $service) == 'active' ]]; then echo -e "\E[32mStatus $service: \E[0m \033[1;37mActive (Running)\033[0m" else echo -e "\E[31mStatus $service: \E[0m \033[1;37mInactive (Stopped)\033[0m" fi done echo -e "\033[1;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" read -n 1 -s -r -p "Tekan tombol apa saja untuk kembali..." manage_services_menu } # Fungsi Sumber Daya system_resources() { header echo -e "\E[44;1;39m • PENGGUNAAN SUMBER DAYA • \E[0m" echo -e "\033[1;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" echo -e "\E[36mPenggunaan CPU (5 Proses Teratas):\E[0m" ps aux --sort=-%cpu | head -n 6 | awk 'NR==1 {print $0} NR>1 {printf "%-10s %5s%% %s\n", $1, $3, $11}' echo "" echo -e "\E[36mPenggunaan RAM:\E[0m" free -h echo "" echo -e "\E[36mPenggunaan Disk:\E[0m" df -h echo -e "\033[1;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" read -n 1 -s -r -p "Tekan tombol apa saja untuk kembali ke menu..." menu_panel } # Fungsi Cek Pembaruan check_updates() { header echo -e "\E[44;1;39m • CEK PEMBARUAN SISTEM • \E[0m" echo -e "\033[1;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" echo "Mencari pembaruan yang tersedia..." apt list --upgradable 2>/dev/null if [ $? -eq 0 ]; then echo -e "\033[1;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" echo -e "\E[36mUntuk memperbarui, jalankan: \E[0m \033[1;37msudo apt update && sudo apt upgrade -y\033[0m" else echo -e "\E[32mTidak ada pembaruan yang tersedia.\E[0m" fi echo -e "\033[1;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" read -n 1 -s -r -p "Tekan tombol apa saja untuk kembali ke menu..." menu_panel } # Fungsi Pengguna Login current_users() { header echo -e "\E[44;1;39m • PENGGUNA YANG SEDANG LOGIN • \E[0m" echo -e "\033[1;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" w echo -e "\033[1;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" read -n 1 -s -r -p "Tekan tombol apa saja untuk kembali ke menu..." menu_panel } # Fungsi Menu Auto Reboot auto_reboot_menu() { header echo -e "\E[44;1;39m • AUTO REBOOT VPS • \E[0m" echo -e "\033[1;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" echo -e "\E[36m1)\E[0m \033[1;37mJadwalkan Reboot dalam 1 Jam\033[0m" echo -e "\E[36m2)\E[0m \033[1;37mJadwalkan Reboot dalam 6 Jam\033[0m" echo -e "\E[36m3)\E[0m \033[1;37mJadwalkan Reboot dalam 12 Jam\033[0m" echo -e "\E[36m4)\E[0m \033[1;37mJadwalkan Reboot dalam 24 Jam\033[0m" echo -e "\E[36m5)\E[0m \033[1;37mBatalkan Jadwal Reboot\033[0m" echo -e "\E[36m6)\E[0m \033[1;37mLihat Log Reboot\033[0m" echo -e "\E[36m7)\E[0m \033[1;37mHapus Log Reboot\033[0m" echo -e "\E[36m0)\E[0m \033[1;37mKembali ke Menu Utama\033[0m" echo -e "\033[1;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" echo -ne "\033[1;32mPilih menu: \033[0m" read option case $option in 1) schedule_reboot 1 ;; 2) schedule_reboot 6 ;; 3) schedule_reboot 12 ;; 4) schedule_reboot 24 ;; 5) cancel_reboot ;; 6) view_reboot_log ;; 7) clear_reboot_log ;; 0) menu_panel ;; *) echo "Pilihan tidak valid!"; sleep 2; auto_reboot_menu ;; esac } # Fungsi Restart VPS restart_vps() { header echo -e "\E[44;1;39m • RESTART VPS SEKARANG • \E[0m" echo -e "\033[1;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" echo -e "\E[31mPERINGATAN: Ini akan mem-boot ulang VPS Anda sekarang juga!\E[0m" echo -e "\E[31mSemua koneksi akan terputus.\E[0m" echo -e "\033[1;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" read -p "Apakah Anda yakin? (y/n): " confirm if [[ "$confirm" == "y" || "$confirm" == "Y" ]]; then echo -e "\E[32mVPS akan reboot dalam 5 detik...\E[0m" sleep 5 reboot else echo -e "\E[33mDibatalkan.\E[0m" sleep 2 menu_panel fi } # Fungsi untuk menjadwalkan reboot schedule_reboot() { local hours=$1 local reboot_time=$(date -d "$hours hours" +"%Y-%m-%d %H:%M:%S") local cron_time=$(date -d "$hours hours" +"%M %H %d %m *") (crontab -l 2>/dev/null | grep -v "shutdown -r now") | crontab - (crontab -l 2>/dev/null; echo "$cron_time /sbin/shutdown -r now") | crontab - echo "Auto Reboot dijadwalkan pada: $reboot_time" > /etc/auto_reboot.log echo -e "\E[32mVPS akan di-reboot otomatis pada: \E[0m \033[1;37m$reboot_time\033[0m" sleep 3 auto_reboot_menu } # Fungsi untuk membatalkan reboot cancel_reboot() { (crontab -l 2>/dev/null | grep -v "shutdown -r now") | crontab - rm -f /etc/auto_reboot.log echo -e "\E[32mJadwal auto reboot berhasil dibatalkan.\E[0m" sleep 2 auto_reboot_menu } # Fungsi untuk melihat log view_reboot_log() { if [ -f /etc/auto_reboot.log ]; then echo -e "\E[36mLog Reboot:\E[0m" cat /etc/auto_reboot.log else echo -e "\E[33mTidak ada jadwal reboot yang aktif.\E[0m" fi echo -e "\033[1;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" read -n 1 -s -r -p "Tekan tombol apa saja untuk kembali..." auto_reboot_menu } # Fungsi untuk menghapus log clear_reboot_log() { rm -f /etc/auto_reboot.log echo -e "\E[32mLog reboot berhasil dihapus.\E[0m" sleep 2 auto_reboot_menu } # Jalankan menu panel menu_panel - Simpan dan Berikan Izin Eksekusi
- Simpan file: Tekan
Ctrl + X, laluY, laluEnter. - Buat file bisa dijalankan:
chmod +x /usr/bin/panel
- Simpan file: Tekan
- Coba Panel
Ketik
paneldi terminal. Menu utama seharusnya sudah muncul.panel
Fase 3: Mengubah Zona Waktu VPS (WIB)
Agar vnstat dan log lainnya menggunakan waktu yang sama dengan Anda (WIB), ikuti langkah ini.
- Ubah Zona Waktu ke Asia/Jakarta
sudo timedatectl set-timezone Asia/Jakarta - Verifikasi Perubahan
Jalankan perintah ini untuk memastikan zona waktu sudah berubah. Pada baris
Time zone, seharusnya sudah tertulisAsia/Jakarta (WIB, +0700).timedatectl - Restart Vnstat
Agar
vnstatsegera menggunakan zona waktu baru.systemctl restart vnstat
Fase 4: Instalasi dan Keamanan Netdata
Netdata akan menjadi pusat monitoring real-time Anda.
- Instal Netdata
Gunakan installer resmi dari Netdata.
bash <(curl -Ss https://my-netdata.io/kickstart.sh) - Amankan Akses Netdata (SANGAT PENTING!)
Secara default, Netdata bisa diakses publik. Kita akan batasi aksesnya hanya dari VPS itu sendiri.
- Buat konfigurasi lengkap:
netdatacli dumpconfig > /etc/netdata/netdata.conf - Edit konfigurasi:
nano /etc/netdata/netdata.conf - Cari bagian
[web](tekanCtrl+W, ketik[web], Enter). - Cari dan Ubah baris
bind to:Cari baris
# bind to = *dan ubah menjadi:bind to = 127.0.0.1 - Simpan dan Restart Netdata:
- Simpan:
Ctrl+X,Y,Enter. - Restart layanan:
systemctl restart netdata
- Simpan:
- Buat konfigurasi lengkap:
Fase 5: Mengintegrasikan Netdata ke Panel
Sekarang kita akan menambahkan menu Netdata ke dalam panel utama.
- Buka Kembali File Panel
nano /usr/bin/panel - Tambahkan Menu Netdata
Di dalam fungsi
menu_panel(), tambahkan baris berikut di antara menu lainnya. Contohnya, setelah menu "Monitor Bandwidth".echo -e "\E[36m3)\E[0m \033[1;37mMonitor Bandwidth (Vnstat)\033[0m" echo -e "\E[36m4)\E[0m \033[1;37mSystem Monitoring Center (Netdata)\033[0m" # Tambahkan ini echo -e "\E[36m5)\E[0m \033[1;37mPenggunaan Sumber Daya (CPU/RAM/Disk)\033[0m"Jangan lupa untuk menyesuaikan nomor menu lainnya di bawahnya.
- Tambahkan Logika Menu
Di dalam struktur
case $option in, tambahkan logika untuk menu baru tersebut.case $option in 1) vps_info ;; 2) run_speedtest ;; 3) run_vnstat ;; 4) netdata_info ;; # Tambahkan ini 5) system_resources ;; # ...dan seterusnya esac - Tambahkan Fungsi Bantuan Netdata
Tempelkan fungsi ini di bagian paling akhir file, sebelum baris terakhir
menu_panel.# Fungsi Info Netdata netdata_info() { header echo -e "\E[44;1;39m • SYSTEM MONITORING CENTER (NETDATA) • \E[0m" echo -e "\033[1;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" echo -e "\E[36mDashboard Netdata sudah berjalan di VPS Anda.\E[0m" echo "" echo -e "\E[32mCara Akses yang Aman (Menggunakan SSH Tunnel):\E[0m" echo -e "\033[1;37m1. Buka terminal di KOMPUTER Anda.\E[0m" echo -e "\033[1;37m2. Jalankan perintah: \E[0m \E[33mssh -L 19999:127.0.0.1:19999 root@IP_VPS_ANDA\E[0m" echo -e "\033[1;37m3. Buka browser dan akses: \E[0m \E[33mhttp://localhost:19999\E[0m" echo "" echo -e "\E[31mPERINGATAN: Jangan membuka port 19999 ke publik!\E[0m" echo -e "\033[1;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" read -n 1 -s -r -p "Tekan tombol apa saja untuk kembali ke menu..." menu_panel } - Simpan dan Selesai
Simpan file (
Ctrl+X,Y,Enter).
Cara Menggunakan Panel Anda
- Untuk membuka panel di VPS:
panel - Untuk mengakses Dashboard Netdata:
- Dari komputer Anda, buka terminal.
- Jalankan perintah:
ssh -L 19999:127.0.0.1:19999 root@IP_VPS_ANDA - Buka browser dan akses:
http://localhost:19999
Anda sekarang memiliki sistem monitoring VPS yang lengkap, aman, dan mudah digunakan. Selamat mencoba!
