change chapter 4-super admin
This commit is contained in:
parent
ecff3cf47f
commit
88f18b8273
5 changed files with 87 additions and 43 deletions
Binary file not shown.
|
|
@ -60,19 +60,20 @@ Container คือ เทคโนโลยีที่แบ่งแยกแ
|
|||
|
||||
# สรุปเปรียบเทียบ
|
||||
|
||||
ต่อไปนี้เป็นตารางเปรียบเทียบระหว่าง Virtual Machine (VM) และ Container ที่แสดงให้เห็นความแตกต่างในด้านต่างๆ:
|
||||
| **คุณสมบัติ** | **Virtual Machine (VM)** | **Container** |
|
||||
|----------------------------|---------------------------------------------------------------|----------------------------------------------------------|
|
||||
| **สถาปัตยกรรม** | ใช้ Hypervisor เพื่อสร้าง VM แยกแต่ละตัว พร้อม Guest OS | ใช้ Host OS ร่วมกันในระดับโปรเซส ไม่ต้องใช้ Hypervisor |
|
||||
| **Guest OS** | แต่ละ VM มี Guest OS ของตนเอง | ไม่มี Guest OS แยก ใช้ OS เดียวกันทั้งหมด |
|
||||
| **ขนาด** | มีขนาดใหญ่ เนื่องจากต้องรวม Guest OS | ขนาดเล็กกว่า เนื่องจากใช้ OS ร่วมกัน |
|
||||
| **ประสิทธิภาพ** | ประสิทธิภาพต่ำกว่าเนื่องจากมี Overhead ของ Guest OS | ประสิทธิภาพสูงกว่า เนื่องจากไม่มี Overhead ของ OS แยก |
|
||||
| **การเริ่มต้นใช้งาน** | ใช้เวลานาน เนื่องจากต้องบูท Guest OS | ใช้เวลาน้อยกว่าเนื่องจากไม่ต้องบูท OS |
|
||||
| **การใช้งานทรัพยากร** | ใช้ทรัพยากรสูง เนื่องจากต้องแยก OS และ Kernel | ใช้ทรัพยากรน้อยกว่าเนื่องจากใช้ OS ร่วมกัน |
|
||||
| **ความยืดหยุ่นในการพกพา** | พกพาได้เฉพาะบนแพลตฟอร์มที่รองรับ Hypervisor | พกพาสะดวก ใช้ได้ทุกที่ที่มี Container Engine |
|
||||
| **การแยกความปลอดภัย** | การแยกระดับสูงเนื่องจากมี Kernel และ OS แยกแต่ละตัว | การแยกระดับโปรเซส อาจมีข้อจำกัดด้านความปลอดภัย |
|
||||
| **การจัดการ** | ซับซ้อนกว่าในการจัดการเนื่องจากต้องดูแล OS และ Kernel แยกกัน | จัดการง่ายกว่าเพราะใช้ OS เดียวกันทั้งหมด |
|
||||
| **กรณีใช้งาน** | ใช้ในศูนย์ข้อมูลขนาดใหญ่หรือการทดสอบแยกหลายระบบ | ใช้ใน DevOps การพัฒนาแอปฯที่ต้องการยืดหยุ่นสูง |
|
||||
| **คุณลักษณะ** | **Virtual Machine (VM)** | **Container** |
|
||||
|-------------------------|-----------------------------------------------|--------------------------------------------|
|
||||
| **การจำลองระบบ** | จำลองระบบปฏิบัติการทั้งหมด | ใช้เคอร์เนลร่วมกับโฮสต์ |
|
||||
| **ระบบปฏิบัติการ** | แต่ละ VM มีระบบปฏิบัติการของตัวเอง | ใช้ระบบปฏิบัติการเดียวกับโฮสต์ |
|
||||
| **ประสิทธิภาพ** | ใช้ทรัพยากรมากเพราะต้องรัน OS ทั้งระบบ | ใช้ทรัพยากรน้อยเพราะแชร์ OS กับโฮสต์ |
|
||||
| **ขนาดไฟล์** | ขนาดใหญ่ (รวม OS และแอปพลิเคชัน) | ขนาดเล็ก (มีเพียงแอปพลิเคชันและไลบรารี) |
|
||||
| **เวลาในการเริ่มต้น** | ช้ากว่า เนื่องจากต้องบูต OS | เร็วกว่า เพราะรันแค่กระบวนการของแอป |
|
||||
| **การแยกการทำงาน** | แยกการทำงานได้เต็มรูปแบบ | แยกผ่าน namespace และ cgroups |
|
||||
| **การพกพา (Portability)** | ขึ้นอยู่กับ Hypervisor และ OS | ง่ายต่อการพกพาผ่าน Docker หรือ Podman |
|
||||
| **การใช้งาน** | เหมาะสำหรับแอปพลิเคชันขนาดใหญ่หรือหลาย OS | เหมาะสำหรับแอปพลิเคชันที่ปรับขยายได้ |
|
||||
| **การจัดการ** | ซับซ้อนกว่า เพราะต้องจัดการทั้ง VM และ OS | ง่ายกว่า โดยใช้เครื่องมือจัดการ Container |
|
||||
| **ทรัพยากรที่ใช้** | ใช้ CPU, RAM และ Storage มากกว่า | ใช้น้อยกว่าเพราะไม่มี OS เต็มรูปแบบ |
|
||||
| **ตัวอย่างเครื่องมือ** | VMware, Hyper-V, VirtualBox | Docker, Kubernetes, Podman |
|
||||
|
||||
|
||||
# Docker คืออะไร?
|
||||
|
||||
|
|
@ -295,6 +296,57 @@ docker network ls # แสดงรายการเน็ต
|
|||
docker network create [network_name] # สร้างเน็ตเวิร์กของ docker
|
||||
```
|
||||
|
||||
# การใช้งานไฟล์ Docker Compose
|
||||
## Docker Compose File คืออะไร?
|
||||
**Docker Compose File** เป็นไฟล์ที่มีรูปแบบเป็น YAML (มักมีชื่อไฟล์ docker-compose.yml) ซึ่งใช้สำหรับการกำหนดค่าและจัดการการทำงานของ **หลายคอนเทนเนอร์** ในโปรเจกต์เดียวกัน ช่วยให้นักพัฒนาสามารถกำหนดบริการต่างๆ ที่คอนเทนเนอร์จะต้องรัน เช่น ฐานข้อมูล เว็บเซิร์ฟเวอร์ และบริการอื่นๆ ได้ในที่เดียว
|
||||
|
||||
## Docker Compose File มีไว้ทำไม?
|
||||
1. จัดการบริการหลายตัวพร้อมกัน
|
||||
เมื่อโปรเจกต์มีหลายคอนเทนเนอร์ เช่น ฐานข้อมูล (MySQL), แอปพลิเคชัน (Node.js), และเครื่องมืออื่นๆ Docker Compose จะช่วยจัดการทุกอย่างในไฟล์เดียว
|
||||
|
||||
2. ลดความซับซ้อนของคำสั่ง
|
||||
แทนที่จะต้องใช้คำสั่ง docker run หลายครั้งเพื่อรันคอนเทนเนอร์ต่างๆ สามารถใช้คำสั่งเดียว (docker-compose up) เพื่อรันทุกบริการพร้อมกัน
|
||||
|
||||
3. กำหนดค่าที่ซับซ้อน
|
||||
สามารถกำหนดค่าเครือข่าย, การเชื่อมโยงคอนเทนเนอร์, พอร์ต, Volume, และ Environment Variable ได้ในไฟล์เดียว
|
||||
|
||||
4. ทำให้การพกพาโปรเจกต์ง่ายขึ้น
|
||||
แชร์ docker-compose.yml ไฟล์ให้ผู้อื่นเพื่อสร้างสภาพแวดล้อมที่เหมือนกันได้อย่างง่ายดาย
|
||||
|
||||
## Docker Compose File ใช้งานเพื่ออะไร?
|
||||
1. การตั้งค่าบริการในระบบที่ซับซ้อน
|
||||
เช่น การตั้งค่าแอปพลิเคชันที่ต้องใช้ฐานข้อมูล Redis และ RabbitMQ ร่วมกัน
|
||||
|
||||
2. การพัฒนาและทดสอบในเครื่อง
|
||||
สร้างสภาพแวดล้อมที่เหมือนกับ Production บนเครื่องนักพัฒนา
|
||||
|
||||
3. การจัดการ Volume และ Network
|
||||
กำหนด Volume สำหรับเก็บข้อมูล และ Network เพื่อให้บริการต่างๆ สื่อสารกัน
|
||||
|
||||
4. รองรับการสเกลระบบ
|
||||
สามารถเพิ่มจำนวนคอนเทนเนอร์ในแต่ละบริการได้ง่ายโดยใช้ docker-compose up --scale
|
||||
|
||||
## ตัวอย่างของไฟล์ docker-compose.yaml
|
||||
เป็นตัวอย่างแบบง่ายเพื่อใช้งาน nginx เป็นเวปเซิร์ฟเวอร์ ที่พอร์ต 9082 บนเครื่องโฮส ถ้าไม่สั่งหยุดการทำงาน nginx จะเริ่มตัวเองเองถ้าโฮสเปิดขึ้นเครื่องใหม่ ทำงานในเน็ตเวิร์ก hrms การใช้งานใช้เว็บบราวเซอร์ไปที่ http://IP:9082
|
||||
|
||||
```yaml
|
||||
services:
|
||||
web:
|
||||
image: nginx
|
||||
volumes:
|
||||
- ./html:/usr/share/nginx/html:ro
|
||||
ports:
|
||||
- "9082:80"
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
hrms:
|
||||
networks:
|
||||
hrms:
|
||||
external: true
|
||||
```
|
||||
|
||||
## การใช้งานคำสั่ง docker compose
|
||||
|
||||
docker compose จะรันคอนเทนเนอร์ของ docker หลายๆตัวพร้อมกันได้ โดยดูการตั้งค่าจากไฟล์ compose.yaml หรือ docker-compose.yaml
|
||||
ที่อยู่ในโฟลเดอร์ที่เรียกคำสั่ง ในการทำงานทั่วไปเพื่อที่จะให้ง่ายต่อการใช้งาน จะใช้ docker compose เป็นหลัก ซึ่งจะมีผลเฉพาะ service ที่เขียนไว้ในไฟล์ compose
|
||||
|
||||
|
|
@ -303,7 +355,13 @@ docker compose จะรันคอนเทนเนอร์ของ docker
|
|||
```sh
|
||||
docker compose ps # ดูรายการ service ที่ทำงานอยู่
|
||||
docker compose up -d # เรียกทุก service ขึ้นมาทำงาน
|
||||
docker compose up -d [service_name] # เรียกเฉพาะ serfvice ที่ต้องการขึ้นมาทำงาน
|
||||
docker compose up -d [service_name] # เรียกเฉพาะ service ที่ต้องการขึ้นมาทำงาน
|
||||
|
||||
docker compose down # หยุดและลบบริการทั้งหมด
|
||||
|
||||
docker compose logs # ดู Log ของบริการทั้งหมด
|
||||
|
||||
docker compose logs -f [service_name] # ดู Log เฉพาะ service ที่ต้องการ
|
||||
```
|
||||
|
||||
โฟลเดอร์ที่ใช้เริ่มต้นสร้างโปรแกรม บริการต่างๆในหัวข้อต่อๆไปจะสร้างภายใต้ ~/docker/hrms และใช้เน็ตเวิร์กชื่อ hrms ในการสื่อสารระหว่างกัน ทำให้สามารถเรียกใช้ชื่อ service แทน IP Address ได้เหมือนมี DNS ภายใน
|
||||
|
|
@ -323,25 +381,6 @@ nano compose.yaml # สร้างไฟล์ compose
|
|||
nano html/index.html # สร้างหน้าเวปสำหรับทดสอบ
|
||||
```
|
||||
|
||||
ไฟล์ compose.yaml
|
||||
เป็นตัวอย่างแบบง่ายเพื่อใช้งาน nginx เป็นเวปเซิร์ฟเวอร์ ที่พอร์ต 9082 บนเครื่องโฮส ถ้าไม่สั่งหยุดการทำงาน nginx จะเริ่มตัวเองเองถ้าโฮสเปิดขึ้นเครื่องใหม่ ทำงานในเน็ตเวิร์ก hrms การใช้งานใช้เว็บบราวเซอร์ไปที่ http://IP:9082
|
||||
|
||||
```yaml
|
||||
services:
|
||||
web:
|
||||
image: nginx
|
||||
volumes:
|
||||
- ./html:/usr/share/nginx/html:ro
|
||||
ports:
|
||||
- "9082:80"
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
hrms:
|
||||
networks:
|
||||
hrms:
|
||||
external: true
|
||||
```
|
||||
|
||||
## Services
|
||||
|
||||
การออกแบบใช้สถาปัตยกรรม Microservice จะประกอบจากหลาย Service เพื่อความเป็นระเบียบจะแบ่งไว้สามโฟลเดอร์ apisix(API Gateway), bmahrms-service(3rd Party service), bmahrms(HRMS services)
|
||||
|
|
@ -470,14 +509,14 @@ curl https://bma-hrms-id.bangkok.go.th -vvv
|
|||
โปรแกรมกลุ่มนี้ที่พัฒนาโดย 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 แบบเดียวกับ 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)
|
||||
- **Keycloak (bmahrms-postgres bmahrms-id)** เซิร์ฟเวอร์สำหรับจัดการยูสเซอร์และการ Authentication ในระบบ
|
||||
- **MySQL (bmahrms-mysql)** เป็นฐานข้อมูลของระบบ
|
||||
- **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 ให้แก้ตัวแปรให้เหมาะสมตาม
|
||||
|
||||
|
|
@ -1160,7 +1199,7 @@ services:
|
|||
|
||||
การตั้งค่าเฉพาะของแต่ละ service และการตั้งค่า route การตั้งค่า route ส่วนใหญ่จะทำคล้ายๆกัน ส่วนที่เป็น Frontend จะเป็นการเซ็ตโดเมน(URL)ของแต่ละโปรแกรม ส่วนที่เป็น Backend จะเป็นการรวมหลาย backend เข้าในโดเมนเดียวกันแต่อยู่คนละ Subfolder ซึ่งเป็นการรวม Microservice เข้าด้วยกัน
|
||||
|
||||
### keycloak (bmahrms-id)
|
||||
### Keycloak (bmahrms-id)
|
||||
|
||||
ใช้สำหรับการ login ในระบบ (Identity Server) การสือสารหลัง API Gateway จะเป็น https แบบ self-signed
|
||||
|
||||
|
|
@ -1371,3 +1410,8 @@ curl http://127.0.0.1:9180/apisix/admin/consumers \
|
|||
}'
|
||||
|
||||
```
|
||||
|
||||
# บทสรุป
|
||||
ในยุคดิจิทัลที่เทคโนโลยีเปลี่ยนแปลงอย่างรวดเร็ว การออกแบบระบบซอฟต์แวร์ให้ตอบสนองความต้องการที่ซับซ้อนและเปลี่ยนแปลงได้ตลอดเวลาเป็นสิ่งจำเป็น สถาปัตยกรรม Microservice เป็นหนึ่งในแนวทางที่ได้รับการยอมรับอย่างกว้างขวาง เนื่องจากมีจุดเด่นด้านความยืดหยุ่น การปรับขยาย และการแยกส่วนการทำงานของระบบให้เป็นอิสระต่อกัน การนำเทคโนโลยีทันสมัยอย่าง Docker, RabbitMQ, Keycloak และ MinIO มาร่วมใช้งานใน Microservice ทำให้ระบบมีประสิทธิภาพยิ่งขึ้น ทั้งในด้านการพัฒนา การจัดการ และการรองรับการใช้งานในระดับสูง
|
||||
|
||||
การผสมผสานเทคโนโลยีอย่าง Docker, RabbitMQ, Keycloak และ MinIO ช่วยยกระดับความสามารถของระบบให้สอดคล้องกับความต้องการทางธุรกิจในยุคที่การแข่งขันสูง สถาปัตยกรรมนี้ไม่เพียงตอบสนองต่อความซับซ้อนของการพัฒนา แต่ยังช่วยเพิ่มความเร็ว ความเสถียร และความปลอดภัยของระบบ ทำให้ Microservice เป็นทางเลือกที่ทันสมัยและเหมาะสมสำหรับการพัฒนาระบบในยุคปัจจุบัน
|
||||
BIN
public/documents/output.docx
Normal file
BIN
public/documents/output.docx
Normal file
Binary file not shown.
BIN
public/documents/~$apter-4-superadmin-build-and-deploy.docx
Normal file
BIN
public/documents/~$apter-4-superadmin-build-and-deploy.docx
Normal file
Binary file not shown.
BIN
public/output.docx
Normal file
BIN
public/output.docx
Normal file
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue