Files
setrip/deployment.md
T
2026-04-21 16:15:01 +07:00

4.6 KiB

Deploy Setrip dengan PM2

Panduan ini untuk menjalankan aplikasi Next.js (setrip) di server Linux/VPS menggunakan PM2. Pastikan PostgreSQL sudah tersedia dan URL-nya sesuai dengan variabel lingkungan aplikasi.

Prasyarat

  • Node.js 20.x (disarankan, selaras dengan @types/node di proyek)
  • npm atau pnpm/yarn (contoh di bawah memakai npm)
  • PM2 terpasang global: npm install -g pm2
  • Basis data PostgreSQL dan file .env di server (lihat bagian Lingkungan)

File PM2

Konfigurasi PM2 ada di root repositori: ecosystem.config.js (nama ini disengaja).

Jangan pm2 start ecosystem.js kecuali itu skrip Node

Jika Anda menjalankan pm2 start ecosystem.js pada file yang isinya hanya module.exports = { apps: [...] }, PM2 menganggapnya skrip aplikasi biasa dan menjalankannya dengan node ecosystem.js. Akibatnya:

  • Nama proses di daftar PM2 jadi ecosystem (bukan setrip).
  • Next.js tidak dijalankan lewat entri apps Anda.

Gunakan selalu:

pm2 start ecosystem.config.js --env production

Isi file menjalankan biner Next (next start) setelah build, mode fork, satu proses, PORT 3090. Ubah PORT di file tersebut jika kebijakan port berubah.

Berapa port yang dibutuhkan?

Untuk trafik HTTP/HTTPS ke aplikasi Next.js, cukup satu port yang didengarkan oleh next start — di setup ini 3090 (atau satu port lain yang Anda set).

PostgreSQL memakai port tersendiri (biasanya 5432) di mesin tempat database berjalan. Itu bukan “port kedua untuk publik” dari aplikasi web: koneksi DB terjadi dari server aplikasi ke database (localhost atau jaringan internal). Di firewall publik Anda biasanya hanya membuka 80/443 (reverse proxy) atau 3090 jika diakses langsung tanpa proxy.

Langkah deploy (pertama kali)

  1. Clone repositori ke server (misalnya /var/www/setrip).

  2. Masuk ke folder proyek dan pasang dependensi produksi:

    cd /var/www/setrip
    npm ci
    
  3. Lingkungan — salin atau buat .env / .env.production di server (jangan commit rahasia ke git). Minimal sesuai kebutuhan aplikasi Anda, contoh:

    • DATABASE_URL — koneksi PostgreSQL
    • NEXTAUTH_SECRET — string acak yang kuat
    • NEXTAUTH_URL — URL publik aplikasi (harus cocok dengan yang dibuka browser), misalnya https://domain-anda.com atau http://host:3090 jika tanpa HTTPS dan akses langsung ke port tersebut
  4. Prisma — generate client dan terapkan migrasi (jika memakai migrasi):

    npx prisma generate
    npx prisma migrate deploy
    
  5. Build Next.js:

    npm run build
    
  6. Mulai dengan PM2:

    pm2 start ecosystem.config.js --env production
    

    Tanpa --env production tetap jalan; variabel default memakai blok env di file.

  7. Simpan daftar proses agar bangkit lagi setelah reboot:

    pm2 save
    pm2 startup
    

    Ikuti perintah yang dikeluarkan PM2 (biasanya menyalin satu baris sudo env ...).

Perintah PM2 yang sering dipakai

Perintah Keterangan
pm2 status Status semua aplikasi
pm2 logs setrip Log aplikasi bernama setrip
pm2 reload setrip Reload tanpa downtime (berguna setelah deploy baru)
pm2 restart setrip Restart proses
pm2 stop setrip Menghentikan aplikasi
pm2 delete setrip Menghapus aplikasi dari daftar PM2

Deploy ulang (update kode)

Di server, setelah git pull (atau salin artefak baru):

cd /var/www/setrip
npm ci
npx prisma generate
npx prisma migrate deploy
npm run build
pm2 reload setrip

Jika nama aplikasi di PM2 berbeda, ganti setrip dengan nama di ecosystem.config.js (name).

Hapus proses PM2 yang salah (nama ecosystem)

Jika Anda pernah menjalankan pm2 start ecosystem.js dan muncul proses bernama ecosystem:

pm2 stop ecosystem
pm2 delete ecosystem

Atau pakai id dari pm2 status (contoh id 9):

pm2 stop 9
pm2 delete 9

Lalu mulai lagi dengan pm2 start ecosystem.config.js --env production dan pm2 save.

Reverse proxy (opsional)

Agar bisa HTTPS dan port 80/443, letakkan Nginx (atau Caddy) di depan aplikasi yang mendengarkan di 127.0.0.1:3090. Pastikan NEXTAUTH_URL memakai skema dan host yang sama dengan yang diakses pengguna.

Pemecahan masalah

  • 502 / tidak terhubung — cek pm2 logs setrip, pastikan PostgreSQL dapat dijangkau dari server, dan PORT tidak bentrok dengan layanan lain.
  • Error Prisma — pastikan npx prisma generate dijalankan setelah npm ci di setiap deploy, dan DATABASE_URL benar.
  • NextAuthNEXTAUTH_URL harus persis URL publik (termasuk https://).