๐ Deploy Next.js di VPS Menggunakan PM2 (Lengkap & Praktis)

Pendahuluan
Saat membangun aplikasi Next.js, menjalankannya di local dengan npm run dev memang mudah.
Tapi ketika masuk ke server / VPS, kita butuh cara yang stabil, aman, dan otomatis hidup kembali saat server restart.
Di artikel ini, aku akan membahas cara deploy Next.js di VPS menggunakan PM2, lengkap dari build hingga troubleshooting umum.
Kenapa Tidak npm run dev di Server?
Mode dev:
โ Tidak untuk production
โ Boros resource
โ Mati saat terminal ditutup
Solusinya adalah production build + PM2.
Persiapan
Pastikan di VPS kamu sudah terinstall:
Node.js v20+
npm
Project Next.js siap jalan
Cek versi Node:
node -v
1. Build Project Next.js
Sebelum dijalankan di production, WAJIB build dulu:
npm run build
Jika sukses, akan muncul:
Compiled successfully
2. Install PM2
PM2 adalah process manager untuk Node.js.
npm install -g pm2
Cek:
pm2 -v
3. Jalankan Next.js dengan PM2
Gunakan next start, bukan dev.
Contoh menjalankan di port 8080:
pm2 start npm --name "next-portfolio" -- start -- -H 0.0.0.0 -p 8080
Cek status:
pm2 list
4. Auto Start Saat Server Reboot
Agar aplikasi otomatis hidup kembali:
pm2 save
pm2 startup
Jalankan command yang muncul di terminal.
5. Konfigurasi Environment Variable
Next.js tidak membaca .env.example.
Gunakan .env.local.
cp .env.example .env.local
Contoh env penting:
NEXT_PUBLIC_SITE_URL=http://localhost:8080
BETTER_AUTH_URL=http://localhost:8080
โ ๏ธ Setiap ubah ENV โ build ulang wajib dilakukan.
6. Restart Setelah Update
npm run build
pm2 restart next-portfolio
Troubleshooting Umum
โ Website Tidak Bisa Diakses
Pastikan port terbuka (
ufw allow 8080)Pastikan app listen ke
0.0.0.0
โ Data Kosong / Failed to Fetch
.env.localbelum diisiENV berubah tapi tidak build ulang
URL API masih
localhost:3000
โ PM2 Online Tapi Web Mati
Cek log:
pm2 logs next-portfolio
Penutup
Dengan PM2, aplikasi Next.js jadi:
โ Stabil
โ Auto-restart
โ Siap production
Kalau kamu serius deploy Next.js ke server, PM2 adalah pilihan wajib.
โจ Semoga bermanfaat dan selamat ngoding!


