diff --git a/src/assets/1-1.png b/src/assets/1-1.png new file mode 100644 index 0000000..90b75ed Binary files /dev/null and b/src/assets/1-1.png differ diff --git a/src/assets/1-2.png b/src/assets/1-2.png new file mode 100644 index 0000000..21f2de4 Binary files /dev/null and b/src/assets/1-2.png differ diff --git a/src/assets/2-1.png b/src/assets/2-1.png new file mode 100644 index 0000000..a35017f Binary files /dev/null and b/src/assets/2-1.png differ diff --git a/src/modules/001_Maintenance/views/Main.vue b/src/modules/001_Maintenance/views/Main.vue index dac0250..8c737d4 100644 --- a/src/modules/001_Maintenance/views/Main.vue +++ b/src/modules/001_Maintenance/views/Main.vue @@ -7,11 +7,557 @@
+ + + + +
+ + + +
+ +
+
+ + + + +
+ 1. เมื่อพบว่า server มีการตอบสนองช้าลง ซึ่งอาจจะเป็นได้จากการที่ RAM ของ Server ไม่พอ หรือมีการใช้งาน Memory ผิดปกติ สามารถเข้าไปตรวจสอบได้ที่ Grafana Dashboard + + + +
    +
  • + ระบบที่มีวัตถุประสงค์เพื่อจัดการข้อมูลทรัพยากรบุคคล ช่วยให้สามารถจัดเก็บข้อมูลของพนักงานทั้งหมดได้อย่างมีระบบเกี่ยวข้องกับข้อมูลเกี่ยวกับบุคคล, ข้อมูลโครงสร้างหน่วยงาน ข้อมูลข้าราชการ ข้อมูลลูกจ้าง วันลา และข้อมูลอื่นๆ ที่เกี่ยวข้องกับการจัดการทรัพยากรบุคคล +
  • +
+ +
+ +
+ +
+
+
+ 2. หลักการทำงานของระบบ + + + +
    +
  • + เมื่อมีการ Request มาจากหน้าเว็บ request ทั้งหมดจะถูกส่งมาที่ Traefik ที่เป็นตัว API Gateway โดยที่ตัว Traefik จะดูจาก Rule ที่เราได้ทำการตั้งค่าเอาไว้ที่ docker-compose.yml ว่าเมื่อมีการ Request เข้ามาที่ Url Path ไหนจะทำการ Point ไปที่ Docker Container ตัวใด โดยที่ก่อนใช้งานระบบ จะต้องทำการ Authentication โดยผ่าน Keycloak ซึ่งเมื่อผ่านแล้วจึงจะสามารถใช้งานระบบได้ และเมื่อมีการเรียกใช้งาน API นั้น ตัว API จะทำการ Validate Access Token ที่แนบมากับ Request ทุกครั้งว่า valid หรือไม่ หลังจากนั้น API จะทำการ Query Database ตาม Logic ของ Application แล้วหลังจากนั้น จึงส่งผลลัพธ์กลับไปให้ FrontEnd แสดงผล
  • +
+ +
+ +
+ + + +
+
+
+ 3. เครื่องที่ใช้สำหรับการทดสอบระบบจะติดตั้งอยู่ที่เครื่อง 192.168.1.9 โดยหากเป็นการติดตั้ง Service ที่พัฒนาขึ้นมาใหม่โดยที่ยังไม่เคยทำการติดตั้งมาก่อน จะต้องทำการสร้าง folder สำหรับติดตั้งที่ Server ก่อน ซึงการจะเข้าสู่ Server จะต้องทำการ Secure Shell เพื่อเข้าไปยังเครื่อง server โดยใช้คำสั่ง + + + +
    +
  • + ssh frappet@frappet.com +
  • +
+ +
+

หลังจากนั้นให้ใส่รหัสผ่าน “FPTadmin2357”

+ +
+ +
+
+
+ 4. เมื่อเข้าสู่ server ให้ Chage directory ไปที่ folder /home/docker โดยใช้คำสั่ง + + + +
    +
  • + cd docker +
  • +
