Prepare Alpine artifact deploy workflow

This commit is contained in:
2026-05-26 06:44:12 +07:00
parent f0ceebbbc8
commit 76b37cd4c8
11 changed files with 288 additions and 48 deletions

View File

@ -354,7 +354,7 @@ sudo systemctl restart abelbirdnest-web
## 13. Alternatif Deploy: Build di Lokal, Jalankan di Server
Repo ini sekarang mendukung output Next.js `standalone`, sehingga build bisa dilakukan di lingkungan Linux lokal/container lalu artifact di-upload ke server.
Repo ini sekarang mendukung output Next.js `standalone`, sehingga build dilakukan di lingkungan Linux lokal/container lalu artifact di-upload ke server. Server production tidak menjalankan `npm run build`.
### Kapan jalur ini dipakai
@ -366,8 +366,10 @@ Pakai cara ini jika:
### Prasyarat
- build harus dilakukan di Linux, atau container Linux
- build harus dilakukan di Linux Alpine, atau container Linux Alpine
- versi Node saat build harus sama dengan server
- server Alpine perlu `nodejs` dan `openssl` terpasang
- untuk server RAM 1 GB, runtime disarankan memakai `NODE_OPTIONS=--max-old-space-size=512`
- database migration tetap dijalankan di server
### Script yang disediakan
@ -386,16 +388,16 @@ deploy/scripts/upload-linux-release.sh
### Contoh build artifact di lokal
Pastikan `.env.production` sudah ada di root repo jika ingin ikut dibawa ke artifact.
Pastikan Docker tersedia di mesin lokal/build machine. Script default memakai image `node:20-alpine` agar artifact cocok dengan server Alpine Linux. `.env.production` production tetap disimpan di server, bukan dibawa di artifact.
```bash
./deploy/scripts/build-linux-release.sh
```
Artifact default yang dihasilkan:
Artifact default yang dihasilkan memakai timestamp:
```bash
abelbirdnest-release.tar.gz
abelbirdnest-release-YYYYMMDD-HHMMSS.tar.gz
```
Isi artifact:
@ -404,19 +406,19 @@ Isi artifact:
- static assets `.next/static`
- folder `public`
- folder `prisma`
- `.env.production` jika tersedia
- tidak membawa `.env.production`
### Contoh upload ke server
```bash
./deploy/scripts/upload-linux-release.sh abelbirdnest@server /var/www/abelbirdnest-web
./deploy/scripts/upload-linux-release.sh abelbirdnest@server /var/www/abelbirdnest-web/AbelBirdNest-Stock
```
Setelah upload, script akan:
- copy artifact ke server
- extract ke `/var/www/abelbirdnest-web/releases/<timestamp>`
- update symlink `/var/www/abelbirdnest-web/current`
- extract ke `/var/www/abelbirdnest-web/AbelBirdNest-Stock/releases/<timestamp>`
- update symlink `/var/www/abelbirdnest-web/AbelBirdNest-Stock/current`
### Langkah setelah upload di server
@ -424,13 +426,11 @@ Masuk ke server:
```bash
ssh abelbirdnest@server
cd /var/www/abelbirdnest-web/current
set -a
source .env.production
set +a
npx prisma migrate deploy
cd /var/www/abelbirdnest-web/AbelBirdNest-Stock/current
```
Artifact standalone dibuat untuk runtime. Jangan menjalankan `npm install`, `npm run build`, atau `prisma migrate deploy` di server kecil. Jika rilis membawa migration database, jalankan migration dari mesin build/admin yang punya dependency lengkap dan akses ke database production.
Untuk menjalankan standalone app secara manual:
```bash
@ -440,7 +440,7 @@ PORT=3007 node server.js
Jika memakai `systemd`, `WorkingDirectory` service harus diarahkan ke:
```bash
/var/www/abelbirdnest-web/current
/var/www/abelbirdnest-web/AbelBirdNest-Stock/current
```
dan `ExecStart` menjadi: