aaPanel dan Deployment Aplikasi Node.js
Memasang aaPanel, menyiapkan site Node.js, menjalankan aplikasi, serta mengatur reverse proxy dan SSL.
aaPanel adalah control panel server berbasis web yang memudahkan pengelolaan website, database, SSL, dan aplikasi. Modul ini memandu deployment aplikasi Node.js dari nol.
Apa itu aaPanel?
aaPanel menyediakan antarmuka untuk:
- Mengelola situs dan domain.
- Memasang Nginx/Apache, MySQL, PHP, Node.js.
- Mengatur SSL, firewall, cron, dan backup.
- Melihat log dan resource server.
Panel bukan pengganti pemahaman Linux
aaPanel mempercepat pekerjaan, tetapi Anda tetap perlu memahami service, port, permission, dan log. Saat ada masalah, command line tetap menjadi alat utama.
1. Instalasi aaPanel
Gunakan server Debian/Ubuntu yang bersih. Jalankan installer resmi dari aaPanel:
wget -O install.sh https://www.aapanel.com/script/install_7.0_en.sh
bash install.sh aapanelSetelah selesai, installer menampilkan URL panel, username, dan password. Simpan informasi tersebut.
Amankan panel
- Buka URL panel dan login.
- Segera ubah password.
- Aktifkan SSL untuk panel.
- Batasi akses port panel lewat firewall/Tailscale.
- Aktifkan autentikasi dua faktor bila tersedia.
# Cek port panel yang terbuka
ss -tulpn | grep -E '8888|7800'Jangan buka panel ke publik
Panel adalah pintu administrasi. Batasi akses ke IP admin, Tailscale, atau SSH tunnel. Jangan mengekspos panel ke internet tanpa perlindungan tambahan.
2. Memasang Node.js
Di aaPanel:
- Buka App Store.
- Cari Node.js Manager dan install.
- Pilih versi LTS (mis. Node.js 20 atau 22).
- Install.
Verifikasi lewat terminal:
node -v
npm -vJika node tidak ditemukan di PATH, cari lokasi instalasi:
which node
find /www/server -name node -type f 2>/dev/null | head3. Menyiapkan aplikasi Node.js
Struktur direktori
Gunakan struktur yang rapi:
mkdir -p /www/wwwroot/app.example.com
cd /www/wwwroot/app.example.comUpload atau clone project
git clone https://github.com/user/aplikasi.git .
npm ci
npm run buildGunakan npm ci bila ada package-lock.json agar dependensi konsisten.
Konfigurasi environment
cat > .env <<'EOF'
NODE_ENV=production
PORT=3000
EOF
chmod 600 .envMenjalankan aplikasi
Untuk uji cepat:
node server.jsUntuk produksi, gunakan PM2:
npm install -g pm2
pm2 start server.js --name app-example
pm2 save
pm2 startupPM2 dibahas lebih dalam di halaman berikutnya.
4. Membuat site dan reverse proxy
- Buka Website → Add Site.
- Isi domain
app.example.com. - Pilih Node Project bila tersedia, atau buat site statis kosong.
- Setelah site dibuat, buka Settings → Reverse Proxy.
- Tambahkan proxy:
- Nama:
app-example - Target URL:
http://127.0.0.1:3000
- Nama:
- Simpan.
Contoh konfigurasi Nginx yang dihasilkan:
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}Pastikan aplikasi listen dengan benar
Aplikasi harus listen di 127.0.0.1:3000 atau 0.0.0.0:3000, bukan port lain yang tidak
diproxy.
5. SSL
- Buka site → SSL.
- Pilih Let's Encrypt.
- Centang domain yang ingin diamankan.
- Klik Apply.
- Aktifkan Force HTTPS.
Jika memakai Cloudflare, pilih mode Full (strict) setelah origin memiliki sertifikat valid.
6. Firewall
Buka hanya port yang dibutuhkan:
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
ufw statusJangan membuka port aplikasi (3000) ke publik jika hanya diakses lewat reverse proxy.
7. Deployment pembaruan
Alur sederhana:
cd /www/wwwroot/app.example.com
git pull
npm ci
npm run build
pm2 reload app-exampleUntuk aplikasi dengan downtime minimal, gunakan pm2 reload pada mode cluster.
Backup sebelum update
Snapshot/backup VM atau direktori aplikasi sebelum pembaruan besar. Jika build gagal, Anda bisa kembali ke versi sebelumnya dengan cepat.
Troubleshooting
| Gejala | Cek |
|---|---|
502 Bad Gateway | Aplikasi tidak berjalan, port salah |
| Halaman default | Reverse proxy belum aktif |
EADDRINUSE | Port sudah dipakai proses lain |
| Permission denied | User/Pemilik file |
| SSL gagal | DNS belum mengarah, port 80 tertutup |
| Build gagal | Versi Node, dependensi, memory |
Log:
pm2 logs app-example
journalctl -u nginx -n 50
tail -f /www/wwwlogs/app.example.com.error.logRingkasan
- aaPanel mempermudah pengelolaan situs, Node.js, SSL, dan reverse proxy.
- Aplikasi produksi dijalankan dengan PM2, bukan
nodedi terminal. - Reverse proxy meneruskan domain ke port aplikasi internal.
- Amankan panel, firewall, dan environment aplikasi.
Selanjutnya
Jalankan aplikasi secara produksi di PM2 Production Setup, Process Management, dan Environment Management.
Cloudflare Tunnel untuk Server Tanpa Public IP
Menghubungkan aplikasi lokal ke internet melalui Cloudflare Tunnel tanpa membuka port atau memiliki public IP.
PM2 Production Setup, Process Management, dan Environment Management
Menjalankan aplikasi Node.js di produksi dengan PM2, ecosystem file, cluster mode, environment, dan startup otomatis.