add deployment and ecosystem pm2
This commit is contained in:
+111
@@ -0,0 +1,111 @@
|
||||
# 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.js`**.
|
||||
|
||||
Isinya menjalankan biner Next (`next start`) setelah build, mode **fork**, satu proses, **PORT** **3090** (sesuai alokasi server Anda). Ubah `PORT` di file tersebut atau lewat variabel lingkungan di server jika kebijakan port berubah.
|
||||
|
||||
Beberapa tutorial memakai nama `ecosystem.config.js`; PM2 menerima nama apa pun asal Anda menjalankan `pm2 start <file>`.
|
||||
|
||||
### 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:
|
||||
|
||||
```bash
|
||||
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):
|
||||
|
||||
```bash
|
||||
npx prisma generate
|
||||
npx prisma migrate deploy
|
||||
```
|
||||
|
||||
5. **Build** Next.js:
|
||||
|
||||
```bash
|
||||
npm run build
|
||||
```
|
||||
|
||||
6. **Mulai** dengan PM2:
|
||||
|
||||
```bash
|
||||
pm2 start ecosystem.js
|
||||
```
|
||||
|
||||
Untuk memakai blok `env_production` di file ecosystem:
|
||||
|
||||
```bash
|
||||
pm2 start ecosystem.js --env production
|
||||
```
|
||||
|
||||
7. **Simpan** daftar proses agar bangkit lagi setelah reboot:
|
||||
|
||||
```bash
|
||||
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):
|
||||
|
||||
```bash
|
||||
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.js` (`name`).
|
||||
|
||||
## 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.
|
||||
- **NextAuth** — `NEXTAUTH_URL` harus persis URL publik (termasuk `https://`).
|
||||
Reference in New Issue
Block a user