# Update Deploy Alpine

Panduan ini untuk server production Alpine Linux x86_64 RAM 1 GB. Server tidak menjalankan build/compile.

## 1. Build Artifact Di Mesin Lokal/Build Machine

Mesin build harus punya Docker.

```bash
./deploy/scripts/build-linux-release.sh
```

Script memakai `node:20-alpine`, menjalankan `npm ci`, `prisma generate`, `next build`, lalu membuat artifact bertanggal:

```bash
abelbirdnest-release-YYYYMMDD-HHMMSS.tar.gz
```

## 2. Upload Artifact Ke Server

```bash
./deploy/scripts/upload-linux-release.sh abelbirdnest@SERVER_IP /opt/abelbirdnest-web
```

Script otomatis memilih artifact terbaru dengan pola `abelbirdnest-release-*.tar.gz`, upload artifact, extract ke:

```bash
/opt/abelbirdnest-web/releases/<timestamp>
```

Lalu update symlink:

```bash
/opt/abelbirdnest-web/current
```

## 3. Prasyarat Server Alpine

Jalankan sekali di server:

```bash
sudo apk add --no-cache nodejs openssl
```

Pastikan env production ada di:

```bash
/var/www/abelbirdnest-web/AbelBirdNest-Stock/.env.production
```

## 4. Setup Service OpenRC

Copy template service dari mesin lokal/build machine:

```bash
scp deploy/openrc/abelbirdnest-web abelbirdnest@SERVER_IP:/tmp/abelbirdnest-web
ssh abelbirdnest@SERVER_IP
sudo mv /tmp/abelbirdnest-web /etc/init.d/abelbirdnest-web
sudo chmod +x /etc/init.d/abelbirdnest-web
sudo rc-update add abelbirdnest-web default
```

Service menjalankan:

```bash
cd /var/www/abelbirdnest-web/AbelBirdNest-Stock/current
PORT=3007 NODE_ENV=production NODE_OPTIONS=--max-old-space-size=512 node server.js
```

## 5. Setelah Upload

Masuk server:

```bash
ssh abelbirdnest@SERVER_IP
cd /var/www/abelbirdnest-web/AbelBirdNest-Stock/current
```

Artifact release dibuat ramping untuk runtime Next.js standalone. Jangan menjalankan `npm install`, `npm run build`, atau `prisma migrate deploy` di server kecil.

Jika update berikutnya membawa migration database, jalankan migration dari mesin build/admin yang punya dependency lengkap dan akses ke database production. Untuk update UI/app tanpa migration, langsung restart service.

Load env hanya jika perlu tes manual:

```bash
set -a
. /var/www/abelbirdnest-web/AbelBirdNest-Stock/.env.production
set +a
```

Restart service:

```bash
sudo rc-service abelbirdnest-web restart
sudo rc-service abelbirdnest-web status
```

## 6. Verifikasi

```bash
curl -I http://127.0.0.1:3007/login
tail -n 100 /var/log/abelbirdnest-web.err
tail -n 100 /var/log/abelbirdnest-web.log
```

Jika memakai reverse proxy, cek domain public setelah service sehat.

## 7. Rollback Cepat

Lihat release yang tersedia:

```bash
ls -lt /var/www/abelbirdnest-web/AbelBirdNest-Stock/releases
```

Arahkan `current` ke release sebelumnya:

```bash
sudo ln -sfn /var/www/abelbirdnest-web/AbelBirdNest-Stock/releases/NAMA_RELEASE_LAMA /var/www/abelbirdnest-web/AbelBirdNest-Stock/current
sudo rc-service abelbirdnest-web restart
```
