Add diagram
This commit is contained in:
parent
5868a10605
commit
4a1593080d
4 changed files with 37 additions and 32 deletions
|
|
@ -11,7 +11,7 @@
|
|||
ในรูปแบบที่คนทั่วไปสามารถเห็นได้อย่างเช่น Obsidian ที่สามารถเขียน Note เป็น Markdown และแสดงออกมาเหมือนหน้าเว็บ
|
||||
หรือ GitHub MD File ที่สามารถ Preview ผลลัพธ์ ออกมาทางหน้าเว็บได้
|
||||
|
||||
การ Preview มีปัญหาเรื่อง การแสดงรูปภาพ เนื่องจากเมื่อนำไปใช้ในการ แสดงผลบนหน้าเว็บ จะต้องมีการระบุตำแหน่งของ รูปภาพให้เป็น absolute path
|
||||
การ Preview มีปัญหาเรื่อง การแสดงรูปภาพ เนื่องจากเมื่อนำไปadminใช้ในการ แสดงผลบนหน้าเว็บ จะต้องมีการระบุตำแหน่งของ รูปภาพให้เป็น absolute path
|
||||
ไม่สามารถใช้ relative path ได้ทำให้ เมื่อต้องการจัด หรือโยกย้ายตำแหน่งของ ไฟล์ md สามารถทำได้ง่าย และไม่รวมอยู่ในตำแหน่งเดียวกันได้
|
||||
|
||||
หากมีการเพิ่ม หรือลบไฟล์ .md ให้ทำการแก้ไข [public/toc.json](public/toc.json) เพื่อให้ไฟล์นั้นสามารถถูกเรียกใช้ได้
|
||||
|
|
|
|||
|
|
@ -1,9 +1,11 @@
|
|||
# Deploy Document
|
||||
เอกสารสำหรับการติดตั้งระบบของ BMA HRMS โปรแกรมในยุคปัจจุบันจะทำงานบนเทคโนโลยีคอนเทนเนอร์ เพื่อยืดหยุ่นในการทำงาน ตั้งแต่การพัฒนา ทดสอบและ ใช้งานจริง (Production) จำเป็นต้องเข้าใจการทำงาน Docker เสียก่อน เมื่อเข้าใจหลักการทำงานแล้ว ในอนาคตมีบริการเพิ่มเติมเข้ามาก็จะใช้รูปแบบเดียวกันในการตั้งค่า
|
||||
เอกสารสำหรับการติดตั้งระบบของ BMA HRMS โปรแกรมในยุคปัจจุบันจะทำงานบนเทคโนโลยีคอนเทนเนอร์ เพื่อยืดหยุ่นในการทำงาน ตั้งแต่การพัฒนา ทดสอบและ ใช้งานจริง (Production) จำเป็นต้องเข้าใจพื้นฐานการทำงาน Docker เสียก่อน ก็จะสามารถจัดการบริการเพิ่มเติมที่จะเกิดขึ้นอนาคต เนื่องจากการใช้งานเป็นรูปแบบเดียวกัน นอกจากการใช้งานผ่านคำสั่งแล้วสามารถใช้ Portainer ในการจัดการผ่าน Web UI ได้ การติดตั้งจะอยู่ในเอกสารนี้
|
||||
|
||||