+ +
+ +
+ + +
+
+
+ 5. หากต้องการจะดูว่าใน folder นี้มี sub folder อะไรบ้างใช้คำสั่ง + + + +
    +
  • + ls -la +
  • +
+ +
+

หรือ

+ + +
    +
  • + ls +
  • +
+ +
+
+ + + +
+
+
+ 6. หลังจากนั้นสร้าง folder ของ service เช่นหากต้องการสร้าง service ของระบบงาน report ให้ทำการสร้าง folder โดยใช้คำสั่งดังนี้ + + + +
    +
  • + mkdir bma-ehr-{service name} +
  • +
+ +
+

+ โดยเปลี่ยน service name เป็นชื่อ service ของตัวเอง เพื่อให้สามารถจำแนกได้ว่า folder นี้เป็น service อะไรของระบบ bma-ehr +

+ +
+ + + +
+
+
+ 7. ทำการสร้างไฟล์ docker-compose.yml +
+ + + + + +
+
+
+ 8. โดยทำการเปลี่ยนชื่อ Service เป็นชื่อของ docker image service ที่เราจะต้องทำการ push ขึ้น docker registry ของบริษัท + + +
+ + +
+
+
+ 9. เปลี่ยน Port ของ Host โดย ห้ามซ้ำกับของ Service อื่นๆ + +
+ +
+
+
+ 10. เปลี่ยน Label ในส่วนของชื่อ rule ของ traefik โดยห้ามซ้ำกัน เพราะจะทำให้ Traefik สับสนได้ หลังจากนั้นแก้ URL และ PathPrefix ให้ตรงกับ Path ของตัว API ของเรา + +
+ + + +
+
+
+ 11. สร้าง folder wwwroot เพื่อว่าจะมีการใช้งาน static file + +
+ + + +
+
+
+ 12. สร้าง file appsettings.json เพื่อทำการตั้งค่า config ต่างๆของตัว api ที่จะให้ test env นั้น ต่อฐานข้อมูลไปที่ server ไหน ตามตัวอย่าง **ค่า config ต่างๆอาจจะเปลี่ยนไปตามแต่ละ Service ดังนั้นให้ดูจาก Code ที่ตัวเองเขียนว่ามีการใช้ค่า Config อะไรบ้าง** + +
+ + + +
+
+
+ 13. หลังจากนั้นให้ทำการสร้าง Dockerfile ไว้ที่ Folder ของ Sourcecode ของ Service ที่เราทำการพัฒนาตามตัวอย่างนี้ โดยแก้ไขค่าให้สอดคล้องกันกับตัวระบบที่เราพัฒนา + +
+ + +
+
+
+ 14. โดยที่ Dockerfile นี้จะเป็นไฟล์สำคัญที่เราจะใช้ในการ build docker image + +
+ + + +
+
+
+ 15. ทำการสร้างไฟล์ GitHub Action Script โดยดูตัวอย่างได้ จาก Folder ใน Sourcecode + +
+ รูปภาพที่ 1.1.2 การสร้างไฟล์ GitHub Action Script +
+ +
+ + + +
+
+
+ 16. โดยทำการสร้างไฟล์ release_{service name}.yaml เพื่อทำการ Build and Deploy ของ Service ที่พัฒนาเพิ่ม ตามตัวอย่าง โดยทำการแก้ไขค่า folder และไฟล์ต่างๆให้ถูกต้องกับ Service ที่กำลังพัฒนา +
+ + + +
+
+
+ 17. ทำการ login ไปที่ https://docker.frappet.com โดยใช้คำสั่งดังนี้ + **หากไม่มีรหัส สามารถติดต่อหาพี่อุ้ม หรือพี่แจ๊ค เพื่อขอให้ส้ราง username สำหรับใช้งาน Docker Registry** + + +
    +
  • + docker login docker.frappet.com +
  • +
+ +
+
+ + + + +
+
+
+ 18. การที่จะรัน Github Action ที่สร้างขึ้นมานั้นจะต้องใช้งาน act ซึ่งเป็น cli จะต้องทำการติดตั้งโปรแกรมนี้ก่อนใช้งาน ซึ่งสามารถทำได้หลายวิธี 1 ในวิธีนั้นคือติดตั้งผ่าน scoop ซึ่งการติดตั้งสามารถเข้าไปดูได้ที่ www.scoop.sh ซึ่งหลังจากติดตั้ง scoop แล้วสามารถติดตั้ง act ได้ผ่านคำสั่ง + + + +
    +
  • + scoop install act +
  • +
