Capek SSH Tiap Server Reboot? Trik Bikin 9Router Hidup 24/7 di Server Linux Pake Systemd & NVM (Anti Crash Pas Update Node!)

Panduan lengkap dan anti-ribet menjalankan 9Router non-stop 24/7 di server Linux dengan systemd dan NVM wrapper. Auto-start pas booting, auto-restart kalau crash, dan tetap aman tanpa takut broken pas ganti versi Node.js.

> date: 2026-10-02 | > author: fauzan | > 10m read
#tech-news #9router #systemd #nvm #linux #homelab #armbian
Capek SSH Tiap Server Reboot? Trik Bikin 9Router Hidup 24/7 di Server Linux Pake Systemd & NVM (Anti Crash Pas Update Node!)
> ON THIS PAGE [16] [TOGGLE]

Pernah nggak sih kamu ngalamin momen ini: server lokal kamu mendadak reboot (entah karena listrik sempat kedip atau abis kelar update kernel), terus pas mau buka Web Dashboard 9Router... eh halamannya connection refused.

Ujung-ujungnya, kamu harus buka laptop, buka terminal, login SSH, terus ngetik perintah 9router manual lagi. Yang bikin makin mager, pas diketik manual malah muncul tampilan interaktif TUI yang minta dipilih ini-itu. Begitu sesi SSH kamu close atau laptop mati, aplikasinya ikutan exit.

Capek banget, kan? Masa punya server homelab tapi operasinya masih manual kayak nyalain kompor gas portable?

Catatan Lingkungan Pengujian: Di kasus nyata saya, server lokal yang saya gunakan menjalankan Armbian OS di sebuah board mini PC / STB homelab. Namun, seluruh trik, konfigurasi systemd, dan skrip wrapper di artikel ini bersifat universal dan bekerja 100% sama di seluruh distro keluarga Linux lainnya (seperti Ubuntu Server, Debian murni, Raspberry Pi OS, maupun Arch Linux).

> Gambar 2: Pengelolaan proses latar belakang menggunakan systemd

Nah, di artikel ini kita bakal bedah tuntas cara bikin 9Router berjalan headless 24/7 non-stop di Linux. Nggak cuma sekadar pasang service systemd biasa, tapi kita juga bakal beresin masalah klasik yang sering bikin pusing: gimana caranya service systemd tetap jalan mulus walau binary 9Router berada di dalam environment NVM (Node Version Manager) yang versinya bisa berubah kapan aja.

Yuk, kita beresin sekali biar bisa tenang selamanya!


Masalah Utama: TUI Interaktif & Jebakan Batman Path NVM

Sebelum masuk ke baris konfigurasi, kita pahami dulu kenapa menjalankan 9Router di server nggak semudah ketik perintah terus ditinggal tidur. Ada dua kendala utama:

1. Mode Default TUI yang Bikin Gagal Otomasi

Kalau kamu jalankan 9router langsung di terminal, aplikasi bakal masuk ke mode antarmuka teks (TUI) interaktif. Mode ini emang interaktif dan ramah buat pengguna desktop lokal, tapi jadi bencana buat service background (daemon) server karena menuntut input keyboard manusia.

Kabar baiknya, 9Router sebenarnya udah nyediain command line flags bawaan yang emang didesain buat lingkungan server. Coba cek opsinya:

9router --help

Dari opsi yang tersedia, kombinasi sakti yang kita butuhkan adalah:

9router --tray --no-browser --skip-update
  • --tray: Menjalankan router di mode background tanpa memunculkan prompt interaktif TUI.
  • --no-browser: Mencegah server mencoba memanggil browser GUI lokal (karena server kita kan headless tanpa layar monitor).
  • --skip-update: Melewati pengecekan update otomatis saat startup biar booting-nya sat-set dan proses nggak nge-hang kalau koneksi internet pas restart lagi ada latensi.

Saat dites langsung di shell:

⚠ Network-exposed: reachable at http://192.168.1.11:20128 (bound 0.0.0.0).

🚀 9router v0.5.95
Server: http://localhost:20128

💡 Router is now running in system tray. Close this terminal if you want.

Web Dashboard tetap aktif di port default 20128. Tapi begitu terminal kita tutup atau pencet Ctrl + C, prosesnya langsung terbunuh. Makanya kita butuh supervisor proses tingkat OS, yaitu systemd.


> Gambar 3: NVM mengelola isolasi versi Node.js per user, tapi path binary-nya bisa jadi bumerang jika di-hardcode ke systemd.

2. Jebakan Versi Node pada NVM

Nah, ini plot twist teknis yang sering bikin orang kena batunya. Saat kita cek lokasi binary 9Router:

which 9router

Output-nya bakal mirip kayak gini:

/home/efzyn/.nvm/versions/node/v24.19.0/bin/9router

Perhatiin path-nya: /v24.19.0/.

Executable 9Router terkunci di dalam subdirektori versi Node tertentu. Kalau path panjang ini kita tulis mentah-mentah ke konfigurasi unit file systemd, apa yang bakal terjadi pas bulan depan kamu upgrade Node.js ke versi yang lebih baru (misal dari v24.19.0 ke v24.20.0 atau v26)? Service systemd kamu bakal langsung broken alias gagal start karena direktori lamanya udah nggak relevan atau executable-nya pindah tempat!


Solusi Elegan: Bikin Script Wrapper NVM

Daripada pusing tiap kali upgrade Node harus ngedit-ngedit file service di /etc/systemd/system/, solusi paling clean dan bulletproof adalah membuat script wrapper bash sederhana.

Script ini tugasnya simpel tapi krusial: memuat environment NVM pengguna secara dinamis, mengaktifkan versi Node default, baru mengeksekusi 9Router. Jadi si systemd cukup manggil satu script ini aja tanpa peduli versi Node berapa yang lagi aktif.

Buat file wrapper di home directory kamu:

nano /home/efzyn/run-9router.sh

Lalu paste konfigurasi berikut:

#!/bin/bash

# Load environment NVM milik user
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"

# Gunakan versi Node yang diatur sebagai default
nvm use default >/dev/null

# Jalankan 9Router dengan mode server headless
exec 9router --tray --no-browser --skip-update

Simpan file (Ctrl + O, lalu Enter, lalu Ctrl + X), lalu jangan lupa beri izin eksekusi (executable):

chmod +x /home/efzyn/run-9router.sh

Pastikan Alias Default NVM Sudah Terarah

Cek alias default NVM kamu dengan perintah:

nvm alias default

Output contoh:

default -> 24 (-> v24.19.0)

Sekarang kita tes wrapper-nya secara manual:

/home/efzyn/run-9router.sh

Kalau 9Router jalan mulus dan Web Dashboard di port 20128 bisa dibuka dari browser, tekan Ctrl + C. Artinya wrapper kita udah 100% siap diintegrasikan ke systemd.


Membuat Service systemd (Konfigurasi Final)

Sekarang giliran kita serahkan urusan lifecycle proses ke systemd. Dengan systemd:

  1. 9Router bakal nyala otomatis tiap kali server selesai booting.
  2. Kalau aplikasinya mendadak crash atau out of memory, systemd bakal langsung me-restart otomatis dalam hitungan 5 detik.

Buat file unit service baru:

sudo nano /etc/systemd/system/9router.service

Isi dengan konfigurasi berikut:

[Unit]
Description=9Router Headless Server
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=efzyn
Group=efzyn
WorkingDirectory=/home/efzyn

# Environment dasar
Environment="HOME=/home/efzyn"
Environment="NVM_DIR=/home/efzyn/.nvm"

# Eksekusi wrapper script yang sudah dinamis
ExecStart=/home/efzyn/run-9router.sh

# Fitur auto-heal / auto-restart jika proses down
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Tips: Sesuaikan nilai User=efzyn, Group=efzyn, dan direktori /home/efzyn dengan nama user non-root yang kamu pakai di server Linux kamu.

Aktifkan dan Jalankan Service

Reload daemon systemd agar unit baru terdaftar, lalu aktifkan service sekaligus jalankan sekarang juga (enable --now):

sudo systemctl daemon-reload
sudo systemctl enable --now 9router

Cek statusnya:

sudo systemctl status 9router --no-pager

Jika berhasil, kamu bakal melihat status hijau cerah yang memanjakan mata:

● 9router.service - 9Router Headless Server
     Loaded: loaded (/etc/systemd/system/9router.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2026-10-02 10:00:00 WIB; 10s ago
   Main PID: 14205 (run-9router.sh)
      Tasks: 22 (limit: 4184)
     Memory: 84.5M
     CGroup: /system.slice/9router.service
             ├─14205 /bin/bash /home/efzyn/run-9router.sh
             ├─14218 node /home/efzyn/.nvm/versions/node/v24.19.0/bin/9router --tray --no-browser --skip-update
             └─14230 "next-server ..."

enabled artinya service akan otomatis di-boot saat Linux menyala, dan active (running) menandakan prosesnya sudah hidup stabil di background.


Gimana Cara Kerjanya di Balik Layar?

Biar makin paham arsitekturnya dan nggak cuma sekadar copy-paste, berikut gambaran alur kerjanya:

+-------------------------------------------------------------------------+
|                  ALUR STARTUP OTOMATIS 9ROUTER 24/7                    |
+-------------------------------------------------------------------------+

  [ Server Linux / Armbian Boot Selesai ]
            │
            ▼
  [ systemd (9router.service) ]
            │ (Memanggil wrapper script independen)
            ▼
  [ /home/efzyn/run-9router.sh ]
            │
            ├─► 1. Load NVM environment (~/.nvm/nvm.sh)
            ├─► 2. Jalankan `nvm use default` (Dinamis mendeteksi Node aktif)
            └─► 3. `exec 9router --tray --no-browser --skip-update`
                       │
                       ▼
            [ 9Router Web Server Running ]
                 Port 20128 (0.0.0.0)

Dengan arsitektur modular ini:

  1. systemd murni bertindak sebagai pengawas (process supervisor).
  2. Wrapper bash menangani resolusi environment dan path Node.js.
  3. Ketergantungan terhadap path hardcoded versi Node.js berhasil dihilangkan total.

Uji Ketahanan: Test Reboot Server!

Service yang beneran teruji adalah service yang bisa bangkit sendiri setelah server mendadak restart tanpa intervensi manual. Mari kita buktikan:

sudo reboot

Tunggu 1-2 menit sampai server Linux kamu online kembali. Setelah bisa diakses via jaringan, jangan ketik perintah 9router apa pun. Langsung intip statusnya via SSH:

sudo systemctl status 9router --no-pager

Hasilnya? Service langsung menyala rapi dalam kondisi Active: active (running). Buka browser di laptop atau smartphone kamu, akses http://IP-SERVER:20128, dan dashboard 9Router langsung siap dipakai. Effortless!


Checklist Saat Maintenance & Update

Biar setup kamu tetap awet dan nggak gampang rusak pas ada pembaruan di masa depan, simpan contekan ini:

1. Kalau Cuma Mau Update Package 9Router

Jika kamu hanya mengupdate package 9Router di versi Node yang sama, kamu nggak perlu menyentuh file systemd sama sekali. Cukup update package-nya via npm, lalu restart servicenya:

sudo systemctl restart 9router

2. Kalau Kamu Ganti atau Upgrade Versi Node.js di NVM

Ingat konsep dasar NVM: global npm package terisolasi di masing-masing versi Node. Jadi kalau kamu install versi Node baru (misal Node 25) dan menjadikannya default:

nvm install 25
nvm alias default 25
nvm use default

Pastikan 9Router juga sudah terpasang di versi Node yang baru tersebut. Cek dengan which 9router. Kalau belum ada, tinggal install kembali di environment tersebut (npm i -g 9router). Begitu package terpasang, cukup restart servicenya:

sudo systemctl restart 9router

File /etc/systemd/system/9router.service tetap aman tanpa perlu diedit ulang!


Cheat Sheet Perintah Penting (Wajib Bookmark)

Berikut kumpulan perintah esensial buat operasional sehari-hari:

KebutuhanPerintah
Cek status servicesudo systemctl status 9router
Restart servicesudo systemctl restart 9router
Stop service sementarasudo systemctl stop 9router
Start servicesudo systemctl start 9router
Pantau log realtimesudo journalctl -u 9router -f
Lihat 100 baris log terakhirsudo journalctl -u 9router -n 100 --no-pager
Cek apakah port 20128 listenss -lntp | grep 20128

Catatan Keamanan: Jangan Buka Port Ini Sembarangan!

Secara bawaan, 9Router mengikat (bind) servicenya ke 0.0.0.0:20128. Artinya:

  • Web Dashboard bisa diakses oleh semua perangkat di jaringan lokal (LAN/Wi-Fi rumah).
  • BAHAYA: Kalau server Linux kamu punya IP publik atau ada pengaturan port forwarding langsung di router internet, dashboard kamu berpotensi diintip pihak luar.

Rekomendasi Keamanan:

  1. Jangan pernah melakukan port forwarding port 20128 langsung ke internet publik.
  2. Jika butuh akses jarak jauh saat berada di luar rumah, gunakan jaringan privat virtual yang aman seperti Tailscale, WireGuard, atau Cloudflare Zero Trust Tunnels.
  3. Jika dashboard hanya ingin diakses secara lokal di dalam server itu sendiri (misalnya jika kamu memasang reverse proxy Nginx dengan autentikasi kata sandi dan HTTPS), tambahkan opsi --host 127.0.0.1 pada file wrapper run-9router.sh.

Kesimpulan

Dengan setup ini, mengelola server homelab jadi jauh lebih tenang (peace of mind):

  • Gak perlu lagi sesi terminal SSH gantung cuma buat jagain proses 9Router.
  • Server mendadak restart? 9Router otomatis booting sendiri tanpa drama.
  • Proses crash mendadak? Fitur self-healing systemd bakal langsung menghidupkannya lagi.
  • Mau upgrade Node.js lewat NVM? Konfigurasi systemd kamu kebal dan nggak bakal broken.

Dua file yang perlu kamu simpan cuma /home/efzyn/run-9router.sh dan /etc/systemd/system/9router.service. Sisanya? Biarkan Linux dan systemd yang bekerja otomatis di latar belakang.

Selamat mencoba di server kamu! 🚀


Catatan Transparansi AI & Editorial

Artikel panduan teknis ini disusun dan diuji langsung oleh Ahmad Fauzan Adiman (efzyn) pada server lokal berbasis Armbian Linux, dengan optimasi struktur dan visualisasi dibantu oleh asisten AI. Seluruh langkah konfigurasi, script bash, dan unit service systemd telah divalidasi berfungsi secara nyata di lingkungan produksi.


Referensi & Sumber Terkait

  1. Systemd Service and Unit Configuration Manual (freedesktop.org)
  2. Node Version Manager (NVM) Official Documentation
  3. Armbian Linux Documentation for Single Board Computers
  4. 9Router GitHub Official Repository (decolua/9router)