|
||||
|
||||
## ติดตั้ง Docker
|
||||
Docker คอนเทนเนอร์สามารถเรียนรู้ ตั้งค่า ดูแล รักษาได้ง่ายและรวดเร็ว รองรับการขยายตัว สามารถเพิ่มคลัสเตอร์ได้ง่าย และสามารถปรับเปลี่ยนเป็น Kubernates ได้ในอนาคต
|
||||
สำหรับเอกสารนี้จะเป็นการติดตั้ง Docker บน debian 12
|
||||
สำหรับเอกสารนี้จะเป็นการติดตั้ง Docker บน debian 12 สำหรับบนวินโดว์(เพื่อการทดสอบเท่านั้น)ให้ติดตั้งบน WSL2 หรือใช้ Linux VM
|
||||
การติดตั้งโดยละเอียดดูได้จาก [คู่มือในเวปของ Docker](https://docs.docker.com/engine/install/debian/) วิธีการติดตั้งแบบย่อผ่าน
|
||||
[convenience script](https://docs.docker.com/engine/install/debian/#install-using-the-convenience-script) ทำตามวิธีการนี้
|
||||
|
||||
|
|
@ -14,7 +16,7 @@ sudo sh get-docker.sh
|
|||
sudo usermod -aG docker user_name
|
||||
sudo usermod -aG sudo user_name
|
||||
```
|
||||
แทน user_name ด้วยยูสเซอร์ที่ใช้ดูแลระบบ ในตัวอย่างให้สิทธิ์ sudo ด้วยเพื่อจะได้มีสิทธิ์ในจัดการไฟล์ที่เกิดจาก docker
|
||||
แทน user_name ด้วยยูสเซอร์ที่ใช้ดูแลระบบ ในตัวอย่างจะให้อยู่ในกรุป docker และ sudo เพื่อให้มีสิทธิ์ในจัดการ service และไฟล์ที่เกิดจาก docker
|
||||
|
||||
## คำสั่ง Docker พื้นฐาน
|
||||
|
||||
|
|
@ -24,33 +26,34 @@ docker ps # ดูรายการคอนเทนเนอร์ท
|
|||
docker images # ดูรายการอิมเมจที่มีในระบบ
|
||||
docker pull [image_name:tag] # ดึงอิมเมจมาในระบบ
|
||||
docker network ls # แสดงรายการเน็ตเวิร์กของ docker
|
||||
docker network crate [network_name] # สร้างเน็ตเวิร์กของ docker
|
||||
docker network create [network_name] # สร้างเน็ตเวิร์กของ docker
|
||||
```
|
||||
docker compose จะรันคอนเทนเนอร์ของ docker หลายๆตัวพร้อมกันได้ โดยดูการตั้งค่าจากไฟล์ compose.yaml หรือ docker-compose.yaml
|
||||
ที่อยู่ในโฟลเดอร์ที่เรียกคำสั่ง ในการทำงานทั่วไปเพื่อที่จะให้ง่ายต่อการใช้งาน จะใช้ docker compose เป็นหลัก
|
||||
ที่อยู่ในโฟลเดอร์ที่เรียกคำสั่ง ในการทำงานทั่วไปเพื่อที่จะให้ง่ายต่อการใช้งาน จะใช้ docker compose เป็นหลัก ซึ่งจะมีผลเฉพาะ service ที่เขียนไว้ในไฟล์ compose
|
||||
|
||||
คำสั่ง docker compose พื้นฐาน (ต้องมีไฟล์ compose ในโฟลเดอร์ที่เรียกคำสั่ง)
|
||||
คำสั่ง docker compose พื้นฐาน (ต้องมีไฟล์ compose.yaml หรือ docker-compose.yaml ในโฟลเดอร์ที่เรียกคำสั่ง)
|
||||
```sh
|
||||
docker compose ps
|
||||
docker compose up -d
|
||||
docker compose up -d [service_name]
|
||||
docker compose ps # ดูรายการ service ที่ทำงานอยู่
|
||||
docker compose up -d # เรียกทุก service ขึ้นมาทำงาน
|
||||
docker compose up -d [service_name] # เรียกเฉพาะ serfvice ที่ต้องการขึ้นมาทำงาน
|
||||
```
|
||||
|
||||
โฟลเดอร์ที่ใช้เริ่มต้นสร้างโปรแกรม บริการต่างๆในหัวข้อต่อๆไปจะสร้างภายใต้ ~/docker/hrms และใช้เน็ตเวิร์กชื่อ hrms ในการสื่อสารระหว่างกัน
|
||||
```
|
||||
docker network create hrms
|
||||
mkdir -p ~/docker/hrms
|
||||
cd ~/docker/hrms
|
||||
โฟลเดอร์ที่ใช้เริ่มต้นสร้างโปรแกรม บริการต่างๆในหัวข้อต่อๆไปจะสร้างภายใต้ ~/docker/hrms และใช้เน็ตเวิร์กชื่อ hrms ในการสื่อสารระหว่างกัน ทำให้สามารถเรียกใช้ชื่อ service แทน IP Address ได้เหมือนมี DNS ภายใน
|
||||
```sh
|
||||
docker network create hrms # สร้างเน็ตเวิร์ก hrms
|
||||
mkdir -p ~/docker/hrms # สร้างโฟลเดอร์
|
||||
cd ~/docker/hrms # เข้าไปในโฟลเดอร์
|
||||
```
|
||||
ทดสอบการทำงานของ docker ให้สร้างโฟลเดอร์ simple-web มีไฟล์ compose.yaml สร้างโฟลเดอร์ html แล้วสร้างไฟล์ html/index.html ในโฟลเดอร์นั้นพร้อมเนื้อหาเรียกคำสั่ง docker compose up -d
|
||||
เป็นตัวอย่างแบบง่ายเพื่อใช้งาน nginx ไฟล์เวปเก็บในโฟลเดอร์ เปิดพอร์ต 9082 บนเครื่องโฮส ถ้าไม่สั่งหยุดการทำงานจะเริ่มเองถ้าโฮสเปิดขึ้นมาใหม่ ทำงานในเน็ตเวิร์ก hrms
|
||||
```sh
|
||||
mkdir -p simple-web/html
|
||||
cd simple-web
|
||||
nano compose.yaml
|
||||
nano html/index.html
|
||||
nano compose.yaml # สร้างไฟล์ compose
|
||||
nano html/index.html # สร้างหน้าเวปสำหรับทดสอบ
|
||||
```
|
||||
ไฟล์ compose.yaml
|
||||
เป็นตัวอย่างแบบง่ายเพื่อใช้งาน nginx เป็นเวปเซิร์ฟเวอร์ ที่พอร์ต 9082 บนเครื่องโฮส ถ้าไม่สั่งหยุดการทำงาน nginx จะเริ่มตัวเองเองถ้าโฮสเปิดขึ้นเครื่องใหม่ ทำงานในเน็ตเวิร์ก hrms การใช้งานใช้เว็บบราวเซอร์ไปที่ http://IP:9082
|
||||
|
||||
```yaml
|
||||
services:
|
||||
web:
|
||||
|
|
@ -69,6 +72,7 @@ networks:
|
|||
|
||||
## Services
|
||||
การออกแบบใช้สถาปัตยกรรม Microservice จะประกอบจากหลาย Service เพื่อความเป็นระเบียบจะแบ่งไว้สามโฟลเดอร์ apisix(API Gateway), bmahrms-service(3rd Party service), bmahrms(HRMS services)
|
||||
|
||||
```sh
|
||||
mkdir -P apisix
|
||||
mkdir -p bmahrms-service/{edm_config,elasticsearch_config,init_mysql,keycloak_config,report-server-templates}
|
||||
|
|
@ -76,9 +80,9 @@ mkdir -p bmahrms-service/{edm_config,elasticsearch_config,init_mysql,keycloak_co
|
|||
mkdir -p bmahrms
|
||||
```
|
||||
|
||||
### APISIX
|
||||
### APISIX (API Gateway)
|
||||
ทำหน้าที่จัดการ https, limit, security, load balance,reverse proxy, และ route ใน Microservice ก่อนใช้งานให้ตั้งค่าโดเมนกับ Public IP ให้เรียบร้อยแล้ว Forward Port 80/443 มาที่เครื่องนี้
|
||||
การตั้งค่า route จะทำผ่าน curl(Web API)
|
||||
การตั้งค่าต่างๆจะทำผ่าน Web API ในตัวอย่างจะใช้ curl
|
||||
```sh
|
||||
mkdir -p apisix/apisix_conf/
|
||||
nano apisix/apisix_conf/config.yaml # configuration
|
||||
|
|
@ -113,7 +117,8 @@ plugin_attr:
|
|||
ip: "0.0.0.0"
|
||||
port: 9091
|
||||
```
|
||||
apisix/compose.yaml >
|
||||
apisix/compose.yaml จะมีสอง service ตัว apisix จะเป็นโปรแกรมหลัก ส่วน etcd ฐานข้อมูลแบบกระจายตัว ใช้สำหรับเก็บการตั้งค่าของ apisix
|
||||
|
||||
```yaml
|
||||
services:
|
||||
apisix:
|
||||
|
|
@ -163,8 +168,9 @@ volumes:
|
|||
ให้นำ root CA รวมกับ intermediate เพื่อให้พร้อมใช้งาน การตั้งค่า APISIX จะทำผ่าน Web API ใช้ curl และ api-key ที่ตั้งไว้
|
||||
|
||||
```sh
|
||||
# รวม intermediate เข้ากับ certificate หลัก
|
||||
cat star_bangkok.go.th_2024.crt 'GeoTrust TLS RSA CA G1.crt' > star_bangkok.go.th_2024.ca-bundle
|
||||
# ใส่ใน APISIX
|
||||
# ตั้งค่าใน APISIX
|
||||
curl http://127.0.0.1:9180/apisix/admin/ssls/1 \
|
||||
-H 'X-API-KEY: put_admin_api_key_here' -X PUT -d '
|
||||
{
|
||||
|
|
@ -180,19 +186,18 @@ curl https://bma-hrms-id.bangkok.go.th -vvv
|
|||
|
||||
|
||||
### 3rd Party Service (bmahrms-service)
|
||||
โปรแกรมที่พัฒนาโดย 3rd Party หรือ Frappet ถูกใช้โดยโปรแกรมของ HRMS จะแยกมาใส่โฟลเดอร์ bmahrms-service
|
||||
โปรแกรมกลุ่มนี้ที่พัฒนาโดย 3rd Party หรือ Frappet ไม่ได้มีฟังก์ชั่นงานเจาะจงสำหรับ HRMS ถูกใช้โดยโปรแกรมของ HRMS(เช่นฐานข้อมูล,เวปเซิร์ฟเวอร์ ฯลฯ) จะแยกมาใส่โฟลเดอร์ bmahrms-service
|
||||
การติดตั้งให้นำ compose.yaml และ คอนฟิกมาใส่โฟลเดอร์ bmahrms-service ให้เรียบร้อยก่อนใช้งาน สร้างโฟลเดอร์แต่ละ servie ทำดังนี้
|
||||
|
||||
- Keycloak(bmahrms-postgres bmahrms-id) เซิร์ฟเวอร์สำหรับจัดการยูสเซอร์และการ Authentication ในระบบ
|
||||
- MySQL(bmahrms-mysql) เป็นฐานข้อมูลของระบบ
|
||||
- MiniO(bmahrms-s3) เป็น Object Storage ใช้สำหรับเก็บไฟล์ประสิทธิ์ภาพสูงสามารถรับโหลดหนัก การเรียกใช้รวมเร็วปลอดภัยกว่าระบบไฟล์ทั่วไป สามารถขยายเพิ่มได้ในอนาคต ถูกใช้ในหลายระบบที่ต้องการเก็บไฟล์
|
||||
- Windmill รันโฟลว์การทำงานอัตโนมัติจากสคริปต์ หลักๆใช้เพื่อรันตัวสำรองข้อมูล
|
||||
- Portainer(bmahrms-portainer) ระบบจัดการ container มี UI ใช้งานง่าย
|
||||
- RabbitMQ(bmahrms-mq) ระบบจัดคิวในการสือสารใน Microservice ทำให้รับโหลดหนักๆในช่วงเวลาสั้นๆได้ เช่นระบบการลงเวลา EDM
|
||||
- Frappet Report Server(bmahrms-report-server) ใช้สำหรับสร้างรายงานจากเอกสารต้นแบบที่ออกแบบเองได้ ส่งออกเป็น docx, xlsx, pdf
|
||||
- Frappet EDM(bmahrms-edm,bmahrms-elasticsearch,bmahrms-kibana,bmahrms-mq) ใช้สำหรับจัดการเอกสารที่ปลอดภัยรองรับโหลดจำนวนมากได้ จะมีระบบย่อยเบื่องหลังหลายตัว
|
||||
- MiniO(bmahrms-s3) เป็น Object Storage แบบเดียวกับ AWS s3 ใช้สำหรับเก็บไฟล์ มีประสิทธิ์ภาพสูงสามารถรับโหลดหนัก มีความปลอดภัยกว่าเก็บด้วยระบบไฟล์ทั่วไป สามารถขยายเพิ่มได้ในอนาคต ถูกใช้ในหลายระบบที่ต้องการเก็บไฟล์
|
||||
- Windmill รันเวิร์กโฟลว์การทำงานอัตโนมัติจากสคริปต์ หลักๆใช้เพื่อรันตัวสำรองข้อมูล
|
||||
- Portainer(bmahrms-portainer) ระบบจัดการ container มี UI ใช้งานง่าย สามารถใช้แทนคำสั่ง docker ได้
|
||||
- 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)
|
||||
|
||||
docker/bmahrms-service/compose.yaml
|
||||
docker/bmahrms-service/compose.yaml ให้แก้ตัวแปรให้เหมาะสมตาม
|
||||
```yaml
|
||||
networks:
|
||||
hrms:
|
||||
|
|
@ -313,7 +318,7 @@ services:
|
|||
volumes:
|
||||
- ./edm_config/keycloak.json:/app/static/keycloak.json:ro
|
||||
environment:
|
||||
- PUBLIC_KEY=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvfonxaaTELBLHYHTUxateIYMdjGP/yKuzTnNmuinplH2e0QbDJ2q7NsQh2X0YndiQ1uJEU5dFWWFi1D8TEnoVmqW7dxoQ1yXdNB1GvUbhgdT2btoRzzbXeluIVM2oNPtTHu5q5yhnEq/3ldWIkJwQjEkoKv50biDUSTxA0c/R3BLTIMIO6ZUe4ael06e34iSxdP3Dyw3IKTEHaqG1d37SMhfaZ25lA8QGjygiq733l2PfBiVgnjqcy+uvyXkWTjthTNSic3eaSXiIEtxyC4kAGrR/3qClZC8JEgf6mOFmoHna/eSStYodCTOj7SVUmujlMyvE8mGI9BslU/n4RLCuQIDAQAB
|
||||
- PUBLIC_KEY=REALMS_PUBLIC_KEY
|
||||
- REALM_URL=https://bma-hrms-id.bangkok.go.th/realms/EDM
|
||||
- PREFERRED_AUTH=online
|
||||
- MANAGEMENT_ROLE=doc-management
|
||||
|
|
|
|||
BIN
public/images/buildanddeploy/build-network-diagram.png
Normal file
BIN
public/images/buildanddeploy/build-network-diagram.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 134 KiB |
BIN
public/images/buildanddeploy/build-public-key.png
Normal file
BIN
public/images/buildanddeploy/build-public-key.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 106 KiB |
Loading…
Add table
Add a link
Reference in a new issue