update content

This commit is contained in:
Sorawit 2024-11-25 12:32:18 +07:00
parent 289e965ba5
commit b4fa5180b0

View file

@ -311,7 +311,7 @@ docker network create [network_name] # สร้างเน็ตเวิร
# การใช้งานไฟล์ Docker Compose # การใช้งานไฟล์ Docker Compose
## Docker Compose File คืออะไร? ## Docker Compose File คืออะไร?
**Docker Compose File** เป็นไฟล์ที่มีรูปแบบเป็น YAML (มักมีชื่อไฟล์ docker-compose.yml) ซึ่งใช้สำหรับการกำหนดค่าและจัดการการทำงานของ **หลายคอนเทนเนอร์** ในโปรเจกต์เดียวกัน ช่วยให้นักพัฒนาสามารถกำหนดบริการต่างๆ ที่คอนเทนเนอร์จะต้องรัน เช่น ฐานข้อมูล เว็บเซิร์ฟเวอร์ และบริการอื่นๆ ได้ในที่เดียว **Docker Compose File** เป็นไฟล์ที่มีรูปแบบเป็น YAML (มักมีชื่อไฟล์ docker-compose.yml หรือ compose.yaml) ซึ่งใช้สำหรับการกำหนดค่าและจัดการการทำงานของ **หลายคอนเทนเนอร์** ในโปรเจกต์เดียวกัน ช่วยให้นักพัฒนาสามารถกำหนดบริการต่างๆ ที่คอนเทนเนอร์จะต้องรัน เช่น ฐานข้อมูล เว็บเซิร์ฟเวอร์ และบริการอื่นๆ ได้ในที่เดียว
## Docker Compose File มีไว้ทำไม? ## Docker Compose File มีไว้ทำไม?
1. จัดการบริการหลายตัวพร้อมกัน 1. จัดการบริการหลายตัวพร้อมกัน
@ -323,7 +323,7 @@ docker network create [network_name] # สร้างเน็ตเวิร
3. กำหนดค่าที่ซับซ้อน 3. กำหนดค่าที่ซับซ้อน
สามารถกำหนดค่าเครือข่าย, การเชื่อมโยงคอนเทนเนอร์, พอร์ต, Volume, และ Environment Variable ได้ในไฟล์เดียว สามารถกำหนดค่าเครือข่าย, การเชื่อมโยงคอนเทนเนอร์, พอร์ต, Volume, และ Environment Variable ได้ในไฟล์เดียว
4. ทำให้การพกพาโปรเจกต์ง่ายขึ้น 4. ทำให้การพกพาและย้ายโปรเจกต์ง่ายขึ้น
แชร์ docker-compose.yml ไฟล์ให้ผู้อื่นเพื่อสร้างสภาพแวดล้อมที่เหมือนกันได้อย่างง่ายดาย แชร์ docker-compose.yml ไฟล์ให้ผู้อื่นเพื่อสร้างสภาพแวดล้อมที่เหมือนกันได้อย่างง่ายดาย
## Docker Compose File ใช้งานเพื่ออะไร? ## Docker Compose File ใช้งานเพื่ออะไร?
@ -449,7 +449,7 @@ plugin_attr:
port: 9091 port: 9091
``` ```
apisix/compose.yaml จะมีสอง service ตัว apisix จะเป็นโปรแกรมหลัก ส่วน etcd ฐานข้อมูลแบบกระจายตัว ใช้สำหรับเก็บการตั้งค่าของ apisix apisix/compose.yaml จะมีสอง service ตัว apisix จะเป็นโปรแกรมหลัก ส่วน etcd ฐานข้อมูลแบบกระจายตัว ใช้สำหรับเก็บการตั้งค่าของ apisix เน็ตเวิร์ก apisix จะเป็นการสื่อสารระหว่างสองเซอร์วิสเท่านั้น ส่วนเน็ตเวิร์ก hrms จะเป็นการสื่อสารระหว่าง apisix กับโปรแกรมต่างๆของระบบ
```yaml ```yaml
services: services:
@ -534,8 +534,10 @@ curl https://bma-hrms-id.bangkok.go.th -vvv
- **Frappet EDM** ใช้สำหรับจัดการเอกสารที่ปลอดภัยรองรับโหลดจำนวนมากได้ จะมีระบบย่อยเบื้องหลังหลายตัว (bmahrms-edm,bmahrms-elasticsearch,bmahrms-kibana,bmahrms-mq) - **Frappet EDM** ใช้สำหรับจัดการเอกสารที่ปลอดภัยรองรับโหลดจำนวนมากได้ จะมีระบบย่อยเบื้องหลังหลายตัว (bmahrms-edm,bmahrms-elasticsearch,bmahrms-kibana,bmahrms-mq)
docker/bmahrms-service/service.env docker/bmahrms-service/service.env
การตั้งค่าและรหัสผ่านของคอนเทนเนอร์ผ่านตัวแปรแวดล้อม สามารถทำแต่ละ server กำหนดในไฟล์คอมโพส หรือแยกออกมาเป็นไฟล์เพื่อใช้ร่วมกันหลาย Service ก็ได้ ในตัวอย่างนี้จะใช้ ไฟล์ service.env การตั้งค่าและรหัสผ่านของคอนเทนเนอร์ผ่านตัวแปรแวดล้อมทำได้สอบแบบ
ให้แก้ตัวแปรซึ่งเป็นระหัสผ่านให้เหมาะสม KEYCLOAK_ADMIN_PASSWORD, KC_DB_PASSWORD, POSTGRES_PASSWORD, MINIO_ROOT_PASSWORD RABBITMQ_DEFAULT_PASS, MYSQL_ROOT_PASSWORD, MYSQL_PASSWORD - ทำแต่ละ services.service_name.environments ในไฟล์คอมโพส
- แยกออกมาเป็นไฟล์เพื่อใช้ร่วมกันหลาย Service ก็ได้ ในตัวอย่างนี้จะใช้ ไฟล์ service.env
ให้แก้ตัวแปรให้เหมาะสม KEYCLOAK_ADMIN_PASSWORD, KC_DB_PASSWORD, POSTGRES_PASSWORD, MINIO_ROOT_PASSWORD RABBITMQ_DEFAULT_PASS, MYSQL_ROOT_PASSWORD, MYSQL_PASSWORD
``` ```
# Generic # Generic
TZ=Asia/Bangkok TZ=Asia/Bangkok
@ -582,7 +584,9 @@ REDIS_PORT=6379
REDIS_DATABASES=16 REDIS_DATABASES=16
``` ```
docker/bmahrms-service/compose.yaml ให้แก้ค่า PUBLIC_KEY MINIO_ACCESS_KEY,MINIO_SECRET_KEY, ipaddress_bma_hrms_id ให้เหมาะสม 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 ให้เหมาะสม
```yaml ```yaml
networks: networks:
@ -737,7 +741,7 @@ services:
- hrms - hrms
``` ```
รันคำสั่งดังนี้ในตัวอย่างเรียกใช้งาน Keycloak จะใช้ 2 service ตัวอย่างนี้จะเรียกใช้ฐานข้อมูลแล้วค่อยเรียกใช้โปรแกรม keycloak รันคำสั่งดังนี้ในตัวอย่างเรียกใช้งานเฉพาะ Keycloak จะใช้ 2 service ตัวอย่างนี้จะเรียกใช้ฐานข้อมูลแล้วค่อยเรียกใช้โปรแกรม keycloak
```sh ```sh
docker compose up -d bmahrms-postgres docker compose up -d bmahrms-postgres
@ -1257,11 +1261,13 @@ services:
## Configuration ## Configuration
การตั้งค่าเฉพาะของแต่ละ service และการตั้งค่า route การตั้งค่า route ส่วนใหญ่จะทำคล้ายๆกัน ส่วนที่เป็น Frontend จะเป็นการเซ็ตโดเมน(URL)ของแต่ละโปรแกรม ส่วนที่เป็น Backend จะเป็นการรวมหลาย backend เข้าในโดเมนเดียวกันแต่อยู่คนละ Subfolder ซึ่งเป็นการรวม Microservice เข้าด้วยกัน การตั้งค่าเฉพาะของแต่ละ service มีสองส่วน
- เป็นการตั้งค่าเฉพาะโปรแกรมแตกต่างกันไปตามโปรแกรม
- ตั้งค่า route สำหรับ โดเมนต่างๆ(สำหรับ Frontend) และ Microservice (เป็นการรวมหลาย backend เข้าในโดเมนเดียวกันแต่อยู่คนละ Subfolder)
### Keycloak (bmahrms-id) ### Keycloak (bmahrms-id)
ใช้สำหรับการ login ในระบบ (Identity Server) การสือสารหลัง API Gateway จะเป็น https แบบ self-signed ใช้สำหรับการ login ในระบบ (Identity Server) เพื่อความปลอดภัยการสื่อสารเฉพาะภายใน จะเป็น https จะสร้าง self-signed certificate ขึ้นมาตัวอย่างนี้มีอายุ 10 ปี
```sh ```sh
cd bmahrms-service/keycloak_config cd bmahrms-service/keycloak_config
@ -1291,7 +1297,7 @@ curl "http://127.0.0.1:9180/apisix/admin/routes" \
}' }'
``` ```
### Portainer () ### Portainer (bmahrms-portainer)
เป็นโปรแกรมสำหรับบริหารจัดการ container สามารถสิ่งเปิดปิดแก้ไขการทำงานของคอนเทนเนอร์ได้ เฉพาะผู้ดูแลระดับสูงถึงจะเข้าใช้งานส่วนนี้ เป็นโปรแกรมสำหรับบริหารจัดการ container สามารถสิ่งเปิดปิดแก้ไขการทำงานของคอนเทนเนอร์ได้ เฉพาะผู้ดูแลระดับสูงถึงจะเข้าใช้งานส่วนนี้
@ -1320,7 +1326,7 @@ init_mysql/\*.sql เป็นที่เก็บ SQL Script สำหรั
### Report Server ### Report Server
เป็น Microservice ใช้สำหรับการออกรายงาน ไม่จำเป็นต้องมี domain ของตัวเอง ให้เป็น path ในโดเมนที่มีอยู่ได้ ให้นำไฟล์ต้นแบบซึ่งสร้างจาก MS Word และ Excel มาไว้ที่โฟลเดอร์นี้ เป็น Microservice ใช้สำหรับการออกรายงาน ไม่จำเป็นต้องมี domain ของตัวเอง ให้เป็น path ในโดเมนที่มีอยู่ได้ ให้นำไฟล์ต้นแบบซึ่งสร้างจาก MS Word และ Excel มาไว้ที่โฟลเดอร์นี้
report-server-template/docx/_.docx, report-server-template/xlsx/_.xlsx report-server-template/docx/files.docx, report-server-template/xlsx/files.xlsx
```sh ```sh
curl "http://127.0.0.1:9180/apisix/admin/routes" \ curl "http://127.0.0.1:9180/apisix/admin/routes" \
@ -1342,9 +1348,10 @@ curl "http://127.0.0.1:9180/apisix/admin/routes" \
Object Storage ใช้เพื่อเก็บไฟล์ของระบบถูกใช้โดย HRMS และ EDM Object Storage ใช้เพื่อเก็บไฟล์ของระบบถูกใช้โดย HRMS และ EDM
Route จะมีส่วน API กับ console การทำ route จะให้ console อยู่ใต้ subfoler https://domain/console Route จะมีส่วน API กับ console การทำ route จะให้ console อยู่ใต้ subfoler https://domain/console
ในการติดตั้งบน production อาจจะไม่ได้อยู่ใน node เดียวกับ hrms และ apisix ดังนั้นควรอ้างเป็นโดเมนเต็มแทน ในการติดตั้งบน production อาจจะไม่ได้อยู่ใน node เดียวกับ hrms และ apisix ดังนั้นควรอ้างเป็นชื่อโดเมนเต็มแทน
```sh ```sh
# bma-hrms-s3.bangkok.go.th
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 ' -H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{ {
@ -1360,7 +1367,7 @@ curl "http://127.0.0.1:9180/apisix/admin/routes" \
}' }'
# test # test
curl -k -I https://bma-hrms-s3.bangkok.go.th/minio/health/live 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" \ curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H "X-API-KEY: put_admin_api_key_here" -X PUT -d ' -H "X-API-KEY: put_admin_api_key_here" -X PUT -d '
{ {
@ -1437,7 +1444,7 @@ curl "http://127.0.0.1:9180/apisix/admin/routes" \
``` ```
Kibana Route Kibana Route
เป็น UI สำหรับ Elasticsearch สามารถใช้แบบ HTTP ตรงๆได้ผ่าน VPN ถ้า โดยทั่วไปใช้ผ่านเน็ตเวิร์กภายใน API gateway จะช่วยทำ Basic Authentication และ https ให้ควรใช้ ใช้ภายในเสำหรับนักพัฒนาเท่านั้น เป็น UI สำหรับ Elasticsearch สำหรับนักพัฒนามาตรวจสอบค่า ควรใช้จาก VPN และเน็ตเวิร์กภายในเท่านั้น เพื่อความปลอดภัย ให้ API gateway จะช่วยทำ Basic Authentication และ https ให้ ควรใช้ภายในเสำหรับนักพัฒนาเท่านั้น
```sh ```sh
curl "http://127.0.0.1:9180/apisix/admin/routes" \ curl "http://127.0.0.1:9180/apisix/admin/routes" \