A.6 Environment variables
รวบรวม environment variable ของ 3 backend service — regener จาก .env.example / configuration.ts ณ กรกฎาคม 2026
ที่มา
vtrc-api/api/.env.examplecu-central-api/main-api/.env.examplecentralize-api/config/configuration.ts(+.envจริงใช้DB_USER/DB_NAME/DB_NAME_NBC)
หมายเหตุ: Vol 12.6 มี env table แบบ environment-specific — Vol 17 นี้เป็น canonical reference ของชื่อตัวแปร
vtrc-api
แหล่ง: vtrc-api/api/.env.example + defaults ใน api/src/config.js
Database
| Variable | ค่าใน .env.example | หมายเหตุ |
|---|---|---|
DB_SCHEMA | mariadb | dialect |
DB_USERNAME | root | ไม่ใช่ DB_USER |
DB_PASSWORD | "1q2w3e4r00" | weak — เปลี่ยนใน production |
DB_HOST | vtrc-database | MariaDB host |
DB_PORT | 3306 | |
DB_NAME | vtrc | schema หลัก |
DB2_SCHEMA | mariadb | |
DB2_USERNAME | root | |
DB2_PASSWORD | "1q2w3e4r00" | |
DB2_HOST | vtrc-database | |
DB2_PORT | 3306 | |
DB2_NAME | vtrc-centralize | schema bridge |
Authentication / crypto
| Variable | ค่าใน .env.example | หมายเหตุ |
|---|---|---|
JWT_SECRET | "ENTER_SOME_TEXT" | default ใน config.js คือ 'secret' (SEC-4) ถ้าไม่ตั้ง |
DATA_ENCRYPT_KEY | (64-hex) | อยู่ใน example เหมือน key จริง — ต้อง rotate |
Centralize bridge (→ cu-central-api)
| Variable | ค่าใน .env.example | หมายเหตุ |
|---|---|---|
END_POINT_CENTRALIZE | http://localhost:8082/api/graphql | CLIENT_TARGET ตัวอย่าง — ไม่ใช่ CODE_DEFAULT ของ cu-central (APP_PORT=8080) และไม่ใช่ NestJS :3000 |
END_POINT_CENTRALIZE_AUTH | http://localhost:8082/auth | REST auth ของ cu-central |
API_CENTRALIZE_KEY | (long hex) | apiKey ส่งไป cu-central |
CLIENT_ID_CENTRALIZE | "chowrai" |
Transfer / storage / runtime
| Variable | ค่าใน .env.example | หมายเหตุ |
|---|---|---|
TRANSFER_PROTOTAL | "scp" | Typo ของ PROTOCOL — เก็บไว้เพราะ backward compatibility |
TRANSFER_HOST / TRANSFER_PORT / TRANSFER_USERNAME / TRANSFER_PASSWORD | (ว่าง) | |
TRANSFER_DIRECT_DEBIT_PATH / TRANSFER_PAYROLL_PATH | (ว่าง) | |
FILE_STORAGE_PATH | /root_path/storage | |
LOG_PATH | /root_path/logs | |
WEB_URL | http://localhost:8081 | |
API_PREFIX_PATH | /graphql | |
NODE_ENV | development | |
TIME_ZONE | 'Asia/Bangkok' | (มีช่องว่างรอบ = ใน example) |
Defaults ใน config.js ที่ไม่มีใน .env.example
| Variable | Default ใน code | หมายเหตุ |
|---|---|---|
APP_PORT | 8081 | listen port ของ vtrc-api |
APP_NO | 0 | cron gate |
JWT_EXP | '15m' | hardcoded |
JWT_ISSUER | 'redcross.or.th:vtrc' | hardcoded |
DB_MORE_DATABASE | ['vtrc-centralize'] | hardcoded array |
API_DEVICE_KEY | config.js | SEC-3 — ไม่ใช่ env |
Enum / master ใน source (ไม่ใช่ env)
| Item | ที่อยู่ | หมายเหตุ |
|---|---|---|
statusKcash | config.js:488+ | K-Cash status map — ไม่ใช่ KBANK connection block ที่ 488–518 |
relationHrmi / statusHrmi | config.js:392+ / :430+ | HRMI code maps |
cu-central-api
แหล่ง: cu-central-api/main-api/.env.example + main-api/src/config.js
Runtime
| Variable | ค่าใน .env.example | หมายเหตุ |
|---|---|---|
APP_PORT | 8080 | CODE_DEFAULT — ไม่ใช่ 8082; CLIENT_TARGET ของ vtrc อาจชี้ 8082; compose มัก 8000; Dockerfile EXPOSE 9000 ≠ listen |
NODE_ENV | development | |
TIME_ZONE | "+07:00" |
Database (MSSQL)
| Variable | ค่าใน .env.example | หมายเหตุ |
|---|---|---|
DB_SCHEMA | (ว่าง) | |
DB_USERNAME | (ว่าง) | ไม่ใช่ DB_USER |
DB_PASSWORD | (ว่าง) | |
DB_HOST | (ว่าง) | |
DB_PORT | (ว่าง) | |
DB_NAME | (ว่าง) | multi-tenant / SourceDB เพิ่มใน env จริง |
Auth / Redis / LDAP
| Variable | ค่าใน .env.example | หมายเหตุ |
|---|---|---|
HASH_KEY | "FOR_HASH_STRING" | |
JWT_ISSUER | "centralizeApi:rcth" | |
JWT_SECRET | "JWT_SECRET_KEY" | placeholder |
REDIS_HOST | localhost | |
REDIS_PASSWORD | "REDIS_PASSWORD" | session key pattern: sess:{userUid}_{sessionId} |
AD_URL / AD_BASE_DN / AD_USERNAME / AD_PASSWORD | (ตัวอย่าง LDAP) |
SMTP / HRMI
| Variable | หมายเหตุ |
|---|---|
SMTP_HOST / SMTP_USERNAME / SMTP_PASSWORD / SMTP_PORT / SMTP_SECURE | |
EMAIL_SEND_FROM / EMAIL_BCC_RECEIVE_BACKUP | |
HRMI_END_POINT / HRMI_USERNAME / HRMI_PASSWORD |
centralize-api (NestJS)
แหล่ง: centralize-api/config/configuration.ts — ใช้ชื่อ env ตามนี้ (ยืนยันจาก .env จริงใน repo)
| Variable | ใช้ใน code | หมายเหตุ |
|---|---|---|
PORT | process.env.PORT | default runtime 3000 |
SECRET_KEY | jwtSecretKey | |
DB_TYPE | db.type | เช่น mssql |
DB_HOST | db.host | |
DB_PORT | db.port | |
DB_USER | db.user | Nest ใช้ DB_USER (ต่างจาก vtrc/cu ที่ใช้ DB_USERNAME) |
DB_PASSWORD | db.password | |
DB_NAME | db.databaseName | เช่น dbHRMI_Center |
DB_NAME_NBC | db.databaseNameNBC | เช่น dbHRMI_Center_NBC — ไม่ใช่ dbHRMI_NBC |
Hardcoded ใน source
| Item | ที่อยู่ | หมายเหตุ |
|---|---|---|
trustServerCertificate: true | app.module.ts | SEC-6 (Vol 14) |
CORS origin: '*' | main.ts | SEC-5 |
logging: ['error', 'query'] | app.module.ts | CORR-5 |
ตัวแปรที่ต้อง rotate ก่อน production
ตาม debt SEC-3, SEC-4, SEC-11 (ดู Vol 14.1):
| ตัวแปร | เหตุผล | Wave ที่แก้ |
|---|---|---|
JWT_SECRET (vtrc-api) | default เป็น 'secret' | Wave 0 |
DATA_ENCRYPT_KEY | อยู่ใน .env.example เหมือน key จริง | Wave 0 |
DB_PASSWORD (vtrc-api) | "1q2w3e4r00" อ่อนแอ | Wave 0 |
API_DEVICE_KEY | อยู่ใน source code | Wave 0 |
API_CENTRALIZE_KEY | อยู่ใน .env.example | Wave 0 |
| GCP SA key | อยู่ใน repo (vtrc-gcp-sa-key.json) | Wave 0 |
Pattern ที่ต้องระวัง
ชื่อคล้ายกันแต่คนละอย่าง
| ชื่อ | service | ความหมาย |
|---|---|---|
DB_USERNAME | vtrc-api / cu-central-api | MariaDB / MSSQL user |
DB_USER | NestJS centralize-api | MSSQL user (configuration.ts) |
APP_PORT | vtrc-api = 8081; cu-central = 8080 | คนละ default |
PORT | NestJS centralize-api | 3000 |
CLIENT_TARGET ≠ CODE_DEFAULT
END_POINT_CENTRALIZE=...:8082/... ใน vtrc .env.example เป็น CLIENT_TARGET ตัวอย่าง — อย่าสรุปว่า cu-central default listen ที่ 8082
สรุป
- vtrc-api ใช้
DB_USERNAME— ไม่ใช่DB_USER - cu-central CODE_DEFAULT
APP_PORT=8080 - NestJS ใช้
DB_USER/DB_NAME/DB_NAME_NBCจากconfiguration.ts - live bridge =
END_POINT_CENTRALIZE(+_AUTH) → cu-central-api