+ +
+
+ + + + + +
+
+
+ 19. หลังจากที่ติดตั้ง act แล้วจะทำการ run Github Action เพื่อทำการ Build และ Deploy ไปยัง Test Server โดยใช้คำสั่งนี้ + + + +
    +
  • + act workflow_dispatch -W .github/workflows/{githib action file} --input IMAGE_VER={image version} -s DOCKER_USER={user name} -s DOCKER_PASS={password} -s SSH_PASSWORD={SSH Password} +
  • +
+ +
+
+ + + +
+
+
+ 20. ซึ่งระบบจะทำการสร้าง Docker Image และ Push ขึ้นไปไว้ที่ Docker Registry และทำการ Deploy ที่ Test Server ให้โดยอัตโนมัติ ซึ่งหากทำการ Build and Deploy สำเร็จ จะแสดงข้อความดังนี้ +
+ + + +
+
+
+ 21. หากเป็นการ Build เพื่อ Update Service เดิมสามารถเริ่มต้นได้ที่ ข้อ 19 ได้เลย +
+ +
+
+ + +
+
+ + + + + + + + + +
+
+
+ + + + +
+ 1. Environment Diagram + +
+ รูปภาพที่ 1.2.1 การสร้างไฟล์ GitHub Action Script +
+
+ + +
+
+
+ 2. หลักการทำงานจะคล้ายๆกับ Test Environment เพียงแต่ว่าตัวฐานข้อมูล mySQL จะถูกสร้างขึ้นเป็น container ของตัว Production โดยเฉพาะ +
+ + + + +
+
+
+ 3. เนื่องจากเราได้ทำขั้นตอนของการ Build Docker Image ไปในระหว่างการทดสอบระบบแล้ว เราจึงไม่ต้องทำขั้นตอนการ Build Image ซ้ำอีกรอบ เนื่องจาก Image ทั้งหมดจะถูก push ขึ้นไปที่ + + https://docker.frappet.com + แล้วนั่นเอง +
+ + + +
+
+
+ 4. ให้ทำการเพิ่ม Service ที่เราต้องการเพิ่มเติมไปที่ docker-compose File โดยอ้างอิงจาก docker-compose file ของ Service ตัวทดสอบ โดยแก้ไข URL, PathPrefix และ Traefik RuleName ให้ไม่ซ้ำกัน โดยดูจากตัวอย่าง File ด้านล่าง + +
+ + + + +
+
+
+ 5. หลังจากนั้นให้เข้าไปที่ folder ของตัวระบบ Production แล้วรันคำสั่ง + + + +
    +
  • + docker compose pull +
  • +
+ +
+
+ + + + + +
+
+
+ 6. ระบบจะ pull Docker Image ทั้งหมดตามที่เราประกาศไว้ใน File Docker Compose +
+ + + + + +
+
+
+ 7. หลังจากนั้นรันคำสั่งนี้ เพื่อให้ทำการ Reload Docker Container เพื่อให้ระบบทำการ Update มาใช้ Image Version ล่าสุด + + + +
    +
  • + docker compose up -d +
  • +
+ +
+
+ + + + + +
+
+
+ 8. หากต้องการดู log แต่ละ service ให้ใช้คำสั่ง + + + +
    +
  • + docker compose logs -f {service name} +
  • +
+ +
+
+ + + + +
+
+
+ 9. โดยการดู service name สามารถใช้คำสั่งนี้เพื่อทำการ List Container ขึ้นมา + + + +
    +
  • + docker compose ps +
  • +
+ +
+
+ + + +
+
+
+ 10. ซึ่งระบบจะแสดง Container ทั้งหมดของ docker compose file นี้ขึ้นมาให้เราสามารถดูได้ + + + +
    +
  • + docker compose ps +
  • +
+ +
+
+ + + + +
+
+
+ 11. หากเราต้องการ shell เข้าไปที่ตัว container สามารถใช้คำสั่งนี้ + + + +
    +
  • + docker compose exec -it {service name} bash +
  • +
