Paket 1 · Fondasi DevOpsModul H — Application Deployment & PM2

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 aapanel

Setelah selesai, installer menampilkan URL panel, username, dan password. Simpan informasi tersebut.

Amankan panel

  1. Buka URL panel dan login.
  2. Segera ubah password.
  3. Aktifkan SSL untuk panel.
  4. Batasi akses port panel lewat firewall/Tailscale.
  5. 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:

  1. Buka App Store.
  2. Cari Node.js Manager dan install.
  3. Pilih versi LTS (mis. Node.js 20 atau 22).
  4. Install.

Verifikasi lewat terminal:

node -v
npm -v

Jika node tidak ditemukan di PATH, cari lokasi instalasi:

which node
find /www/server -name node -type f 2>/dev/null | head

3. Menyiapkan aplikasi Node.js

Struktur direktori

Gunakan struktur yang rapi:

mkdir -p /www/wwwroot/app.example.com
cd /www/wwwroot/app.example.com

Upload atau clone project

git clone https://github.com/user/aplikasi.git .
npm ci
npm run build

Gunakan npm ci bila ada package-lock.json agar dependensi konsisten.

Konfigurasi environment

cat > .env <<'EOF'
NODE_ENV=production
PORT=3000
EOF
chmod 600 .env

Menjalankan aplikasi

Untuk uji cepat:

node server.js

Untuk produksi, gunakan PM2:

npm install -g pm2
pm2 start server.js --name app-example
pm2 save
pm2 startup

PM2 dibahas lebih dalam di halaman berikutnya.

4. Membuat site dan reverse proxy

  1. Buka Website → Add Site.
  2. Isi domain app.example.com.
  3. Pilih Node Project bila tersedia, atau buat site statis kosong.
  4. Setelah site dibuat, buka Settings → Reverse Proxy.
  5. Tambahkan proxy:
    • Nama: app-example
    • Target URL: http://127.0.0.1:3000
  6. 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

  1. Buka site → SSL.
  2. Pilih Let's Encrypt.
  3. Centang domain yang ingin diamankan.
  4. Klik Apply.
  5. 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 status

Jangan 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-example

Untuk 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

GejalaCek
502 Bad GatewayAplikasi tidak berjalan, port salah
Halaman defaultReverse proxy belum aktif
EADDRINUSEPort sudah dipakai proses lain
Permission deniedUser/Pemilik file
SSL gagalDNS belum mengarah, port 80 tertutup
Build gagalVersi Node, dependensi, memory

Log:

pm2 logs app-example
journalctl -u nginx -n 50
tail -f /www/wwwlogs/app.example.com.error.log

Ringkasan

  • aaPanel mempermudah pengelolaan situs, Node.js, SSL, dan reverse proxy.
  • Aplikasi produksi dijalankan dengan PM2, bukan node di terminal.
  • Reverse proxy meneruskan domain ke port aplikasi internal.
  • Amankan panel, firewall, dan environment aplikasi.

Selanjutnya

On this page