Files
cpone_midleware/report/xx-build-deploy-cpone-middleware.md

126 lines
4.0 KiB
Markdown

# Build & Deploy CPONE Middleware — devcpone.aplikasi.web.id
## Ringkasan
Build lokal commit `1ee0cfb` (HEAD) dikirim dan di-deploy ke
`one@devcpone.aplikasi.web.id`, lalu service `cpone-middleware.service`
di-restart. Service aktif dan endpoint sudah diverifikasi.
## Hasil Build
| Item | Nilai |
| :--- | :--- |
| Target build | `./cmd/server` |
| Platform | linux/amd64 |
| Flags | `CGO_ENABLED=0 -trimpath -ldflags="-s -w"` |
| Ukuran binary | 7,159,992 bytes (statically linked, stripped) |
| SHA-256 | `0287e519926ba44c08df0d2a137930ae60028bfb49822139dd3e578864ab008e` |
Test dan vet sebelum build:
```text
go test ./... -> ok
go vet ./... -> ok
```
## Konfigurasi Server
Build `HEAD` memakai arsitektur baru: database management (`CPONE_DB_*`)
plus registry koneksi per rumah sakit, menggantikan koneksi tunggal `DB_*`.
Karena itu `.env` server di-update.
| Kunci lama | Status | Keterangan |
| :--- | :--- | :--- |
| `DB_HOST/DB_PORT/DB_DATABASE/DB_USERNAME/DB_PASSWORD` | dihapus | Tidak dipakai build baru |
| `CPONE_DB_HOST/PORT/DATABASE/USERNAME/PASSWORD` | baru | Management DB lokal MySQL |
| `CPONE_BEARER_TOKEN` | tetap | `MYmIZGwkLQUjmFHiL2kgrOjhUyZnk507oBD2BDwM` |
| `CPONE_DATABASE_SETTINGS_TOKEN` | tidak diset | Fallback ke bearer token |
| `CPONE_DATABASE_CREDENTIAL_KEY` | tidak diset | Fallback ke bearer token |
Nilai management DB baru di `/home/one/apps/.env`:
| Kunci | Nilai |
| :--- | :--- |
| `CPONE_DB_HOST` | `127.0.0.1` |
| `CPONE_DB_PORT` | `3306` |
| `CPONE_DB_DATABASE` | `cpone_middleware` |
| `CPONE_DB_USERNAME` | `admin` |
| `CPONE_DB_PASSWORD` | `Sasone!102938` |
Pada startup, service otomatis membuat database `cpone_middleware` beserta
tabel `hospitals` dan `hospital_databases` (user `admin` punya hak
`CREATE DATABASE`).
## Setting Rumah Sakit
Disamakan dengan environment lokal developer. Di-seed lewat API
`POST /api/cpone/database-settings` setelah service jalan:
| Field | Nilai |
| :--- | :--- |
| `kode_rs` | `AWALBROS_DEV` |
| `nama` | `RS Dev Awalbros` |
| `host` | `his.sismedika.online` |
| `port` | `3306` |
| `database` | `rsabt201107` |
| `username` | `remote` |
Password HIS disimpan terenkripsi (AES-GCM) di tabel `hospital_databases`;
response API hanya menampilkan `has_password`.
## Verifikasi
| Cek | Hasil |
| :--- | :--- |
| `GET /healthz` | `{"success":true,"message":"ok","data":null}` |
| `GET /api/cpone/hospitals` | Mengembalikan `AWALBROS_DEV` |
| `GET /api/cpone/layanan?page=1` + `X-RS-Code` | Data HIS ter-load |
| Tanpa `X-RS-Code` | 422 sesuai desain baru |
| Service state | `active (running)`, MainPID stabil |
## Cara Restart (tanpa sudo)
`sudo systemctl restart cpone-middleware` butuh password (hanya
`apache2.service` yang NOPASSWD). Service berjalan sebagai user `one` dan
memakai `Restart=always`, jadi restart dilakukan dengan `kill` pada PID
utama; systemd otomatis start ulang dengan binary baru:
```bash
kill $(systemctl show cpone-middleware.service -p MainPID --value)
```
## Backup & Rollback
File cadangan di `/home/one/apps/`:
| File | Isi |
| :--- | :--- |
| `cpone-middleware.before-1ee0cfb` | Binary lama (commit 3e5cae4) |
| `.env.bak-20260828` | .env lama (koneksi DB tunggal) |
Rollback:
```bash
cd /home/one/apps
cp -p cpone-middleware.before-1ee0cfb cpone-middleware
cp -p .env.bak-20260828 .env
kill $(systemctl show cpone-middleware.service -p MainPID --value)
```
## Catatan Penting
Build baru WAJIB mengirim `X-RS-Code` (atau query `?kode_rs=`) pada semua
endpoint bisnis. Controller PHP yang memanggil `127.0.0.1:8282/api/cpone`
saat ini belum mengirim header tersebut, sehingga akan menerima 422 sampai
controller PHP di-update untuk mengirim `X-RS-Code: AWALBROS_DEV`.
Untuk production, sebaiknya set `CPONE_DATABASE_SETTINGS_TOKEN` dan
`CPONE_DATABASE_CREDENTIAL_KEY` dengan nilai berbeda dari bearer token,
serta pakai user MySQL khusus (bukan `admin`).
## Documentation Updates Needed
### docs/ (tidak ada perubahan perlu; repo tidak punya direktori docs)
Tidak ada file dokumentasi yang perlu diubah di repository ini.