# 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.