up to git
This commit is contained in:
No files matched your search
+284
@@ -0,0 +1,284 @@
|
||||
# Analisa K3s SatuSehat: Service + Worker
|
||||
|
||||
## 1. Paket yang dianalisis
|
||||
|
||||
| Paket | Fungsi |
|
||||
|---|---|
|
||||
| `service-satusehat-main.zip` | Service/API utama SatuSehat berbasis Go/Gin |
|
||||
| `worker-satusehat-main.zip` | Worker SatuSehat berbasis Go/Gin dan background worker |
|
||||
|
||||
## 2. Kesimpulan struktur aplikasi
|
||||
|
||||
Aplikasi ini menggunakan pola Go multi-stage build. Service utama menjalankan REST API dan gRPC, sedangkan worker menjalankan REST health endpoint sekaligus background worker.
|
||||
|
||||
| Komponen | Port di K3s | Keterangan |
|
||||
|---|---:|---|
|
||||
| `satusehat-service` | REST `8196`, gRPC `8197` | Service/API utama, dibuka lewat Traefik |
|
||||
| `satusehat-worker` | REST `8080` | Internal-only, tidak diberi ingress |
|
||||
| `redis` | `6379` | Cache internal namespace |
|
||||
|
||||
## 3. Pola Kustomize yang dibuat
|
||||
|
||||
Pola yang dipakai mengikuti referensi QRIS dan SiLARAS, tetapi diubah dari `Secret` menjadi `ConfigMap`:
|
||||
|
||||
```yaml
|
||||
configMapGenerator:
|
||||
- name: satusehat-service-env
|
||||
envs:
|
||||
- .env.service.prod
|
||||
- name: satusehat-worker-env
|
||||
envs:
|
||||
- .env.worker.prod
|
||||
- name: redis-env
|
||||
envs:
|
||||
- .env.redis.prod
|
||||
|
||||
generatorOptions:
|
||||
disableNameSuffixHash: true
|
||||
```
|
||||
|
||||
Deployment membaca env memakai:
|
||||
|
||||
```yaml
|
||||
envFrom:
|
||||
- configMapRef:
|
||||
name: satusehat-service-env
|
||||
```
|
||||
|
||||
## 4. Perubahan penting dari source ke K3s
|
||||
|
||||
1. Baris env yang tidak valid untuk Kustomize dibuang, terutama komentar `// ...` dan baris bebas seperti `untuk vclaim`.
|
||||
2. Duplikasi `APP_ENV` dinormalisasi menjadi `APP_ENV=production`.
|
||||
3. Worker dinormalisasi ke port `8080` karena Dockerfile worker terbaru mengekspos `8080`.
|
||||
4. Worker diarahkan ke service internal K3s: `http://satusehat-service-prod/api/v1/`.
|
||||
5. Redis dibuat sebagai komponen internal K3s agar `CACHE_REDIS_HOST` tidak menggantung ke service eksternal.
|
||||
|
||||
## 5. Env yang dibaca service
|
||||
|
||||
Nilai sensitif disamarkan di laporan ini. Nilai asli ada di file env hasil generate sesuai source yang Anda kirim.
|
||||
|
||||
| Key | Value |
|
||||
|---|---|
|
||||
| `APP_ENV` | `production` |
|
||||
| `GIN_MODE` | `release` |
|
||||
| `LOGGER_LEVEL` | `info` |
|
||||
| `LOGGER_FORMAT` | `text` |
|
||||
| `SERVER_PORT` | `8196` |
|
||||
| `SERVER_REST_ENABLED` | `true` |
|
||||
| `SERVER_REST_PORT` | `8196` |
|
||||
| `SERVER_GRPC_ENABLED` | `true` |
|
||||
| `SERVER_GRPC_PORT` | `8197` |
|
||||
| `CACHE_REDIS_HOST` | `redis-prod` |
|
||||
| `CACHE_REDIS_PORT` | `6379` |
|
||||
| `REDIS_PASSWORD` | `***REDACTED***` |
|
||||
| `AUTH_TYPE` | `hybrid` |
|
||||
| `AUTH_STATIC_TOKENS` | `***REDACTED***` |
|
||||
| `AUTH_FALLBACK_TO` | `jwt` |
|
||||
| `KEYCLOAK_CLIENT_ID` | `***REDACTED***` |
|
||||
| `KEYCLOAK_CLIENT_SECRET` | `***REDACTED***` |
|
||||
| `KEYCLOAK_ISSUER` | `***REDACTED***` |
|
||||
| `KEYCLOAK_URL` | `***REDACTED***` |
|
||||
| `KEYCLOAK_REALM` | `***REDACTED***` |
|
||||
| `KEYCLOAK_AUDIENCE` | `***REDACTED***` |
|
||||
| `KEYCLOAK_JWKS_URL` | `***REDACTED***` |
|
||||
| `KEYCLOAK_ENABLED` | `***REDACTED***` |
|
||||
| `POSTGRES_DEFAULT_HOST` | `10.10.123.198` |
|
||||
| `POSTGRES_DEFAULT_PORT` | `5100` |
|
||||
| `POSTGRES_DEFAULT_USERNAME` | `***REDACTED***` |
|
||||
| `POSTGRES_DEFAULT_PASSWORD` | `***REDACTED***` |
|
||||
| `POSTGRES_DEFAULT_DATABASE` | `db_farmasi` |
|
||||
| `POSTGRES_DEFAULT_SSLMODE` | `disable` |
|
||||
| `POSTGRES_DEFAULT_TIMEOUT` | `5s` |
|
||||
| `POSTGRES_SIMRS_HOST` | `10.10.123.238` |
|
||||
| `POSTGRES_SIMRS_PORT` | `5432` |
|
||||
| `POSTGRES_SIMRS_USERNAME` | `***REDACTED***` |
|
||||
| `POSTGRES_SIMRS_PASSWORD` | `***REDACTED***` |
|
||||
| `POSTGRES_SIMRS_DATABASE` | `simrs` |
|
||||
| `POSTGRES_SIMRS_SSLMODE` | `disable` |
|
||||
| `POSTGRES_SIMRS_TIMEOUT` | `5s` |
|
||||
| `POSTGRES_SATUDATA_CONNECTION` | `postgres` |
|
||||
| `POSTGRES_SATUDATA_HOST` | `10.10.123.165` |
|
||||
| `POSTGRES_SATUDATA_PORT` | `5000` |
|
||||
| `POSTGRES_SATUDATA_USERNAME` | `***REDACTED***` |
|
||||
| `POSTGRES_SATUDATA_PASSWORD` | `***REDACTED***` |
|
||||
| `POSTGRES_SATUDATA_DATABASE` | `satu_db` |
|
||||
| `POSTGRES_SATUDATA_SSLMODE` | `disable` |
|
||||
| `POSTGRES_SATUDATA_TIMEOUT` | `5s` |
|
||||
| `SQLSERVER_FARMASI_CONNECTION` | `sqlserver` |
|
||||
| `SQLSERVER_FARMASI_USERNAME` | `***REDACTED***` |
|
||||
| `SQLSERVER_FARMASI_PASSWORD` | `***REDACTED***` |
|
||||
| `SQLSERVER_FARMASI_HOST` | `10.10.90.232` |
|
||||
| `SQLSERVER_FARMASI_DATABASE` | `DBINV` |
|
||||
| `SQLSERVER_FARMASI_PORT` | `1433` |
|
||||
| `SQLSERVER_FARMASI_SSLMODE` | `disable` |
|
||||
| `SQLSERVER_FARMASI_TIMEOUT` | `5s` |
|
||||
| `MYSQL_RIS_CONNECTION` | `mysql` |
|
||||
| `MYSQL_RIS_USERNAME` | `***REDACTED***` |
|
||||
| `MYSQL_RIS_PASSWORD` | `***REDACTED***` |
|
||||
| `MYSQL_RIS_HOST` | `10.10.123.141` |
|
||||
| `MYSQL_RIS_PORT` | `3306` |
|
||||
| `MYSQL_RIS_DATABASE` | `fk_radiology` |
|
||||
| `MYSQL_RIS_TIMEOUT` | `5s` |
|
||||
| `BPJS_ENABLED` | `true` |
|
||||
| `BPJS_KDPPK` | `1323A036` |
|
||||
| `BPJS_CONSID` | `***REDACTED***` |
|
||||
| `BPJS_SECRETKEY` | `***REDACTED***` |
|
||||
| `BPJS_BASEURL` | `https://apijkn-dev.bpjs-kesehatan.go.id` |
|
||||
| `BPJS_SERVICE_NAME` | `vclaim-rest-dev` |
|
||||
| `BPJS_APOTEK_CONSID` | `***REDACTED***` |
|
||||
| `BPJS_APOTEK_SECRETKEY` | `***REDACTED***` |
|
||||
| `BPJS_VCLAIM_USERKEY` | `***REDACTED***` |
|
||||
| `BPJS_ANTROL_USERKEY` | `***REDACTED***` |
|
||||
| `BPJS_IHS_USERKEY` | `***REDACTED***` |
|
||||
| `BPJS_APOTEK_USERKEY` | `***REDACTED***` |
|
||||
| `SATUSEHAT_ENABLED` | `true` |
|
||||
| `SATUSEHAT_ORG_ID` | `100026555` |
|
||||
| `SATUSEHAT_FASYAKES_ID` | `3573011` |
|
||||
| `SATUSEHAT_CLIENT_ID` | `***REDACTED***` |
|
||||
| `SATUSEHAT_CLIENT_SECRET` | `***REDACTED***` |
|
||||
| `SATUSEHAT_AUTH_URL` | `https://api-satusehat.kemkes.go.id/oauth2/v1` |
|
||||
| `SATUSEHAT_BASE_URL` | `https://api-satusehat.kemkes.go.id/fhir-r4/v1` |
|
||||
| `SATUSEHAT_CONSENT_URL` | `https://api-satusehat.kemkes.go.id/consent/v1` |
|
||||
| `SATUSEHAT_KFA_URL` | `https://api-satusehat.kemkes.go.id/kfa-v2` |
|
||||
| `SATUSEHAT_KYC_URL` | `https://api-satusehat.kemkes.go.id/kyc/v1` |
|
||||
| `SATUSEHAT_KYC_CHALLENGE_CODE_URL` | `https://api-satusehat.kemkes.go.id/kyc/v1/challenge-code` |
|
||||
| `SATUSEHAT_WEBHOOK_SECRET` | `***REDACTED***` |
|
||||
| `SATUSEHAT_DICOM_URL` | `https://api-satusehat.kemkes.go.id/dicom/v1/dicomWeb/studies` |
|
||||
| `KYC_PRIVATE_KEY_B64` | `***REDACTED***` |
|
||||
| `KYC_PUBLIC_KEY_B64` | `***REDACTED***` |
|
||||
| `SWAGGER_HOST` | `satusehat-service.rssa.id` |
|
||||
| `CORS_ORIGINS` | `http://localhost:3000,http://localhost:3001,http://localhost:3002,http://localhost:3005,http://meninjar.dev.rssa.id:8198,http://localhost:8080,http://localhost:5173,http://localhost:5174,http://10.10.123.143:3001` |
|
||||
| `CORS_ALLOW_ALL` | `false` |
|
||||
| `MINIO_ENDPOINT` | `http://10.10.123.8:9000` |
|
||||
| `MINIO_ACCESSKEY` | `***REDACTED***` |
|
||||
| `MINIO_SECRETKEY` | `***REDACTED***` |
|
||||
| `MINIO_USESSL` | `false` |
|
||||
| `MINIO_BUCKETNAME` | `dev-test` |
|
||||
| `CACHE_ENABLED` | `true` |
|
||||
| `SWAGGER_BASE_PATH` | `/api/v1` |
|
||||
| `SWAGGER_SCHEMES` | `https` |
|
||||
|
||||
## 6. Env yang dibaca worker
|
||||
|
||||
| Key | Value |
|
||||
|---|---|
|
||||
| `APP_ENV` | `production` |
|
||||
| `GIN_MODE` | `release` |
|
||||
| `LOGGER_LEVEL` | `info` |
|
||||
| `LOGGER_FORMAT` | `text` |
|
||||
| `SERVER_PORT` | `8080` |
|
||||
| `SATU_SEHAT_INTERNAL_FHIR_SERVER_URL` | `http://satusehat-service-prod/api/v1/` |
|
||||
| `AUTH_TYPE` | `hybrid` |
|
||||
| `AUTH_STATIC_TOKENS` | `***REDACTED***` |
|
||||
| `AUTH_FALLBACK_TO` | `jwt` |
|
||||
| `KEYCLOAK_CLIENT_ID` | `***REDACTED***` |
|
||||
| `KEYCLOAK_CLIENT_SECRET` | `***REDACTED***` |
|
||||
| `KEYCLOAK_ISSUER` | `***REDACTED***` |
|
||||
| `KEYCLOAK_URL` | `***REDACTED***` |
|
||||
| `KEYCLOAK_REALM` | `***REDACTED***` |
|
||||
| `KEYCLOAK_AUDIENCE` | `***REDACTED***` |
|
||||
| `KEYCLOAK_JWKS_URL` | `***REDACTED***` |
|
||||
| `KEYCLOAK_ENABLED` | `***REDACTED***` |
|
||||
| `POSTGRES_DEFAULT_HOST` | `10.10.123.198` |
|
||||
| `POSTGRES_DEFAULT_PORT` | `5100` |
|
||||
| `POSTGRES_DEFAULT_USERNAME` | `***REDACTED***` |
|
||||
| `POSTGRES_DEFAULT_PASSWORD` | `***REDACTED***` |
|
||||
| `POSTGRES_DEFAULT_DATABASE` | `db_farmasi` |
|
||||
| `POSTGRES_DEFAULT_SSLMODE` | `disable` |
|
||||
| `POSTGRES_DEFAULT_TIMEOUT` | `5s` |
|
||||
| `POSTGRES_SIMRS_HOST` | `10.10.123.163` |
|
||||
| `POSTGRES_SIMRS_PORT` | `5432` |
|
||||
| `POSTGRES_SIMRS_USERNAME` | `***REDACTED***` |
|
||||
| `POSTGRES_SIMRS_PASSWORD` | `***REDACTED***` |
|
||||
| `POSTGRES_SIMRS_DATABASE` | `simrs` |
|
||||
| `POSTGRES_SIMRS_SSLMODE` | `disable` |
|
||||
| `POSTGRES_SIMRS_TIMEOUT` | `5s` |
|
||||
| `POSTGRES_SATUDATA_CONNECTION` | `postgres` |
|
||||
| `POSTGRES_SATUDATA_HOST` | `10.10.123.165` |
|
||||
| `POSTGRES_SATUDATA_PORT` | `5000` |
|
||||
| `POSTGRES_SATUDATA_USERNAME` | `***REDACTED***` |
|
||||
| `POSTGRES_SATUDATA_PASSWORD` | `***REDACTED***` |
|
||||
| `POSTGRES_SATUDATA_DATABASE` | `satu_db` |
|
||||
| `POSTGRES_SATUDATA_SSLMODE` | `disable` |
|
||||
| `POSTGRES_SATUDATA_TIMEOUT` | `5s` |
|
||||
| `SQLSERVER_FARMASI_CONNECTION` | `sqlserver` |
|
||||
| `SQLSERVER_FARMASI_USERNAME` | `***REDACTED***` |
|
||||
| `SQLSERVER_FARMASI_PASSWORD` | `***REDACTED***` |
|
||||
| `SQLSERVER_FARMASI_HOST` | `10.10.90.232` |
|
||||
| `SQLSERVER_FARMASI_DATABASE` | `DBINV` |
|
||||
| `SQLSERVER_FARMASI_PORT` | `1433` |
|
||||
| `SQLSERVER_FARMASI_SSLMODE` | `disable` |
|
||||
| `SQLSERVER_FARMASI_TIMEOUT` | `5s` |
|
||||
| `MYSQL_RIS_CONNECTION` | `mysql` |
|
||||
| `MYSQL_RIS_USERNAME` | `***REDACTED***` |
|
||||
| `MYSQL_RIS_PASSWORD` | `***REDACTED***` |
|
||||
| `MYSQL_RIS_HOST` | `10.10.123.141` |
|
||||
| `MYSQL_RIS_PORT` | `3306` |
|
||||
| `MYSQL_RIS_DATABASE` | `fk_radiology` |
|
||||
| `MYSQL_RIS_TIMEOUT` | `5s` |
|
||||
| `SERVER_REST_ENABLED` | `true` |
|
||||
| `SERVER_REST_PORT` | `8080` |
|
||||
| `SERVER_GRPC_ENABLED` | `false` |
|
||||
| `SERVER_GRPC_PORT` | `8099` |
|
||||
| `CACHE_REDIS_HOST` | `redis-prod` |
|
||||
| `CACHE_REDIS_PORT` | `6379` |
|
||||
| `REDIS_PASSWORD` | `***REDACTED***` |
|
||||
| `BPJS_ENABLED` | `true` |
|
||||
| `BPJS_KDPPK` | `1323A036` |
|
||||
| `BPJS_CONSID` | `***REDACTED***` |
|
||||
| `BPJS_SECRETKEY` | `***REDACTED***` |
|
||||
| `BPJS_BASEURL` | `https://apijkn-dev.bpjs-kesehatan.go.id` |
|
||||
| `BPJS_SERVICE_NAME` | `vclaim-rest-dev` |
|
||||
| `BPJS_APOTEK_CONSID` | `***REDACTED***` |
|
||||
| `BPJS_APOTEK_SECRETKEY` | `***REDACTED***` |
|
||||
| `BPJS_VCLAIM_USERKEY` | `***REDACTED***` |
|
||||
| `BPJS_ANTROL_USERKEY` | `***REDACTED***` |
|
||||
| `BPJS_IHS_USERKEY` | `***REDACTED***` |
|
||||
| `BPJS_APOTEK_USERKEY` | `***REDACTED***` |
|
||||
| `SATUSEHAT_ENABLED` | `true` |
|
||||
| `SATUSEHAT_ORG_ID` | `100026555` |
|
||||
| `SATUSEHAT_FASYAKES_ID` | `3573011` |
|
||||
| `SATUSEHAT_CLIENT_ID` | `***REDACTED***` |
|
||||
| `SATUSEHAT_CLIENT_SECRET` | `***REDACTED***` |
|
||||
| `SATUSEHAT_AUTH_URL` | `https://api-satusehat.kemkes.go.id/oauth2/v1` |
|
||||
| `SATUSEHAT_BASE_URL` | `https://api-satusehat.kemkes.go.id/fhir-r4/v1` |
|
||||
| `SATUSEHAT_CONSENT_URL` | `https://api-satusehat.dto.kemkes.go.id/consent/v1` |
|
||||
| `SATUSEHAT_KFA_URL` | `https://api-satusehat.kemkes.go.id/kfa-v2` |
|
||||
| `SWAGGER_HOST` | `satusehat-worker.rssa.id` |
|
||||
| `CORS_ORIGINS` | `http://localhost:3000,http://localhost:3001,http://localhost:3002,http://localhost:3005,http://meninjar.dev.rssa.id:8093,http://localhost:8080,http://localhost:5173,http://localhost:5174,http://10.10.123.143:3001,http://10.10.123.147:8098` |
|
||||
| `CORS_ALLOW_ALL` | `false` |
|
||||
| `MINIO_ENDPOINT` | `http://10.10.123.8:9000` |
|
||||
| `MINIO_ACCESSKEY` | `***REDACTED***` |
|
||||
| `MINIO_SECRETKEY` | `***REDACTED***` |
|
||||
| `MINIO_USESSL` | `false` |
|
||||
| `MINIO_BUCKETNAME` | `dev-test` |
|
||||
| `CACHE_ENABLED` | `true` |
|
||||
| `SWAGGER_BASE_PATH` | `/api/v1` |
|
||||
| `SWAGGER_SCHEMES` | `https` |
|
||||
|
||||
## 7. Catatan validasi env source
|
||||
|
||||
Service env source memiliki 3 baris tidak valid untuk format env Kustomize. Worker env source memiliki 3 baris tidak valid. Baris tersebut tidak dimasukkan ke `.env.*.prod` agar `kubectl apply -k` tidak gagal.
|
||||
|
||||
Contoh jenis baris yang dibuang:
|
||||
|
||||
```text
|
||||
// komentar gaya JS
|
||||
untuk vclaim
|
||||
untuk IHS
|
||||
untuk Apotek
|
||||
```
|
||||
|
||||
## 8. File output
|
||||
|
||||
Manifest final tersedia pada folder:
|
||||
|
||||
```text
|
||||
satusehat-k3s/
|
||||
```
|
||||
|
||||
Paket siap kirim tersedia sebagai ZIP:
|
||||
|
||||
```text
|
||||
satusehat-k3s-kustomize-env-nosecret.zip
|
||||
```
|
||||
@@ -0,0 +1,86 @@
|
||||
# SatuSehat K3s - Kustomize + Env Tanpa Secret
|
||||
|
||||
Template ini dibuat dari paket `service-satusehat-main.zip` dan `worker-satusehat-main.zip`, dengan pola yang mengikuti referensi QRIS dan SiLARAS:
|
||||
|
||||
- `base/` berisi manifest generik.
|
||||
- `overlays/prod/` berisi konfigurasi production.
|
||||
- Environment dimasukkan melalui `configMapGenerator` dari file `.env.*.prod`.
|
||||
- Tidak ada resource Kubernetes `Secret`.
|
||||
- Service API dibuka lewat Traefik `IngressRoute`.
|
||||
- Worker dibuat internal-only, tanpa ingress.
|
||||
- Redis disediakan di dalam namespace yang sama karena aplikasi membaca `CACHE_REDIS_HOST` dan `REDIS_PASSWORD`.
|
||||
|
||||
## Struktur
|
||||
|
||||
```text
|
||||
satusehat-k3s/
|
||||
├── base/
|
||||
│ ├── satusehat-service-deployment.yaml
|
||||
│ ├── satusehat-service-service.yaml
|
||||
│ ├── satusehat-service-resources.yaml
|
||||
│ ├── satusehat-service-probes.yaml
|
||||
│ ├── satusehat-worker-deployment.yaml
|
||||
│ ├── satusehat-worker-service.yaml
|
||||
│ ├── satusehat-worker-resources.yaml
|
||||
│ ├── satusehat-worker-probes.yaml
|
||||
│ ├── redis-deployment.yaml
|
||||
│ ├── redis-service.yaml
|
||||
│ ├── redis-pvc.yaml
|
||||
│ └── kustomization.yaml
|
||||
├── overlays/
|
||||
│ └── prod/
|
||||
│ ├── .env.service.prod
|
||||
│ ├── .env.worker.prod
|
||||
│ ├── .env.redis.prod
|
||||
│ ├── ingress-route.yaml
|
||||
│ ├── certificate.yaml
|
||||
│ ├── hpa-service.yaml
|
||||
│ ├── hpa-worker.yaml
|
||||
│ └── kustomization.yaml
|
||||
├── fleet.yaml
|
||||
└── kustomization.yaml
|
||||
```
|
||||
|
||||
## Deploy
|
||||
|
||||
```bash
|
||||
kubectl apply -k overlays/prod
|
||||
```
|
||||
|
||||
Atau dari root repo:
|
||||
|
||||
```bash
|
||||
kubectl apply -k .
|
||||
```
|
||||
|
||||
## Cek hasil deploy
|
||||
|
||||
```bash
|
||||
kubectl get pods -n rssa-apps-prod -l app.kubernetes.io/part-of=satusehat
|
||||
kubectl get svc -n rssa-apps-prod | grep satusehat
|
||||
kubectl logs -n rssa-apps-prod deploy/satusehat-service-prod -f
|
||||
kubectl logs -n rssa-apps-prod deploy/satusehat-worker-prod -f
|
||||
```
|
||||
|
||||
## Endpoint internal
|
||||
|
||||
Service API dari worker diarahkan ke:
|
||||
|
||||
```text
|
||||
http://satusehat-service-prod/api/v1/
|
||||
```
|
||||
|
||||
Nilai ini ada di:
|
||||
|
||||
```text
|
||||
overlays/prod/.env.worker.prod
|
||||
```
|
||||
|
||||
## Catatan penting
|
||||
|
||||
1. File `.env.service.prod` dan `.env.worker.prod` sudah dibersihkan agar valid untuk `configMapGenerator`. Baris komentar gaya `//` dan baris bebas seperti `untuk vclaim` tidak boleh dipakai di env Kustomize.
|
||||
2. Worker Dockerfile yang baru mengekspos `8080`. Karena itu manifest worker memakai `SERVER_REST_PORT=8080` dan probe ke port `8080`.
|
||||
3. Service utama tetap memakai port REST `8196` dan gRPC `8197`, mengikuti `.env.prod` service.
|
||||
4. Jika registry `git.rssa.top/stim/...` memakai private auth, karena template ini sengaja tanpa Secret, pastikan node K3s sudah bisa pull image dari registry tersebut melalui konfigurasi containerd/node-level login.
|
||||
5. Jika domain bukan `satusehat-service.rssa.id`, ubah `ingress-route.yaml`, `certificate.yaml`, dan `SWAGGER_HOST`.
|
||||
6. Jika storage class `nas-rx300` tidak tersedia, ubah `base/redis-pvc.yaml` atau ganti volume Redis menjadi `emptyDir`.
|
||||
@@ -0,0 +1,23 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
|
||||
resources:
|
||||
- satusehat-service-deployment.yaml
|
||||
- satusehat-service-service.yaml
|
||||
- satusehat-worker-deployment.yaml
|
||||
- satusehat-worker-service.yaml
|
||||
- satusehat-worker-data-pvc.yaml
|
||||
- redis-deployment.yaml
|
||||
- redis-service.yaml
|
||||
- redis-pvc.yaml
|
||||
|
||||
patches:
|
||||
- path: satusehat-service-resources.yaml
|
||||
- path: satusehat-service-probes.yaml
|
||||
- path: satusehat-worker-resources.yaml
|
||||
- path: satusehat-worker-probes.yaml
|
||||
- path: patch-worker-writable-path.yaml
|
||||
- path: patch-worker-wait-service.yaml
|
||||
|
||||
commonLabels:
|
||||
app.kubernetes.io/part-of: satusehat
|
||||
@@ -0,0 +1,20 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: satusehat-worker
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
initContainers:
|
||||
- name: wait-satusehat-service
|
||||
image: busybox:1.36
|
||||
command:
|
||||
- sh
|
||||
- -c
|
||||
- |
|
||||
echo "Waiting for satusehat-service-prod:80..."
|
||||
until nc -z satusehat-service-prod 80; do
|
||||
echo "satusehat-service-prod belum ready, tunggu 3 detik..."
|
||||
sleep 3
|
||||
done
|
||||
echo "satusehat-service-prod ready."
|
||||
@@ -0,0 +1,24 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: satusehat-worker
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
securityContext:
|
||||
runAsNonRoot: true
|
||||
runAsUser: 65532
|
||||
runAsGroup: 65532
|
||||
fsGroup: 65532
|
||||
fsGroupChangePolicy: OnRootMismatch
|
||||
containers:
|
||||
- name: satusehat-worker
|
||||
workingDir: /app
|
||||
volumeMounts:
|
||||
- name: satusehat-worker-internal-data
|
||||
mountPath: /app/internal
|
||||
volumes:
|
||||
- name: satusehat-worker-internal-data
|
||||
persistentVolumeClaim:
|
||||
claimName: satusehat-worker-data
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: redis-satusehat
|
||||
labels:
|
||||
app: redis-satusehat
|
||||
app.kubernetes.io/name: redis-satusehat
|
||||
app.kubernetes.io/component: cache
|
||||
app.kubernetes.io/part-of: satusehat
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: redis-satusehat
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: redis-satusehat
|
||||
app.kubernetes.io/name: redis-satusehat
|
||||
app.kubernetes.io/component: cache
|
||||
app.kubernetes.io/part-of: satusehat
|
||||
spec:
|
||||
containers:
|
||||
- name: redis-satusehat
|
||||
image: redis:7-alpine
|
||||
imagePullPolicy: IfNotPresent
|
||||
ports:
|
||||
- name: redis-satusehat
|
||||
containerPort: 6379
|
||||
envFrom:
|
||||
- configMapRef:
|
||||
name: redis-env
|
||||
command:
|
||||
- sh
|
||||
- -c
|
||||
- |
|
||||
if [ -n "$REDIS_PASSWORD" ]; then
|
||||
exec redis-server --appendonly yes --requirepass "$REDIS_PASSWORD"
|
||||
else
|
||||
exec redis-server --appendonly yes
|
||||
fi
|
||||
volumeMounts:
|
||||
- name: redis-satusehat-data
|
||||
mountPath: /data
|
||||
resources:
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 128Mi
|
||||
limits:
|
||||
cpu: 250m
|
||||
memory: 512Mi
|
||||
volumes:
|
||||
- name: redis-satusehat-data
|
||||
persistentVolumeClaim:
|
||||
claimName: redis-satusehat-data
|
||||
@@ -0,0 +1,16 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: redis-satusehat-data
|
||||
labels:
|
||||
app: redis-satusehat
|
||||
app.kubernetes.io/name: redis-satusehat
|
||||
app.kubernetes.io/component: cache
|
||||
app.kubernetes.io/part-of: satusehat
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
storageClassName: nas-rx300
|
||||
@@ -0,0 +1,16 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: redis-satusehat
|
||||
labels:
|
||||
app: redis-satusehat
|
||||
app.kubernetes.io/name: redis-satusehat
|
||||
app.kubernetes.io/component: cache
|
||||
app.kubernetes.io/part-of: satusehat
|
||||
spec:
|
||||
selector:
|
||||
app: redis-satusehat
|
||||
ports:
|
||||
- name: redis-satusehat
|
||||
port: 6379
|
||||
targetPort: 6379
|
||||
@@ -0,0 +1,54 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: satusehat-service
|
||||
labels:
|
||||
app: satusehat-service
|
||||
app.kubernetes.io/name: satusehat-service
|
||||
app.kubernetes.io/component: api
|
||||
app.kubernetes.io/part-of: satusehat
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: satusehat-service
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: satusehat-service
|
||||
app.kubernetes.io/name: satusehat-service
|
||||
app.kubernetes.io/component: api
|
||||
app.kubernetes.io/part-of: satusehat
|
||||
spec:
|
||||
securityContext:
|
||||
runAsNonRoot: true
|
||||
runAsUser: 65532
|
||||
runAsGroup: 65532
|
||||
fsGroup: 65532
|
||||
containers:
|
||||
- name: satusehat-service
|
||||
image: git.rssa.top/ryan/satusehat-service:20260624092651-main
|
||||
imagePullPolicy: Always
|
||||
workingDir: /app
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 8196
|
||||
- name: grpc
|
||||
containerPort: 8197
|
||||
envFrom:
|
||||
- configMapRef:
|
||||
name: satusehat-service-env
|
||||
volumeMounts:
|
||||
- name: service-logs
|
||||
mountPath: /app/logs
|
||||
- name: service-tmp
|
||||
mountPath: /tmp
|
||||
securityContext:
|
||||
allowPrivilegeEscalation: false
|
||||
capabilities:
|
||||
drop:
|
||||
- ALL
|
||||
volumes:
|
||||
- name: service-logs
|
||||
emptyDir: {}
|
||||
- name: service-tmp
|
||||
emptyDir: {}
|
||||
@@ -0,0 +1,73 @@
|
||||
# apiVersion: apps/v1
|
||||
# kind: Deployment
|
||||
# metadata:
|
||||
# name: satusehat-service
|
||||
# spec:
|
||||
# template:
|
||||
# spec:
|
||||
# containers:
|
||||
# - name: satusehat-service
|
||||
# startupProbe:
|
||||
# httpGet:
|
||||
# scheme: HTTP
|
||||
# port: 8196
|
||||
# path: /health
|
||||
# initialDelaySeconds: 5
|
||||
# periodSeconds: 10
|
||||
# timeoutSeconds: 10
|
||||
# failureThreshold: 30
|
||||
# successThreshold: 1
|
||||
# readinessProbe:
|
||||
# httpGet:
|
||||
# scheme: HTTP
|
||||
# port: 8196
|
||||
# path: /ready
|
||||
# initialDelaySeconds: 10
|
||||
# periodSeconds: 10
|
||||
# timeoutSeconds: 10
|
||||
# failureThreshold: 5
|
||||
# successThreshold: 1
|
||||
# livenessProbe:
|
||||
# httpGet:
|
||||
# scheme: HTTP
|
||||
# port: 8196
|
||||
# path: /live
|
||||
# initialDelaySeconds: 90
|
||||
# periodSeconds: 30
|
||||
# timeoutSeconds: 10
|
||||
# failureThreshold: 5
|
||||
# successThreshold: 1
|
||||
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: satusehat-service
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
containers:
|
||||
- name: satusehat-service
|
||||
startupProbe:
|
||||
tcpSocket:
|
||||
port: 8196
|
||||
initialDelaySeconds: 5
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 2
|
||||
failureThreshold: 18
|
||||
successThreshold: 1
|
||||
readinessProbe:
|
||||
tcpSocket:
|
||||
port: 8196
|
||||
initialDelaySeconds: 10
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 2
|
||||
failureThreshold: 3
|
||||
successThreshold: 1
|
||||
livenessProbe:
|
||||
tcpSocket:
|
||||
port: 8196
|
||||
initialDelaySeconds: 60
|
||||
periodSeconds: 30
|
||||
timeoutSeconds: 2
|
||||
failureThreshold: 3
|
||||
successThreshold: 1
|
||||
@@ -0,0 +1,17 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: satusehat-service
|
||||
spec:
|
||||
replicas: 2
|
||||
template:
|
||||
spec:
|
||||
containers:
|
||||
- name: satusehat-service
|
||||
resources:
|
||||
requests:
|
||||
cpu: 500m
|
||||
memory: 512Mi
|
||||
limits:
|
||||
cpu: 2000m
|
||||
memory: 2Gi
|
||||
@@ -0,0 +1,19 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: satusehat-service
|
||||
labels:
|
||||
app: satusehat-service
|
||||
app.kubernetes.io/name: satusehat-service
|
||||
app.kubernetes.io/component: api
|
||||
app.kubernetes.io/part-of: satusehat
|
||||
spec:
|
||||
selector:
|
||||
app: satusehat-service
|
||||
ports:
|
||||
- name: http
|
||||
port: 80
|
||||
targetPort: 8196
|
||||
- name: grpc
|
||||
port: 8197
|
||||
targetPort: 8197
|
||||
@@ -0,0 +1,16 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: satusehat-worker-data
|
||||
labels:
|
||||
app: satusehat-worker
|
||||
app.kubernetes.io/name: satusehat-worker
|
||||
app.kubernetes.io/component: worker
|
||||
app.kubernetes.io/part-of: satusehat
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
storageClassName: nas-rx300
|
||||
@@ -0,0 +1,52 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: satusehat-worker
|
||||
labels:
|
||||
app: satusehat-worker
|
||||
app.kubernetes.io/name: satusehat-worker
|
||||
app.kubernetes.io/component: worker
|
||||
app.kubernetes.io/part-of: satusehat
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: satusehat-worker
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: satusehat-worker
|
||||
app.kubernetes.io/name: satusehat-worker
|
||||
app.kubernetes.io/component: worker
|
||||
app.kubernetes.io/part-of: satusehat
|
||||
spec:
|
||||
securityContext:
|
||||
runAsNonRoot: true
|
||||
runAsUser: 65532
|
||||
runAsGroup: 65532
|
||||
fsGroup: 65532
|
||||
containers:
|
||||
- name: satusehat-worker
|
||||
image: git.rssa.top/ryan/satusehat-worker:20260612104704-main
|
||||
imagePullPolicy: Always
|
||||
workingDir: /app
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 8080
|
||||
envFrom:
|
||||
- configMapRef:
|
||||
name: satusehat-worker-env
|
||||
volumeMounts:
|
||||
- name: worker-logs
|
||||
mountPath: /app/logs
|
||||
- name: worker-tmp
|
||||
mountPath: /tmp
|
||||
securityContext:
|
||||
allowPrivilegeEscalation: false
|
||||
capabilities:
|
||||
drop:
|
||||
- ALL
|
||||
volumes:
|
||||
- name: worker-logs
|
||||
emptyDir: {}
|
||||
- name: worker-tmp
|
||||
emptyDir: {}
|
||||
@@ -0,0 +1,73 @@
|
||||
# apiVersion: apps/v1
|
||||
# kind: Deployment
|
||||
# metadata:
|
||||
# name: satusehat-worker
|
||||
# spec:
|
||||
# template:
|
||||
# spec:
|
||||
# containers:
|
||||
# - name: satusehat-worker
|
||||
# startupProbe:
|
||||
# httpGet:
|
||||
# scheme: HTTP
|
||||
# port: 8080
|
||||
# path: /health
|
||||
# initialDelaySeconds: 5
|
||||
# periodSeconds: 10
|
||||
# timeoutSeconds: 10
|
||||
# failureThreshold: 30
|
||||
# successThreshold: 1
|
||||
# readinessProbe:
|
||||
# httpGet:
|
||||
# scheme: HTTP
|
||||
# port: 8080
|
||||
# path: /ready
|
||||
# initialDelaySeconds: 10
|
||||
# periodSeconds: 10
|
||||
# timeoutSeconds: 10
|
||||
# failureThreshold: 5
|
||||
# successThreshold: 1
|
||||
# livenessProbe:
|
||||
# httpGet:
|
||||
# scheme: HTTP
|
||||
# port: 8080
|
||||
# path: /live
|
||||
# initialDelaySeconds: 90
|
||||
# periodSeconds: 30
|
||||
# timeoutSeconds: 10
|
||||
# failureThreshold: 5
|
||||
# successThreshold: 1
|
||||
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: satusehat-worker
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
containers:
|
||||
- name: satusehat-worker
|
||||
startupProbe:
|
||||
tcpSocket:
|
||||
port: 8080
|
||||
initialDelaySeconds: 5
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 2
|
||||
failureThreshold: 18
|
||||
successThreshold: 1
|
||||
readinessProbe:
|
||||
tcpSocket:
|
||||
port: 8080
|
||||
initialDelaySeconds: 10
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 2
|
||||
failureThreshold: 3
|
||||
successThreshold: 1
|
||||
livenessProbe:
|
||||
tcpSocket:
|
||||
port: 8080
|
||||
initialDelaySeconds: 60
|
||||
periodSeconds: 30
|
||||
timeoutSeconds: 2
|
||||
failureThreshold: 3
|
||||
successThreshold: 1
|
||||
@@ -0,0 +1,17 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: satusehat-worker
|
||||
spec:
|
||||
replicas: 1
|
||||
template:
|
||||
spec:
|
||||
containers:
|
||||
- name: satusehat-worker
|
||||
resources:
|
||||
requests:
|
||||
cpu: 500m
|
||||
memory: 1Gi
|
||||
limits:
|
||||
cpu: 2000m
|
||||
memory: 2Gi
|
||||
@@ -0,0 +1,16 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: satusehat-worker
|
||||
labels:
|
||||
app: satusehat-worker
|
||||
app.kubernetes.io/name: satusehat-worker
|
||||
app.kubernetes.io/component: worker
|
||||
app.kubernetes.io/part-of: satusehat
|
||||
spec:
|
||||
selector:
|
||||
app: satusehat-worker
|
||||
ports:
|
||||
- name: http
|
||||
port: 80
|
||||
targetPort: 8080
|
||||
@@ -0,0 +1,2 @@
|
||||
kustomize:
|
||||
dir: ""
|
||||
@@ -0,0 +1,5 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
|
||||
resources:
|
||||
- overlays/prod
|
||||
@@ -0,0 +1,5 @@
|
||||
# Redis production env, loaded as ConfigMap
|
||||
# Generated from uploaded source env and sanitized for Kustomize configMapGenerator.
|
||||
# Do not use // comments or plain text lines without KEY=VALUE in Kustomize env files.
|
||||
|
||||
REDIS_PASSWORD=zahw@2904
|
||||
@@ -0,0 +1,102 @@
|
||||
# SatuSehat Service production env, loaded as ConfigMap
|
||||
# Generated from uploaded source env and sanitized for Kustomize configMapGenerator.
|
||||
# Do not use // comments or plain text lines without KEY=VALUE in Kustomize env files.
|
||||
|
||||
APP_ENV=production
|
||||
GIN_MODE=release
|
||||
LOGGER_LEVEL=info
|
||||
LOGGER_FORMAT=text
|
||||
SERVER_PORT=8196
|
||||
SERVER_REST_ENABLED=true
|
||||
SERVER_REST_PORT=8196
|
||||
SERVER_GRPC_ENABLED=true
|
||||
SERVER_GRPC_PORT=8197
|
||||
CACHE_REDIS_HOST=redis-satusehat-prod
|
||||
CACHE_REDIS_PORT=6379
|
||||
REDIS_PASSWORD=zahw@2904
|
||||
AUTH_TYPE=hybrid
|
||||
AUTH_STATIC_TOKENS=token5,token6,token7,token8
|
||||
AUTH_FALLBACK_TO=jwt
|
||||
KEYCLOAK_CLIENT_ID=farmasi
|
||||
KEYCLOAK_CLIENT_SECRET=6ttxZK76N8Q6eCk9BaxHiWOrIXECgNAz
|
||||
KEYCLOAK_ISSUER=https://auth.rssa.top/realms/Dev
|
||||
KEYCLOAK_URL=https://auth.rssa.top
|
||||
KEYCLOAK_REALM=Dev
|
||||
KEYCLOAK_AUDIENCE=farmasi
|
||||
KEYCLOAK_JWKS_URL=https://auth.rssa.top/realms/Dev/protocol/openid-connect/certs
|
||||
KEYCLOAK_ENABLED=true
|
||||
POSTGRES_DEFAULT_HOST=10.10.123.198
|
||||
POSTGRES_DEFAULT_PORT=5100
|
||||
POSTGRES_DEFAULT_USERNAME=stim_farmasi_app
|
||||
POSTGRES_DEFAULT_PASSWORD=mailadmin123
|
||||
POSTGRES_DEFAULT_DATABASE=db_farmasi
|
||||
POSTGRES_DEFAULT_SSLMODE=disable
|
||||
POSTGRES_DEFAULT_TIMEOUT=5s
|
||||
POSTGRES_SIMRS_HOST=10.10.123.238
|
||||
POSTGRES_SIMRS_PORT=5432
|
||||
POSTGRES_SIMRS_USERNAME=brawijaya
|
||||
POSTGRES_SIMRS_PASSWORD=ub*2025
|
||||
POSTGRES_SIMRS_DATABASE=simrs
|
||||
POSTGRES_SIMRS_SSLMODE=disable
|
||||
POSTGRES_SIMRS_TIMEOUT=5s
|
||||
POSTGRES_SATUDATA_CONNECTION=postgres
|
||||
POSTGRES_SATUDATA_HOST=10.10.123.165
|
||||
POSTGRES_SATUDATA_PORT=5000
|
||||
POSTGRES_SATUDATA_USERNAME=stim
|
||||
POSTGRES_SATUDATA_PASSWORD=stim*RS54
|
||||
POSTGRES_SATUDATA_DATABASE=satu_db
|
||||
POSTGRES_SATUDATA_SSLMODE=disable
|
||||
POSTGRES_SATUDATA_TIMEOUT=5s
|
||||
SQLSERVER_FARMASI_CONNECTION=sqlserver
|
||||
SQLSERVER_FARMASI_USERNAME=komfar
|
||||
SQLSERVER_FARMASI_PASSWORD=Komfar123
|
||||
SQLSERVER_FARMASI_HOST=10.10.90.232
|
||||
SQLSERVER_FARMASI_DATABASE=DBINV
|
||||
SQLSERVER_FARMASI_PORT=1433
|
||||
SQLSERVER_FARMASI_SSLMODE=disable
|
||||
SQLSERVER_FARMASI_TIMEOUT=5s
|
||||
MYSQL_RIS_CONNECTION=mysql
|
||||
MYSQL_RIS_USERNAME=admin
|
||||
MYSQL_RIS_PASSWORD=R!suser>S3cured
|
||||
MYSQL_RIS_HOST=10.10.123.141
|
||||
MYSQL_RIS_PORT=3306
|
||||
MYSQL_RIS_DATABASE=fk_radiology
|
||||
MYSQL_RIS_TIMEOUT=5s
|
||||
BPJS_ENABLED=true
|
||||
BPJS_KDPPK=1323A036
|
||||
BPJS_CONSID=16041
|
||||
BPJS_SECRETKEY=8pP3D5431E
|
||||
BPJS_BASEURL=https://apijkn-dev.bpjs-kesehatan.go.id
|
||||
BPJS_SERVICE_NAME=vclaim-rest-dev
|
||||
BPJS_APOTEK_CONSID=16061
|
||||
BPJS_APOTEK_SECRETKEY=5dP41F7EAE
|
||||
BPJS_VCLAIM_USERKEY=467a2817fde5070f66c9a41fbeb8dc2c
|
||||
BPJS_ANTROL_USERKEY=04a742fc834e0d3dc5b18913c8d46b90
|
||||
BPJS_IHS_USERKEY=dc36cb7e2fb9acacad3a4bc5c7423530
|
||||
BPJS_APOTEK_USERKEY=e4305670a51dcbd2b857e95c34ad588e
|
||||
SATUSEHAT_ENABLED=true
|
||||
SATUSEHAT_ORG_ID=100026555
|
||||
SATUSEHAT_FASYAKES_ID=3573011
|
||||
SATUSEHAT_CLIENT_ID=l1ZgJGW6K5pnrqGUikWM7fgIoquA2AQ5UUG0U8WqHaq2VEyZ
|
||||
SATUSEHAT_CLIENT_SECRET=Al3PTYAW6axPiAFwaFlpn8qShLFW5YGMgG8w1qhexgCc7lGTEjjcR6zxa06ThPDy
|
||||
SATUSEHAT_AUTH_URL=https://api-satusehat.kemkes.go.id/oauth2/v1
|
||||
SATUSEHAT_BASE_URL=https://api-satusehat.kemkes.go.id/fhir-r4/v1
|
||||
SATUSEHAT_CONSENT_URL=https://api-satusehat.kemkes.go.id/consent/v1
|
||||
SATUSEHAT_KFA_URL=https://api-satusehat.kemkes.go.id/kfa-v2
|
||||
SATUSEHAT_KYC_URL=https://api-satusehat.kemkes.go.id/kyc/v1
|
||||
SATUSEHAT_KYC_CHALLENGE_CODE_URL=https://api-satusehat.kemkes.go.id/kyc/v1/challenge-code
|
||||
SATUSEHAT_WEBHOOK_SECRET=token_rahasia_webhook_anda_dari_portal_dto
|
||||
SATUSEHAT_DICOM_URL=https://api-satusehat.kemkes.go.id/dicom/v1/dicomWeb/studies
|
||||
KYC_PRIVATE_KEY_B64=LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBb01SNDFMVUxabWNiZURBRHVtN2UvQ2dWanRTc3ZNMmJrSHhsS1pwN0VQT2M1UGlICmprMW1MQTBsZ3BqNGg5RkxNY2VHbUZIcnk3QXFmdDlDUThPb0VsUy9HRUJIeFpmRTlndDhERTZxV0lEQW51VXAKeGJQVFVlNEFhVzBsTUZ5ZVF5eXZZaS9PdVR3VXJCN2M3Y1ZlYm0wTnBrREJ3RDJYRjhwdUFPTW1VeGFPdG9LdQpia2g1WWNVcVZ1enBYWStuTXFMK1FqMUF3UGJ3TlowREpyQlp3ejJYQ2EzU3k2bWtqaEJMV3JhZzFtc29oZUM3CmQ0S21oMDZEZ1JGeFBqMDJacVlGU2l2R1FXeWcvYlZ6bFBtSEpwYVMvem1HY0plcUdXTkg0VUMvQU81YThpNVgKbUo4UmJQVTBtVkxoZHpXcmZWNGFMVEVmLzlNQjRtTFc0VnMyTVFJREFRQUJBb0lCQUFXeWlzdnlmZFMvYUJHLwpoVjFOdlRNclhqNjNacWNEQkIybjYrdWdWdmJPQkdBWXR2Q2VDWFk3a2NvTjN1WnN6bFQxZXMyU2Z5aFMvaUdNCml0Z1ZFck55RzRyWjZkVTh4SUVaL1hlZjhORmx3RFhOWGloc2o5dFVJNEY0K2MrN3c0dlN4VVVsOTdYNHRTeVgKcENtY3hGVEdZbnpES0I2bWpDQ09wdXo2LzlaalRJOXBnN2VlMitEL0MxMjM0bTU1OWgvVVVBQjEzczduNytRbAo1MGpkcUE2WHpGZEM1Wlg1TUF3YkNNNU9kM0Y4TXdpM0EvVDlrazdtRTUwL0Z4cVRDQVhFZEUybFJZTnNsRUNBCnQ5d1NQUVNIQmw2OUg5L1Z4VS9oTk5oVkkzeUZMaHFKM0xBRk42b05UVU5VcTZFMzdvVE5ZUlBCbkJ3RkYvRysKRmF2VVA0RUNnWUVBMDdJTEF2MzNoUCsyMms0WHhyakQyMDI0NFJ4MFRJWjI3YXk3bEorT2lTemFtV1FzeGhFOApFN3YvTUpZTHF0T2hzU1VwYUxTZ04vQUxDWTJ1OXJ4WkNtM1JhM1EwZk9jNm5lbEZEUzhoVHJNZ3VVMFNaakgrCkJ2cXNpazM5Nm5uTHlVRFVKR3pITy85ekpxdW1uMHNkd2VsTGd0TFZkQnRGZWVqQnZTb2NJb0VDZ1lFQXdtbmYKRUxuS3pLWlkrZlNzNmptUGtiRWhZYnovWWFuUnFNbzVZK3F3MFN4T1dGVTIveVROOEpKMWh3MXBubytpNkNONQpqd255bTljNThNM3l3MmJkWnkxVmFwWmFJNTBoeE9ldGtYdmJsaGMyZExJVDRTcThzeENvaWM2elhnTi9IWU9rCkh2SExKc2J6YnE3S2d4Nmg3VWxUTjBXUGVHNk9yYnphRXhyajI3RUNnWUVBeGozb3lmaUNubTNKRWs0blBkVXcKdEdIb1RBYVZja1JKZ3ZGTENEY1RCNnFWV3lmUU5mdFZ3elUrR0lXcWoySjMvS2ZNUzEwNjNLZFI3clJic0h0WQo5c2M0WWVRRWN5TW1aVkpaYzZzN0NiUDlaUW1qdlVmN2x4V1FGa1JMRUJUV25iU3o5UmhZeXZyQkh1bUhzNHhvClpYclBWOGVRVkpabFRYQ0dYVnJkMWdFQ2dZRUF0enVoaWRvU1VaL1c3SDYzR21yMTdaTE1xNW05K1FaZEhJQzgKWm5lai93R0xOYVhiRjg1UWF4VWV3QkxjSVIydnBLc0t2czNaWXhnTysrNmZoNXREd1NMeEJteCt1R0k0bWFUaAo2ZVNhcVhOblY4VWZCM0dJT0J6VFBFOGNydGNNejN4ckN0OUpZVnJSeE5mbzludkFraXd4eWo0OVlueVE3UjY1ClNwaGxlWUVDZ1lCd25VQ2dOMnlwWUJ6V2FwaUpKRmwvcHBRS3ZQVjdPSmZHZVVESGgvZVlhWC9IaVlDY3N3LzkKU1IxMVVza1AwMGRSakt5UERtTG1Odlh5QmRaMDFJTHhOZmFpdXBxNkNWNFlXVThRdTFtb1lMYkc4ZHJjTEpVTApuL1pMY3hycitOS2FNUzZOSzZhSWpSd2FFeVhacWUzdEM5d20xWGdRcVcyYmdHV2E4eU5FL2c9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=
|
||||
KYC_PUBLIC_KEY_B64=LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFvTVI0MUxVTFptY2JlREFEdW03ZQovQ2dWanRTc3ZNMmJrSHhsS1pwN0VQT2M1UGlIamsxbUxBMGxncGo0aDlGTE1jZUdtRkhyeTdBcWZ0OUNROE9vCkVsUy9HRUJIeFpmRTlndDhERTZxV0lEQW51VXB4YlBUVWU0QWFXMGxNRnllUXl5dllpL091VHdVckI3YzdjVmUKYm0wTnBrREJ3RDJYRjhwdUFPTW1VeGFPdG9LdWJraDVZY1VxVnV6cFhZK25NcUwrUWoxQXdQYndOWjBESnJCWgp3ejJYQ2EzU3k2bWtqaEJMV3JhZzFtc29oZUM3ZDRLbWgwNkRnUkZ4UGowMlpxWUZTaXZHUVd5Zy9iVnpsUG1ICkpwYVMvem1HY0plcUdXTkg0VUMvQU81YThpNVhtSjhSYlBVMG1WTGhkeldyZlY0YUxURWYvOU1CNG1MVzRWczIKTVFJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==
|
||||
SWAGGER_HOST=satusehat-service.rssa.id
|
||||
CORS_ORIGINS=http://localhost:3000,http://localhost:3001,http://localhost:3002,http://localhost:3005,http://meninjar.dev.rssa.id:8198,http://localhost:8080,http://localhost:5173,http://localhost:5174,http://10.10.123.143:3001
|
||||
CORS_ALLOW_ALL=false
|
||||
MINIO_ENDPOINT=http://10.10.123.8:9000
|
||||
MINIO_ACCESSKEY=tiBiJQ88gd08rMjYl9Nw
|
||||
MINIO_SECRETKEY=1YXkdicAJbizIJ4vIuEjQwT9kIesImByqTFyphvJ
|
||||
MINIO_USESSL=false
|
||||
MINIO_BUCKETNAME=dev-test
|
||||
CACHE_ENABLED=true
|
||||
SWAGGER_BASE_PATH=/api/v1
|
||||
SWAGGER_SCHEMES=https
|
||||
@@ -0,0 +1,97 @@
|
||||
# SatuSehat Worker production env, loaded as ConfigMap
|
||||
# Generated from uploaded source env and sanitized for Kustomize configMapGenerator.
|
||||
# Do not use // comments or plain text lines without KEY=VALUE in Kustomize env files.
|
||||
|
||||
APP_ENV=production
|
||||
GIN_MODE=release
|
||||
LOGGER_LEVEL=info
|
||||
LOGGER_FORMAT=text
|
||||
SERVER_PORT=8080
|
||||
SATU_SEHAT_INTERNAL_FHIR_SERVER_URL=http://satusehat-service-prod/api/v1/
|
||||
AUTH_TYPE=hybrid
|
||||
AUTH_STATIC_TOKENS=token5,token6,token7,token8
|
||||
AUTH_FALLBACK_TO=jwt
|
||||
KEYCLOAK_CLIENT_ID=farmasi
|
||||
KEYCLOAK_CLIENT_SECRET=6ttxZK76N8Q6eCk9BaxHiWOrIXECgNAz
|
||||
KEYCLOAK_ISSUER=https://auth.rssa.top/realms/Dev
|
||||
KEYCLOAK_URL=https://auth.rssa.top
|
||||
KEYCLOAK_REALM=Dev
|
||||
KEYCLOAK_AUDIENCE=farmasi
|
||||
KEYCLOAK_JWKS_URL=https://auth.rssa.top/realms/Dev/protocol/openid-connect/certs
|
||||
KEYCLOAK_ENABLED=true
|
||||
POSTGRES_DEFAULT_HOST=10.10.123.198
|
||||
POSTGRES_DEFAULT_PORT=5100
|
||||
POSTGRES_DEFAULT_USERNAME=stim_farmasi_app
|
||||
POSTGRES_DEFAULT_PASSWORD=mailadmin123
|
||||
POSTGRES_DEFAULT_DATABASE=db_farmasi
|
||||
POSTGRES_DEFAULT_SSLMODE=disable
|
||||
POSTGRES_DEFAULT_TIMEOUT=5s
|
||||
POSTGRES_SIMRS_HOST=10.10.123.163
|
||||
POSTGRES_SIMRS_PORT=5432
|
||||
POSTGRES_SIMRS_USERNAME=simrs
|
||||
POSTGRES_SIMRS_PASSWORD=simrs.rssa
|
||||
POSTGRES_SIMRS_DATABASE=simrs
|
||||
POSTGRES_SIMRS_SSLMODE=disable
|
||||
POSTGRES_SIMRS_TIMEOUT=5s
|
||||
POSTGRES_SATUDATA_CONNECTION=postgres
|
||||
POSTGRES_SATUDATA_HOST=10.10.123.165
|
||||
POSTGRES_SATUDATA_PORT=5000
|
||||
POSTGRES_SATUDATA_USERNAME=stim
|
||||
POSTGRES_SATUDATA_PASSWORD=stim*RS54
|
||||
POSTGRES_SATUDATA_DATABASE=satu_db
|
||||
POSTGRES_SATUDATA_SSLMODE=disable
|
||||
POSTGRES_SATUDATA_TIMEOUT=5s
|
||||
SQLSERVER_FARMASI_CONNECTION=sqlserver
|
||||
SQLSERVER_FARMASI_USERNAME=komfar
|
||||
SQLSERVER_FARMASI_PASSWORD=Komfar123
|
||||
SQLSERVER_FARMASI_HOST=10.10.90.232
|
||||
SQLSERVER_FARMASI_DATABASE=DBINV
|
||||
SQLSERVER_FARMASI_PORT=1433
|
||||
SQLSERVER_FARMASI_SSLMODE=disable
|
||||
SQLSERVER_FARMASI_TIMEOUT=5s
|
||||
MYSQL_RIS_CONNECTION=mysql
|
||||
MYSQL_RIS_USERNAME=admin
|
||||
MYSQL_RIS_PASSWORD=R!suser>S3cured
|
||||
MYSQL_RIS_HOST=10.10.123.141
|
||||
MYSQL_RIS_PORT=3306
|
||||
MYSQL_RIS_DATABASE=fk_radiology
|
||||
MYSQL_RIS_TIMEOUT=5s
|
||||
SERVER_REST_ENABLED=true
|
||||
SERVER_REST_PORT=8080
|
||||
SERVER_GRPC_ENABLED=false
|
||||
SERVER_GRPC_PORT=8099
|
||||
CACHE_REDIS_HOST=redis-satusehat-prod
|
||||
CACHE_REDIS_PORT=6379
|
||||
REDIS_PASSWORD=zahw@2904
|
||||
BPJS_ENABLED=true
|
||||
BPJS_KDPPK=1323A036
|
||||
BPJS_CONSID=16041
|
||||
BPJS_SECRETKEY=8pP3D5431E
|
||||
BPJS_BASEURL=https://apijkn-dev.bpjs-kesehatan.go.id
|
||||
BPJS_SERVICE_NAME=vclaim-rest-dev
|
||||
BPJS_APOTEK_CONSID=16061
|
||||
BPJS_APOTEK_SECRETKEY=5dP41F7EAE
|
||||
BPJS_VCLAIM_USERKEY=467a2817fde5070f66c9a41fbeb8dc2c
|
||||
BPJS_ANTROL_USERKEY=04a742fc834e0d3dc5b18913c8d46b90
|
||||
BPJS_IHS_USERKEY=dc36cb7e2fb9acacad3a4bc5c7423530
|
||||
BPJS_APOTEK_USERKEY=e4305670a51dcbd2b857e95c34ad588e
|
||||
SATUSEHAT_ENABLED=true
|
||||
SATUSEHAT_ORG_ID=100026555
|
||||
SATUSEHAT_FASYAKES_ID=3573011
|
||||
SATUSEHAT_CLIENT_ID=l1ZgJGW6K5pnrqGUikWM7fgIoquA2AQ5UUG0U8WqHaq2VEyZ
|
||||
SATUSEHAT_CLIENT_SECRET=Al3PTYAW6axPiAFwaFlpn8qShLFW5YGMgG8w1qhexgCc7lGTEjjcR6zxa06ThPDy
|
||||
SATUSEHAT_AUTH_URL=https://api-satusehat.kemkes.go.id/oauth2/v1
|
||||
SATUSEHAT_BASE_URL=https://api-satusehat.kemkes.go.id/fhir-r4/v1
|
||||
SATUSEHAT_CONSENT_URL=https://api-satusehat.dto.kemkes.go.id/consent/v1
|
||||
SATUSEHAT_KFA_URL=https://api-satusehat.kemkes.go.id/kfa-v2
|
||||
SWAGGER_HOST=satusehat-worker.rssa.id
|
||||
CORS_ORIGINS=http://localhost:3000,http://localhost:3001,http://localhost:3002,http://localhost:3005,http://meninjar.dev.rssa.id:8093,http://localhost:8080,http://localhost:5173,http://localhost:5174,http://10.10.123.143:3001,http://10.10.123.147:8098
|
||||
CORS_ALLOW_ALL=false
|
||||
MINIO_ENDPOINT=http://10.10.123.8:9000
|
||||
MINIO_ACCESSKEY=tiBiJQ88gd08rMjYl9Nw
|
||||
MINIO_SECRETKEY=1YXkdicAJbizIJ4vIuEjQwT9kIesImByqTFyphvJ
|
||||
MINIO_USESSL=false
|
||||
MINIO_BUCKETNAME=dev-test
|
||||
CACHE_ENABLED=true
|
||||
SWAGGER_BASE_PATH=/api/v1
|
||||
SWAGGER_SCHEMES=https
|
||||
@@ -0,0 +1,12 @@
|
||||
apiVersion: cert-manager.io/v1
|
||||
kind: Certificate
|
||||
metadata:
|
||||
name: satusehat-service-rssa-id
|
||||
spec:
|
||||
secretName: satusehat-service-rssa-id-tls
|
||||
issuerRef:
|
||||
name: letsencrypt-production
|
||||
kind: ClusterIssuer
|
||||
commonName: "satusehat-service.rssa.id"
|
||||
dnsNames:
|
||||
- "satusehat-service.rssa.id"
|
||||
@@ -0,0 +1,12 @@
|
||||
apiVersion: autoscaling/v1
|
||||
kind: HorizontalPodAutoscaler
|
||||
metadata:
|
||||
name: satusehat-service
|
||||
spec:
|
||||
scaleTargetRef:
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
name: satusehat-service
|
||||
minReplicas: 2
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 70
|
||||
@@ -0,0 +1,12 @@
|
||||
apiVersion: autoscaling/v1
|
||||
kind: HorizontalPodAutoscaler
|
||||
metadata:
|
||||
name: satusehat-worker
|
||||
spec:
|
||||
scaleTargetRef:
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
name: satusehat-worker
|
||||
minReplicas: 1
|
||||
maxReplicas: 1
|
||||
targetCPUUtilizationPercentage: 70
|
||||
@@ -0,0 +1,35 @@
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: satusehat-service-local
|
||||
annotations:
|
||||
kubernetes.io/ingress.class: traefik-internal
|
||||
spec:
|
||||
entryPoints:
|
||||
- web
|
||||
routes:
|
||||
- kind: Rule
|
||||
match: Host(`satusehat-service.rssa.id`)
|
||||
services:
|
||||
- name: satusehat-service-prod
|
||||
port: 80
|
||||
---
|
||||
apiVersion: traefik.containo.us/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: satusehat-service
|
||||
annotations:
|
||||
kubernetes.io/ingress.class: traefik-external
|
||||
spec:
|
||||
entryPoints:
|
||||
- websecure
|
||||
routes:
|
||||
- kind: Rule
|
||||
match: Host(`satusehat-service.rssa.id`)
|
||||
middlewares:
|
||||
- name: default-headers
|
||||
services:
|
||||
- name: satusehat-service-prod
|
||||
port: 80
|
||||
tls:
|
||||
secretName: satusehat-service-rssa-id-tls
|
||||
@@ -0,0 +1,36 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
|
||||
resources:
|
||||
- ../../base
|
||||
- ingress-route.yaml
|
||||
- certificate.yaml
|
||||
- hpa-service.yaml
|
||||
- hpa-worker.yaml
|
||||
|
||||
namespace: rssa-apps-prod
|
||||
nameSuffix: -prod
|
||||
commonLabels:
|
||||
environment: prod
|
||||
app.kubernetes.io/managed-by: kustomize
|
||||
app.kubernetes.io/part-of: satusehat
|
||||
|
||||
images:
|
||||
- name: git.rssa.top/ryan/satusehat-service
|
||||
newTag: 20260624092651-main
|
||||
- name: git.rssa.top/ryan/satusehat-worker
|
||||
newTag: 20260612104704-main
|
||||
|
||||
configMapGenerator:
|
||||
- name: satusehat-service-env
|
||||
envs:
|
||||
- .env.service.prod
|
||||
- name: satusehat-worker-env
|
||||
envs:
|
||||
- .env.worker.prod
|
||||
- name: redis-env
|
||||
envs:
|
||||
- .env.redis.prod
|
||||
|
||||
generatorOptions:
|
||||
disableNameSuffixHash: true
|
||||
Reference in New Issue
Block a user