11 KiB
11 KiB
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:
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:
envFrom:
- configMapRef:
name: satusehat-service-env
4. Perubahan penting dari source ke K3s
- Baris env yang tidak valid untuk Kustomize dibuang, terutama komentar
// ...dan baris bebas sepertiuntuk vclaim. - Duplikasi
APP_ENVdinormalisasi menjadiAPP_ENV=production. - Worker dinormalisasi ke port
8080karena Dockerfile worker terbaru mengekspos8080. - Worker diarahkan ke service internal K3s:
http://satusehat-service-prod/api/v1/. - Redis dibuat sebagai komponen internal K3s agar
CACHE_REDIS_HOSTtidak 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:
// komentar gaya JS
untuk vclaim
untuk IHS
untuk Apotek
8. File output
Manifest final tersedia pada folder:
satusehat-k3s/
Paket siap kirim tersedia sebagai ZIP:
satusehat-k3s-kustomize-env-nosecret.zip