+ +
+
+ + + + + + + + + +
+ +
+
+ + +
+
- - - -
- 1. เมื่อพบว่า server มีการตอบสนองช้าลง ซึ่งอาจจะเป็นได้จากการที่ RAM ของ Server ไม่พอ หรือมีการใช้งาน Memory ผิดปกติ สามารถเข้าไปตรวจสอบได้ที่ Grafana Dashboard -
- +
+ + + +
+ 1. เมื่อพบว่า server มีการตอบสนองช้าลง ซึ่งอาจจะเป็นได้จากการที่ RAM ของ Server ไม่พอ หรือมีการใช้งาน Memory ผิดปกติ สามารถเข้าไปตรวจสอบได้ที่ Grafana Dashboard +
+ -
+
-
- 3. เมื่อพบว่ามี container ตัวใดที่มีการใช้ memory มากผิดปกติ เราจะเข้าไปทำการ stop continer หรือทำการ restart Container ใหม่ โดย ssh เข้าไปที่เครื่อง server -
- +
+ 3. เมื่อพบว่ามี container ตัวใดที่มีการใช้ memory มากผิดปกติ เราจะเข้าไปทำการ stop continer หรือทำการ restart Container ใหม่ โดย ssh เข้าไปที่เครื่อง server +
+ -
    -
  • +
      +
    • + + ssh frappet@frappet.com +
    • + +
    + + +
    - ssh frappet@frappet.com -
  • + +
    + 4. ทำการใส่ password หลังจากนั้นระบบจะ ssh ไปที่เครื่อง server +
    +
    -
- -
-
- -
- 4. ทำการใส่ password หลังจากนั้นระบบจะ ssh ไปที่เครื่อง server -
-
- - - -
- 5. ทำการ Change Directory ไปยัง folder ที่ติดตั้ง Docker -
- - -
    -
  • - - frappet@dockerserver:~$ cd docker -
  • -
- -
-
+
+ 5. ทำการ Change Directory ไปยัง folder ที่ติดตั้ง Docker +
+ + +
    +
  • + + frappet@dockerserver:~$ cd docker +
  • + +
+ +
+
-
- 6. หลังจากนั้นทำการลิสต์รายการ Container ที่ Run อยู่ เพื่อที่จะทำการ Stop หรือ Restart Container ที่ต้องการ โดยใช้คำสั่ง -
- +
+ 6. หลังจากนั้นทำการลิสต์รายการ Container ที่ Run อยู่ เพื่อที่จะทำการ Stop หรือ Restart Container ที่ต้องการ โดยใช้คำสั่ง +
+ -
    -
  • - - frappet@dockerserver:~/docker$ docker ps -
  • - -
- -
-
+
    +
  • + + frappet@dockerserver:~/docker$ docker ps +
  • + +
+ +
+
-
- 7. ระบบจะแสดงรายชื่อ Container ที่ทำงานอยู่ขั้นมา -
-
+
+ 7. ระบบจะแสดงรายชื่อ Container ที่ทำงานอยู่ขั้นมา +
+
-
- 8. ทำการ Stop Container ที่ต้องการ โดยใช้คำสั่ง -
- +
+ 8. ทำการ Stop Container ที่ต้องการ โดยใช้คำสั่ง +
+ -
    -
  • - - frappet@dockerserver:~/docker$ docker stop container_name -
  • - -
- -
-
+
    +
  • + + frappet@dockerserver:~/docker$ docker stop container_name +
  • + +
+ +
+
-
- 9. หลังจากนั้นทำการ Start Container ที่ต้องการขึ้นมาอีกครั้ง โดยการใช้คำสั่ง -
- +
+ 9. หลังจากนั้นทำการ Start Container ที่ต้องการขึ้นมาอีกครั้ง โดยการใช้คำสั่ง +
+ -
    -
  • - - frappet@dockerserver:~/docker$ docker start container_name -
  • - -
- -
-
-
+
    +
  • + + frappet@dockerserver:~/docker$ docker start container_name +
  • + +
+ + + +
+ + + + + + + + + + +