Update Route from DC

This commit is contained in:
oom 2025-01-22 22:26:42 +07:00
parent 87cf07dd93
commit e209d932fe

View file

@ -521,72 +521,128 @@ curl http://127.0.0.1:9180/apisix/admin/ssls/1 \
curl https://bma-hrms-id.bangkok.go.th -vvv
```
### 3rd Party Service (bmahrms-service)
### 3rd Party(bmahrms-service)
โปรแกรมกลุ่มนี้ที่พัฒนาโดย 3rd Party หรือ Frappet ไม่ได้มีฟังก์ชันงานเจาะจงสำหรับ HRMS ถูกใช้โดยโปรแกรมของ HRMS(เช่นฐานข้อมูล,เว็บเซิร์ฟเวอร์ ฯลฯ) จะแยกมาใส่โฟลเดอร์ bmahrms-service
การติดตั้งให้นำ compose.yaml และ คอนฟิกมาใส่โฟลเดอร์ bmahrms-service ให้เรียบร้อยก่อนใช้งาน สร้างโฟลเดอร์แต่ละ servie ทำดังนี้
โปรแกรมกลุ่มนี้ที่พัฒนาโดย 3rd Party หรือ Frappet ไม่ได้มีฟังก์ชันงานเจาะจงสำหรับ HRMS ถูกใช้โดยโปรแกรมของ HRMS(เช่นฐานข้อมูล,เว็บเซิร์ฟเวอร์ ฯลฯ) การตั้งค่าจะแยกมาใส่โฟลเดอร์ bmahrms-service
การติดตั้งให้นำ compose.yaml และ คอนฟิกมาใส่โฟลเดอร์นี้ให้เรียบร้อยก่อนใช้งาน โปรแกรมมีรายการดังนี้ดังนี้
- **Keycloak (bmahrms-postgres bmahrms-id)** เซิร์ฟเวอร์สำหรับจัดการยูสเซอร์และการ Authentication ในระบบ
- **MySQL (bmahrms-mysql)** เป็นฐานข้อมูลของระบบ
- **MiniO (bmahrms-s3)** เป็น Object Storage แบบเดียวกับ AWS s3 ใช้สำหรับเก็บไฟล์ มีประสิทธิ์ภาพสูงสามารถรับโหลดหนัก มีความปลอดภัยกว่าเก็บด้วยระบบไฟล์ทั่วไป สามารถขยายเพิ่มได้ในอนาคต ถูกใช้ในหลายระบบที่ต้องการเก็บไฟล์
- **Windmill** รันเวิร์กโฟลว์การทำงานอัตโนมัติจากสคริปต์ หลักๆใช้เพื่อรันตัวสำรองข้อมูล
- **Portainer (bmahrms-portainer)** ระบบจัดการ container มี UI ใช้งานง่าย สามารถใช้แทนคำสั่ง docker ได้
#### รายการโปรแกรม 3rd Party
- **RabbitMQ (bmahrms-mq)** ระบบจัดคิวในการสื่อสารใน Microservice มีความน่าเชื่อถือสูง สามารถรับโหลดหนักๆในช่วงเวลาสั้นๆได้ โดยไม่ต้องเพิ่มทรัพยากรโดยไม่จำเป็น เช่นระบบการลงเวลา
- **Frappet Report Server (bmahrms-report-server)** ใช้สำหรับสร้างรายงานจากเอกสารต้นแบบ ออกแบบเองได้ในรูปของ ไฟล์ docx และ xlsx เอกสารที่สร้างสามารถส่งออกเป็น docx, xlsx, pdf ได้
- **Frappet EDM** ใช้สำหรับจัดการเอกสารที่ปลอดภัยรองรับโหลดจำนวนมากได้ จะมีระบบย่อยเบื้องหลังหลายตัว (bmahrms-edm,bmahrms-elasticsearch,bmahrms-kibana,bmahrms-mq)
- **Keycloak (bmahrms-id)**
ใช้สำหรับการ login ในระบบ (Identity Server) เพื่อความปลอดภัยการสื่อสารเฉพาะภายใน จะเป็น https จะสร้าง self-signed certificate ขึ้นมาตัวอย่างนี้มีอายุ 10 ปี
docker/bmahrms-service/service.env
การตั้งค่าและรหัสผ่านของคอนเทนเนอร์ผ่านตัวแปรแวดล้อมทำได้สอบแบบ
- ทำแต่ละ services.service_name.environments ในไฟล์คอมโพส
- แยกออกมาเป็นไฟล์เพื่อใช้ร่วมกันหลาย Service ก็ได้ ในตัวอย่างนี้จะใช้ ไฟล์ service.env
```sh
cd bmahrms-service/keycloak_config
openssl genrsa -out keycloak.key 2048
openssl req -new -x509 -sha256 -key keycloak.key -out keycloak.crt -days 3650
cp keycloak.key keycloak.pem
cat keycloak.crt >> keycloak.pem
cd ..
```
- **Portainer (bmahrms-portainer)**
ระบบจัดการ container มี UI ใช้งานง่าย สามารถสั่ง/เปิด/ปิด/แก้ไข การทำงานของคอนเทนเนอร์ได้ แทนการใช้คำสั่ง docker เฉพาะผู้ดูแลระดับสูงถึงจะเข้าใช้งานส่วนนี้
- **MySQL (bmahrms-postgres)**
เป็นฐานข้อมูลของระบบ ในโฟลเดอร์ init_mysql/\*.sql เป็นที่เก็บ SQL Script สำหรับสร้างฐานข้อมูลตั้งต้น
จะถูกเรียกใช้ครั้งแรกตอนเริ่มฐานข้อมูลเป็นข้อมูลตั้งต้นของระบบ
เนื่องจากไฟล์มีขนาดใหญ่หลายบรรทัดจะไม่ใส่ในเอกสารนี้
- **Frappet Report Server (bmahrms-report-server)**
เป็น Microservice ใช้สำหรับการออกรายงาน ไม่จำเป็นต้องมี domain ของตัวเอง ให้เป็น path ในโดเมนที่มีอยู่ได้ ให้นำไฟล์ต้นแบบซึ่งสร้างจาก MS Word และ Excel มาไว้ที่โฟลเดอร์นี้ report-server-template/docx/files.docx, report-server-template/xlsx/files.xlsx
- **MiniO (bmahrms-s3)**
เป็น Object Storage แบบเดียวกับ AWS s3 มีประสิทธิ์ภาพสูงสามารถรับโหลดได้หนักและ มีความปลอดภัยกว่าเก็บด้วยระบบไฟล์ทั่วไป สามารถขยายเพิ่มได้ในอนาคต ถูกใช้ในหลายระบบที่ต้องการเก็บไฟล์ Route จะมีส่วน API กับ console การทำ route จะให้ console อยู่ใต้ subfoler https://domain/console
ในการติดตั้งบน production อาจจะไม่ได้อยู่ใน node เดียวกับ hrms และ apisix ดังนั้นควรอ้างเป็นชื่อโดเมนเต็มแทน
- **Windmill** รันเวิร์กโฟลว์การทำงานอัตโนมัติจากสคริปต์ หลักๆใช้เพื่อรันตัวสำรองข้อมูล
- **Frappet EDM (Enterprise Document Management)**
เป็นระบบจัดการเอกสารภายใน ประกอบไปด้วยโปรแกรมหลายตัว
- EDM ตัวโปรแกรมหลัก
- Elasticsearch ฐานข้อมูลดัชนีเอกสารเพื่อการค้นหาภาษาไทยแบบซับซ้อน อ้างผ่าน IP/PORT ไม่มี Route สู่ภายนอก
- Kibana ใน WebUI การจัดการ Elasticsearch มี Route ใช้เฉพาะนักพัฒนา
- RabbitMQ จัดการคิวงาน มี Route ใช้เฉพาะนักพัฒนา
- MiniO ใช้เพื่อเก็บไฟล์ต่างๆ มีหน้า console ใช้เฉพาะนักพัฒนา
นอกเหนือจาก compose.yaml มีไฟล์คอนฟิกสองไฟล์
```sh
nano edm_config/keycloak.json
nano elasticsearch_config/config.yaml
```
edm_config/keycloak.json
```json
{
"realm": "EDM",
"auth-server-url": "https://bma-hrms-id.bangkok.go.th/",
"ssl-required": "external",
"resource": "EDM-V1",
"public-client": true,
"confidential-port": 0
}
```
elasticsearch_config/config.yaml
```yaml
network.host: 0.0.0.0
s3.client.default.endpoint: bma-hrms-s3.bangkok.go.th
```
- **Kibana**
เป็น UI สำหรับ Elasticsearch สำหรับนักพัฒนามาตรวจสอบค่า ควรใช้จาก VPN และเน็ตเวิร์กภายในเท่านั้น เพื่อความปลอดภัย จะใช้ API gateway ทำ Basic Authentication และ https สำหรับนักพัฒนาเท่านั้น ใช้ผ่าน VPN หรือเน็ตเวิร์กภายในเท่านั้น
#### ตัวแปรแวดล้อม 3rd Party service
การตั้งค่าและรหัสผ่านของคอนเทนเนอร์ผ่านตัวแปรแวดล้อมทำได้สองแบบ
- ทำแต่ละ service ใน compose.yaml
- แยกออกมาเป็นไฟล์เพื่อใช้ร่วมกันหลาย Service ก็ได้ ในตัวอย่างนี้จะใช้ ไฟล์ service.env
ให้แก้ตัวแปรให้เหมาะสม KEYCLOAK_ADMIN_PASSWORD, KC_DB_PASSWORD, POSTGRES_PASSWORD, MINIO_ROOT_PASSWORD RABBITMQ_DEFAULT_PASS, MYSQL_ROOT_PASSWORD, MYSQL_PASSWORD
```
# Generic
TZ=Asia/Bangkok
# Keycloak
KEYCLOAK_ADMIN=admin
KEYCLOAK_ADMIN_PASSWORD=put_keycloak_admin_password_here
# Keycloak
KC_DB=postgres
#KC_DB_URL=jdbc:postgresql://postgres:5432/keycloak
KC_DB_URL_HOST=bmahrms-postgres
KC_DB_URL_DATABASE=keycloak
KC_DB_PASSWORD=put_keycloak_db_password_here
KC_DB_USERNAME=keycloak
KC_DB_SCHEMA=public
**docker/bmahrms-service/service.env**
```
# Generic
TZ=Asia/Bangkok
# Keycloak
KEYCLOAK_ADMIN=admin
KEYCLOAK_ADMIN_PASSWORD=put_keycloak_admin_password_here
# PostgreSQL (keycloak)
POSTGRES_DB=keycloak
POSTGRES_USER=keycloak
POSTGRES_PASSWORD=put_keycloak_db_password_here
# Keycloak
KC_DB=postgres
#KC_DB_URL=jdbc:postgresql://postgres:5432/keycloak
KC_DB_URL_HOST=bmahrms-postgres
KC_DB_URL_DATABASE=keycloak
KC_DB_PASSWORD=put_keycloak_db_password_here
KC_DB_USERNAME=keycloak
KC_DB_SCHEMA=public
# MiniO
MINIO_ROOT_USER=admin
MINIO_ROOT_PASSWORD=put_minio_admin_password_here
MINIO_BROWSER_REDIRECT_URL=https://bmahrms-s3.bangkok.go.th/console/
# PostgreSQL (keycloak)
POSTGRES_DB=keycloak
POSTGRES_USER=keycloak
POSTGRES_PASSWORD=put_keycloak_db_password_here
# RabbitMQ
RABBITMQ_DEFAULT_USER=admin
RABBITMQ_DEFAULT_PASS=put_rabbitmq_admin_password_here
# MiniO
MINIO_ROOT_USER=admin
MINIO_ROOT_PASSWORD=put_minio_admin_password_here
MINIO_BROWSER_REDIRECT_URL=https://bmahrms-s3.bangkok.go.th/console/
# MySQL
MYSQL_ROOT_PASSWORD=put_mysql_admin_password_here
MYSQL_DATABASE=bma_ehr
MYSQL_USER=frappet
MYSQL_PASSWORD=put_mysql_db_password_here
# RabbitMQ
RABBITMQ_DEFAULT_USER=admin
RABBITMQ_DEFAULT_PASS=put_rabbitmq_admin_password_here
# Elasticsearch & Kibana
xpack.security.enabled=false
discovery.type=single-node
ELASTICSEARCH_HOSTS=http://bmahrms-elasticsearch:9200
# MySQL
MYSQL_ROOT_PASSWORD=put_mysql_admin_password_here
MYSQL_DATABASE=bma_ehr
MYSQL_USER=frappet
MYSQL_PASSWORD=put_mysql_db_password_here
# REDIS
REDIS_PORT=6379
REDIS_DATABASES=16
```
# Elasticsearch & Kibana
xpack.security.enabled=false
discovery.type=single-node
ELASTICSEARCH_HOSTS=http://bmahrms-elasticsearch:9200
docker/bmahrms-service/compose.yaml จะใช้ docker volume (keycloak_data, minio_data ฯลฯ) แทน file system (ตัวอย่างก่อนหน้า) เพื่อประสิทธิ์ภาพสูงกว่าในการเก็บขอมูลที่มีการเขียนอ่านบ่อย
# REDIS
REDIS_PORT=6379
REDIS_DATABASES=16
```
#### compose.yaml ของ 3rd Party service
docker/bmahrms-service/compose.yaml จะใช้ docker volume (keycloak_data, minio_data ฯลฯ) แทน file system (ตัวอย่างก่อนหน้า) เพื่อประสิทธิ์ภาพสูงกว่าในการเก็บข้อมูลที่มีการเขียนอ่านบ่อย
ให้แก้ค่า PUBLIC_KEY MINIO_ACCESS_KEY,MINIO_SECRET_KEY, ipaddress_bma_hrms_id ให้เหมาะสม
@ -750,7 +806,136 @@ docker compose up -d bmahrms-postgres
docker compose up -d bmahrms-id
```
### BMA HRMS Service
#### Route ของ 3rd Service
```sh
# Keycloak Route
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "bmahrms-id",
"host": "bma-hrms-id.bangkok.go.th",
"uri": "/*",
"upstream": {
"scheme": "https",
"type": "roundrobin",
"nodes": {
"bmahrms-id:8443": 1
}
}
}'
# Portainer route
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "bmahrms-portainer",
"host": "bmahrms-portainer.bangkok.go.th",
"uri": "/*",
"upstream": {
"type": "roundrobin",
"nodes": {
"bmahrms-portainer:9000": 1
}
}
}'
# Report Server Route
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "bmahrms-report-server",
"hosts": ["bma-hrms.bangkok.go.th","bma-hrms-user.bangkok.go.th"],
"uris": ["/api/v1/report-template/*"],
"upstream": {
"type": "roundrobin",
"nodes": {
"bmahrms-report-server:80": 1
}
}
}'
# MiniO Rote
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "bmahrms-s3",
"host": "bma-hrms-s3.bangkok.go.th",
"uri": "/*",
"upstream": {
"type": "roundrobin",
"nodes": {
"bmahrms-s3:9000": 1
}
}
}'
# Health test
curl -k -I https://bma-hrms-s3.bangkok.go.th/minio/health/live
# MiniO Console Route
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "bmahrms-s3-console",
"host": "bma-hrms-s3.bangkok.go.th",
"uri": "/console/*",
"enable_websocket": true,
"plugins": {
"proxy-rewrite": {
"regex_uri": ["^/console/(.*)","/$1"]
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"bmahrms-s3:9001": 1
}
}
}'
# EDM Route
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "bmahrms-edm",
"host": "bma-hrms-edm.bangkok.go.th",
"uri": "/*",
"upstream": {
"type": "roundrobin",
"nodes": {
"bmahrms-edm:80": 1
}
}
}'
# Kibana Route
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "bmahrms-kibana",
"host": "bma-hrms-kibana.bangkok.go.th",
"uri": "/*",
"plugins": {
"basic-auth": {}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"bmahrms-kibana:5601": 1
}
}
}'
# Kibana Basic Authentication
curl http://127.0.0.1:9180/apisix/admin/consumers \
-H 'X-API-KEY: put_admin_api_key_here' -X PUT -d '
{
"username": "admin",
"plugins": {
"basic-auth": {
"username": "admin",
"password": "kibana-password-here"
}
}
}'
```
### BMA HRMS
ระบบที่พัฒนาเพื่อ HRMS โดยเฉพาะ จะมี 3 ไฟล์
@ -791,8 +976,11 @@ docker compose up -d bmahrms-id
- bmahrms-development
- bmahrms-kpi
docker/bmahrms/fe.env แก้ตัวแปร VITE_CLIENTSECRET_KEYCLOAK KC_SERVICE_ACCOUNT_SECRET
#### ตัวแปรแวดล้อมของ BMA HRMS (Frontend)
**docker/bmahrms/fe.env**
แก้ตัวแปร VITE_CLIENTSECRET_KEYCLOAK KC_SERVICE_ACCOUNT_SECRET
```
# Frontend Global
TZ=Asia/Bangkok
@ -816,8 +1004,10 @@ KC_SERVICE_ACCOUNT_CLIENT_ID=bma-ehr-dev
KC_SERVICE_ACCOUNT_SECRET=put_service_account_secret_here
MANAGEMENT_ROLE=storage_management
```
#### ตัวแปรแวดล้อมของ BMA HRMS (Backendend)
**docker/bmahrms/be.env**
docker/bmahrms/be.env แก้ค่าของ DB_PASSWORD,AUTH_PUBLIC_KEY, MINIO_KEY, MINIO_SECRET, STORAGE_SECRET,KC_SERVICE_ACCOUNT_SECRET,REDIS_HOST,KEYCLOAK_KEY,AUTH_PUBLIC_KEY, PUBLIC_KEY
แก้ค่าของ DB_PASSWORD,AUTH_PUBLIC_KEY, MINIO_KEY, MINIO_SECRET, STORAGE_SECRET,KC_SERVICE_ACCOUNT_SECRET,REDIS_HOST,KEYCLOAK_KEY,AUTH_PUBLIC_KEY, PUBLIC_KEY
ค่าของ public key ของ keycloak ให้สำเนาจากส่วนนี้
@ -873,8 +1063,11 @@ ELASTICSEARCH_PORT=9200
ELASTICSEARCH_INDEX=bma-ehr-log-index
```
docker/bmahrms/compose.yaml
#### compose.yaml ของ BMA HRMS
ใช้สำหรับ Backend และ Frontend
**docker/bmahrms/compose.yaml**
มี Backend และ Frontend
```yaml
networks:
hrms:
@ -1265,24 +1458,17 @@ services:
# End Backend Section
```
## Configuration
#### Route ของ BMA-HRMS frontend
การตั้งค่าเฉพาะของแต่ละ service มีสองส่วน
- เป็นการตั้งค่าเฉพาะโปรแกรม จะแตกต่างกันไปตามโปรแกรม
- ตั้งค่า route สำหรับโดเมนต่างๆ (สำหรับ Frontend) และ Microservice (เป็นการรวมหลาย backend เข้าในโดเมนเดียวกันแต่อยู่คนละ Subfolder)
### BMA-HRMS frontend
โดเมนสำหรับหน้าโปรแกรมจะมีดังนี้
bmahrms.bangkok.go.th,bmahrms-user.bangkok.go.th,bmahrms-admin.bangkok.go.th,bmahrms-checkin.bangkok.go.th,bmahrms-recruiting.bangkok.go.th,bmahrms-exam.bangkok.go.th
จะต้องสร้าง route ให้ตรงกับหน้าที่ใช้งาน
bmahrms.bangkok.go.th,bmahrms-user.bangkok.go.th,bmahrms-admin.bangkok.go.th,bmahrms-checkin.bangkok.go.th,bmahrms-recruiting.bangkok.go.th,bmahrms-exam.bangkok.go.th จะต้องสร้าง route ให้ตรงกับหน้าเวปที่ใช้งาน ใช้แค่ methods GET
```sh
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "bmahrms",
"methods": ["GET"],
"host": "bmahrms.bangkok.go.th",
"host": "bma-hrms.bangkok.go.th",
"uri": "/*",
"upstream": {
"type": "roundrobin",
@ -1297,7 +1483,7 @@ curl "http://127.0.0.1:9180/apisix/admin/routes" \
{
"id": "bmahrms-user",
"methods": ["GET"],
"host": "bmahrms-user.bangkok.go.th",
"host": "bma-hrms-user.bangkok.go.th",
"uri": "/*",
"upstream": {
"type": "roundrobin",
@ -1311,7 +1497,7 @@ curl "http://127.0.0.1:9180/apisix/admin/routes" \
{
"id": "bmahrms-admin",
"methods": ["GET"],
"host": "bmahrms-admin.bangkok.go.th",
"host": "bma-hrms-admin.bangkok.go.th",
"uri": "/*",
"upstream": {
"type": "roundrobin",
@ -1325,7 +1511,7 @@ curl "http://127.0.0.1:9180/apisix/admin/routes" \
{
"id": "bmahrms-checkin",
"methods": ["GET"],
"host": "bmahrms-checkin.bangkok.go.th",
"host": "bma-hrms-checkin.bangkok.go.th",
"uri": "/*",
"upstream": {
"type": "roundrobin",
@ -1337,7 +1523,7 @@ curl "http://127.0.0.1:9180/apisix/admin/routes" \
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "bmahrms-recruiting",
"id": "bma-hrms-recruiting",
"methods": ["GET"],
"host": "bmahrms-recruiting.bangkok.go.th",
"uri": "/*",
@ -1348,237 +1534,320 @@ curl "http://127.0.0.1:9180/apisix/admin/routes" \
}
}
}'
```
Faq and Manual เป็น Micro Frontend เป็นพาร์ทย่อยของโดเมนหลัก
- Faq: /faq
- Manual: /manual
```sh
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "bmahrms-exam",
"methods": ["GET"],
"host": "bmahrms-exam.bangkok.go.th",
"uri": "/*",
"upstream": {
"type": "roundrobin",
"nodes": {
"bmahrms-exam:80": 1
}
}
}'
```
### BMA-HRMS backend
### Keycloak (bmahrms-id)
ใช้สำหรับการ login ในระบบ (Identity Server) เพื่อความปลอดภัยการสื่อสารเฉพาะภายใน จะเป็น https จะสร้าง self-signed certificate ขึ้นมาตัวอย่างนี้มีอายุ 10 ปี
```sh
cd bmahrms-service/keycloak_config
openssl genrsa -out keycloak.key 2048
openssl req -new -x509 -sha256 -key keycloak.key -out keycloak.crt -days 3650
cp keycloak.key keycloak.pem
cat keycloak.crt >> keycloak.pem
cd ..
```
Keycloak Route
```sh
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "bmahrms-id",
"host": "bma-hrms-id.bangkok.go.th",
"uri": "/*",
"upstream": {
"scheme": "https",
"type": "roundrobin",
"nodes": {
"bmahrms-id:8443": 1
}
}
}'
```
### Portainer (bmahrms-portainer)
เป็นโปรแกรมสำหรับบริหารจัดการ container สามารถสั่งเปิดปิดแก้ไขการทำงานของคอนเทนเนอร์ได้ เฉพาะผู้ดูแลระดับสูงถึงจะเข้าใช้งานส่วนนี้
```sh
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f2" -X PUT -d '
{
"id": "bmahrms-portainer",
"host": "bmahrms-portainer.bangkok.go.th",
"uri": "/*",
"upstream": {
"type": "roundrobin",
"nodes": {
"bmahrms-portainer:9000": 1
}
}
}'
```
### MySQL (bmahrms-postgres)
init_mysql/\*.sql เป็นที่เก็บ SQL Script สำหรับสร้างฐานข้อมูลตั้งต้น
จะถูกเรียกใช้ครั้งแรกตอนเริ่มฐานข้อมูลเป็นข้อมูลตั้งต้นของระบบ
เนื่องจากไฟล์มีขนาดใหญ่หลายบรรทัดจะไม่ใส่ในเอกสารนี้
### Report Server
เป็น Microservice ใช้สำหรับการออกรายงาน ไม่จำเป็นต้องมี domain ของตัวเอง ให้เป็น path ในโดเมนที่มีอยู่ได้ ให้นำไฟล์ต้นแบบซึ่งสร้างจาก MS Word และ Excel มาไว้ที่โฟลเดอร์นี้
report-server-template/docx/files.docx, report-server-template/xlsx/files.xlsx
```sh
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "bmahrms-report-server",
"hosts": ["bma-hrms.bangkok.go.th","bma-hrms-user.bangkok.go.th"],
"uris": ["/api/v1/report-template/*"],
"upstream": {
"type": "roundrobin",
"nodes": {
"bmahrms-report-server:80": 1
}
}
}'
```
### MiniO
Object Storage ใช้เพื่อเก็บไฟล์ของระบบถูกใช้โดย HRMS และ EDM
Route จะมีส่วน API กับ console การทำ route จะให้ console อยู่ใต้ subfoler https://domain/console
ในการติดตั้งบน production อาจจะไม่ได้อยู่ใน node เดียวกับ hrms และ apisix ดังนั้นควรอ้างเป็นชื่อโดเมนเต็มแทน
```sh
# bma-hrms-s3.bangkok.go.th
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "bmahrms-s3",
"host": "bma-hrms-s3.bangkok.go.th",
"uri": "/*",
"upstream": {
"type": "roundrobin",
"nodes": {
"bmahrms-s3:9000": 1
}
}
}'
# test
curl -k -I https://bma-hrms-s3.bangkok.go.th/minio/health/live
# bma-hrms-s3.bangkok.go.th/console
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "bmahrms-s3-console",
"host": "bma-hrms-s3.bangkok.go.th",
"uri": "/console/*",
"enable_websocket": true,
"id": "bmahrms-faq",
"host": "bma-hrms.bangkok.go.th",
"uri": "/faq/*",
"plugins": {
"proxy-rewrite": {
"regex_uri": ["^/console/(.*)","/$1"]
"regex_uri": ["^/faq/(.*)","/$1"]
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"bmahrms-s3:9001": 1
"bmahrms-faq:80": 1
}
}
}'
```
### EDM (Enterprixe Document Management)
เป็นระบบจัดการเอกสารภายใน ประกอบไปด้วยโปรแกรมหลายตัว
- EDM ตัวโปรแกรมหลัก
- Elasticsearch ฐานข้อมูลดัชนีเอกสารเพื่อการค้นหาภาษาไทยแบบซับซ้อน อ้างผ่าน IP/PORT ไม่มี Route สู่ภายนอก
- Kibana ใน WebUI การจัดการ Elasticsearch มี Route ใช้เฉพาะนักพัฒนา
- RabbitMQ จัดการคิวงาน มี Route ใช้เฉพาะนักพัฒนา
- MiniO ใช้เพื่อเก็บไฟล์ต่างๆ มีหน้า console ใช้เฉพาะนักพัฒนา
นอกเหนือจาก compose.yaml มีไฟล์คอนฟิกสองไฟล์
```sh
nano edm_config/keycloak.json
nano elasticsearch_config/config.yaml
```
edm_config/keycloak.json
```json
{
"realm": "EDM",
"auth-server-url": "https://bma-hrms-id.bangkok.go.th/",
"ssl-required": "external",
"resource": "EDM-V1",
"public-client": true,
"confidential-port": 0
}
```
elasticsearch_config/config.yaml
```yaml
network.host: 0.0.0.0
s3.client.default.endpoint: bma-hrms-s3.bangkok.go.th
```
EDM Route
```sh
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f2" -X PUT -d '
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "bmahrms-edm",
"host": "bma-hrms-edm.bangkok.go.th",
"uri": "/*",
"id": "bmahrms-manual",
"host": "bma-hrms.bangkok.go.th",
"uri": "/manual/*",
"plugins": {
"proxy-rewrite": {
"regex_uri": ["^/manual/(.*)","/$1"]
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"bmahrms-edm:80": 1
"bmahrms-manual:80": 1
}
}
}'
```
#### Route ของ BMA-HRMS backend
Kibana Route
เป็น UI สำหรับ Elasticsearch สำหรับนักพัฒนามาตรวจสอบค่า ควรใช้จาก VPN และเน็ตเวิร์กภายในเท่านั้น เพื่อความปลอดภัย ให้ API gateway จะช่วยทำ Basic Authentication และ https ให้ ควรใช้ภายในเสำหรับนักพัฒนาเท่านั้น
Route ของ API จะอยู่ในรูปแบบ domain/api/v1/*
```sh
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "bmahrms-kibana",
"host": "bma-hrms-kibana.bangkok.go.th",
"uri": "/*",
"plugins": {
"basic-auth": {}
},
"id": "hrms-backend-org",
"host": "bma-hrms.bangkok.go.th",
"uri": "/api/v1/org/*",
"upstream": {
"type": "roundrobin",
"nodes": {
"bmahrms-kibana:5601": 1
"bmahrms-org:80": 1
}
}
}'
# Basic Authentication
curl http://127.0.0.1:9180/apisix/admin/consumers \
-H 'X-API-KEY: put_admin_api_key_here' -X PUT -d '
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"username": "admin",
"plugins": {
"basic-auth": {
"username": "admin",
"password": "kibana-password-here"
}
"id": "hrms-backend-recruit",
"host": "bma-hrms.bangkok.go.th",
"uri": "/api/v1/recruit/*",
"upstream": {
"type": "roundrobin",
"nodes": {
"bmahrms-recruit:80": 1
}
}
}'
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "hrms-backend-report",
"host": "bma-hrms.bangkok.go.th",
"uri": "/api/v1/report/*",
"upstream": {
"type": "roundrobin",
"nodes": {
"bmahrms-report:80": 1
}
}
}'
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "hrms-backend-insignia",
"host": "bma-hrms.bangkok.go.th",
"uri": "/api/v1/insignia/*",
"upstream": {
"type": "roundrobin",
"nodes": {
"bmahrms-insignia:80": 1
}
}
}'
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "hrms-backend-recruit-exam-cms",
"host": "bma-hrms.bangkok.go.th",
"uri": "/api/v1/cms/*",
"upstream": {
"type": "roundrobin",
"nodes": {
"bmahrms-recruit-exam:80": 1
}
}
}'
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "hrms-backend-recruit-exam-candidate",
"host": "bma-hrms.bangkok.go.th",
"uri": "/api/v1/candidate/*",
"upstream": {
"type": "roundrobin",
"nodes": {
"bmahrms-recruit-exam:80": 1
}
}
}'
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "hrms-backend-org-employee",
"host": "bma-hrms.bangkok.go.th",
"uri": "/api/v1/organization-employee/*",
"upstream": {
"type": "roundrobin",
"nodes": {
"bmahrms-org-employee:80": 1
}
}
}'
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "hrms-backend-placement",
"host": "bma-hrms.bangkok.go.th",
"uri": "/api/v1/placement/*",
"upstream": {
"type": "roundrobin",
"nodes": {
"bmahrms-placement:80": 1
}
}
}'
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "hrms-backend-retirement",
"host": "bma-hrms.bangkok.go.th",
"uri": "/api/v1/retirement/*",
"upstream": {
"type": "roundrobin",
"nodes": {
"bmahrms-retirement:80": 1
}
}
}'
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "hrms-backend-report-v2",
"host": "bma-hrms.bangkok.go.th",
"uri": "/api/v2/report/*",
"upstream": {
"type": "roundrobin",
"nodes": {
"bmahrms-report-v2:80": 1
}
}
}'
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "hrms-backend-probation",
"host": "bma-hrms.bangkok.go.th",
"uri": "/api/v1/probation/*",
"upstream": {
"type": "roundrobin",
"nodes": {
"bmahrms-probation:80": 1
}
}
}'
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "hrms-backend-command",
"host": "bma-hrms.bangkok.go.th",
"uri": "/api/v1/order/*",
"upstream": {
"type": "roundrobin",
"nodes": {
"bmahrms-command:80": 1
}
}
}'
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "hrms-backend-command-message",
"host": "bma-hrms.bangkok.go.th",
"uri": "/api/v1/message/*",
"upstream": {
"type": "roundrobin",
"nodes": {
"bmahrms-command:80": 1
}
}
}'
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "hrms-backend-discipline",
"host": "bma-hrms.bangkok.go.th",
"uri": "/api/v1/discipline/*",
"upstream": {
"type": "roundrobin",
"nodes": {
"bmahrms-discipline:80": 1
}
}
}'
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "hrms-backend-evaluation",
"host": "bma-hrms.bangkok.go.th",
"uri": "/api/v1/evaluation/*",
"upstream": {
"type": "roundrobin",
"nodes": {
"bmahrms-evaluation:80": 1
}
}
}'
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "hrms-backend-leave",
"host": "bma-hrms.bangkok.go.th",
"uri": "/api/v1/leave/*",
"upstream": {
"type": "roundrobin",
"nodes": {
"bmahrms-leave:80": 1
}
}
}'
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "hrms-backend-salary",
"host": "bma-hrms.bangkok.go.th",
"uri": "/api/v1/salary/*",
"upstream": {
"type": "roundrobin",
"nodes": {
"bmahrms-salary:80": 1
}
}
}'
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "hrms-backend-development",
"host": "bma-hrms.bangkok.go.th",
"uri": "/api/v1/development/*",
"upstream": {
"type": "roundrobin",
"nodes": {
"bmahrms-development:80": 1
}
}
}'
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "hrms-backend-kpi",
"host": "bma-hrms.bangkok.go.th",
"uri": "/api/v1/kpi/*",
"upstream": {
"type": "roundrobin",
"nodes": {
"bmahrms-kpi:80": 1
}
}
}'
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{
"id": "hrms-backend-metadata",
"host": "bma-hrms.bangkok.go.th",
"uri": "/api/v1/metadata/*",
"upstream": {
"type": "roundrobin",
"nodes": {
"bmahrms-metadata:80": 1
}
}
}'
```
## บทสรุป