diff --git a/public/documents/chapter-4-superadmin-build-and-deploy.md b/public/documents/chapter-4-superadmin-build-and-deploy.md index 242e52a0..519c0569 100644 --- a/public/documents/chapter-4-superadmin-build-and-deploy.md +++ b/public/documents/chapter-4-superadmin-build-and-deploy.md @@ -263,15 +263,28 @@ API Gateway เป็นส่วนสำคัญในระบบ Microservi # ขั้นตอนการติดตั้งระบบ -เอกสารสำหรับการติดตั้งระบบของ BMA HRMS โปรแกรมในยุคปัจจุบันจะทำงานบนเทคโนโลยีคอนเทนเนอร์ เพื่อยืดหยุ่นในการทำงาน ตั้งแต่การพัฒนา ทดสอบและ ใช้งานจริง (Production) จำเป็นต้องเข้าใจพื้นฐานการทำงาน Docker เสียก่อน ก็จะสามารถจัดการบริการเพิ่มเติมที่จะเกิดขึ้นอนาคต เนื่องจากการใช้งานเป็นรูปแบบเดียวกัน นอกจากการใช้งานผ่านคำสั่งแล้วสามารถใช้ Portainer ในการจัดการผ่าน Web UI ได้ การติดตั้งจะอยู่ในเอกสารนี้ +ผู้อ่านจำเป็นต้องมีความรู้และเข้าใจคำสั่ง และระบบไฟล์ของ Linux เป็นอย่างดีมาก่อน เอกสารจะแสดงวิธีการติดตั้งระบบของ BMA HRMS บนเทคโนโลยีคอนเทนเนอร์ มีการปูพื้นคำสั่งพื้นฐานของ Docker ที่จำเป็นให้ ลักษณะการติดตั้งและใช้งานจะอยู่ในรูปแบบเดียวกัน ทำให้ สามารถจัดการบริการเพิ่มเติมที่จะเกิดขึ้นอนาคตได้ นอกจากการใช้งานผ่านคำสั่งแล้วสามารถใช้ Portainer จัดการผ่าน Web UI ได้ การติดตั้งจะอยู่ในเอกสารนี้ ![Network Diagram](images/buildanddeploy/build-network-diagram.png) +## Linux VM +เครื่องโฮสเป็น debian 12 แบบมาตรฐาน ตั้งค่า locale และ Time Zone ให้เหมาะสำหรับประเทศไทย +``` +sudo dpkg-reconfigure locales +sudo timedatectl set-timezone Asia/Bangkok +date +``` + +![เลือกlocale](images/buildanddeploy/build-locale-eng-US.png) + +![Default locale](images/buildanddeploy/build-locale-final.png) + + ## ติดตั้ง Docker Docker คอนเทนเนอร์สามารถเรียนรู้ ตั้งค่า ดูแล รักษาได้ง่ายและรวดเร็ว รองรับการขยายตัว สามารถเพิ่มคลัสเตอร์ได้ง่าย และสามารถปรับเปลี่ยนเป็น Kubernates ได้ในอนาคต -สำหรับเอกสารนี้จะเป็นการติดตั้ง Docker บน debian 12 สำหรับบนวินโดว์(เพื่อการทดสอบเท่านั้น)ให้ติดตั้งบน WSL2 หรือใช้ Linux VM -การติดตั้งโดยละเอียดดูได้จาก [คู่มือในเวปของ Docker](https://docs.docker.com/engine/install/debian/) วิธีการติดตั้งแบบย่อผ่าน +สำหรับเอกสารนี้จะเป็นการติดตั้ง Docker บน debian 12 สำหรับบนวินโดว์(เพื่อการทดสอบเท่านั้น)ให้ติดตั้ง docker บน WSL2 +การติดตั้งโดยละเอียดดูได้จาก [คู่มือในเวปหลักของ Docker](https://docs.docker.com/engine/install/debian/) ตัวอย่างด้านล่างเป็นวิธีการติดตั้งแบบย่อผ่าน [convenience script](https://docs.docker.com/engine/install/debian/#install-using-the-convenience-script) ทำตามวิธีการนี้ ``` @@ -327,7 +340,9 @@ docker network create [network_name] # สร้างเน็ตเวิร สามารถเพิ่มจำนวนคอนเทนเนอร์ในแต่ละบริการได้ง่ายโดยใช้ docker-compose up --scale ## ตัวอย่างของไฟล์ docker-compose.yaml -เป็นตัวอย่างแบบง่ายเพื่อใช้งาน nginx เป็นเวปเซิร์ฟเวอร์ ที่พอร์ต 9082 บนเครื่องโฮส ถ้าไม่สั่งหยุดการทำงาน nginx จะเริ่มตัวเองเองถ้าโฮสเปิดขึ้นเครื่องใหม่ ทำงานในเน็ตเวิร์ก hrms การใช้งานใช้เว็บบราวเซอร์ไปที่ http://IP:9082 +เป็นตัวอย่างแบบง่ายเพื่อใช้งาน เซอร์วิส web ใช้อิมเมจโปรแกรม nginx เนื้อหาไฟล์ในโฟลเดอร์ ./html จะไปปรากฏบนคอนเทนเนอร์ที่ /usr/share/nginx/html เปิดพอร์ต 9082 บนเครื่องโฮส ถ้าไม่สั่งหยุดการทำงาน nginx จะเริ่มตัวเองเองถ้าโฮสเปิดขึ้นเครื่องใหม่ ทำงานในเน็ตเวิร์ก hrms ที่สร้างจากภายนอก + +การใช้งานใช้เว็บบราวเซอร์ไปที่ http://IP:9082 ```yaml services: @@ -348,7 +363,7 @@ networks: ## การใช้งานคำสั่ง docker compose docker compose จะรันคอนเทนเนอร์ของ docker หลายๆตัวพร้อมกันได้ โดยดูการตั้งค่าจากไฟล์ compose.yaml หรือ docker-compose.yaml -ที่อยู่ในโฟลเดอร์ที่เรียกคำสั่ง ในการทำงานทั่วไปเพื่อที่จะให้ง่ายต่อการใช้งาน จะใช้ docker compose เป็นหลัก ซึ่งจะมีผลเฉพาะ service ที่เขียนไว้ในไฟล์ compose +ที่อยู่ในโฟลเดอร์ที่เรียกคำสั่ง ในการทำงานทั่วไปเพื่อง่ายต่อการใช้งานจะใช้ docker compose เป็นหลัก ซึ่งจะมีผลเฉพาะ service ที่เขียนไว้ในไฟล์ compose คำสั่ง docker compose พื้นฐาน (ต้องมีไฟล์ compose.yaml หรือ docker-compose.yaml ในโฟลเดอร์ที่เรียกคำสั่ง) @@ -388,7 +403,7 @@ nano html/index.html # สร้างหน้าเวปสำหรับท ```sh mkdir -P apisix mkdir -p bmahrms-service/{edm_config,elasticsearch_config,init_mysql,keycloak_config,report-server-templates} -ืืmkdir -p bmahrms-service/report-server-templates/{docx,xlsx} +mkdir -p bmahrms-service/report-server-templates/{docx,xlsx} mkdir -p bmahrms ``` @@ -518,7 +533,56 @@ curl https://bma-hrms-id.bangkok.go.th -vvv - **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/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 +``` +# 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 + +# PostgreSQL (keycloak) +POSTGRES_DB=keycloak +POSTGRES_USER=keycloak +POSTGRES_PASSWORD=put_keycloak_db_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/ + +# RabbitMQ +RABBITMQ_DEFAULT_USER=admin +RABBITMQ_DEFAULT_PASS=put_rabbitmq_admin_password_here + +# MySQL +MYSQL_ROOT_PASSWORD=put_mysql_admin_password_here +MYSQL_DATABASE=bma_ehr +MYSQL_USER=frappet +MYSQL_PASSWORD=put_mysql_db_password_here + +# Elasticsearch & Kibana +xpack.security.enabled=false +discovery.type=single-node +ELASTICSEARCH_HOSTS=http://bmahrms-elasticsearch:9200 + +# REDIS +REDIS_PORT=6379 +REDIS_DATABASES=16 +``` + +docker/bmahrms-service/compose.yaml ให้แก้ค่า PUBLIC_KEY MINIO_ACCESS_KEY,MINIO_SECRET_KEY, ipaddress_bma_hrms_id ให้เหมาะสม ```yaml networks: @@ -576,10 +640,6 @@ services: env_file: "service.env" mem_limit: "1g" restart: unless-stopped - environment: - - TZ=Asia/Bangkok - - RABBITMQ_DEFAULT_USER=admin - - RABBITMQ_DEFAULT_PASS=MQ_PASSWORD ports: - 5672:5672 # - 9122:15672 # UI @@ -610,16 +670,16 @@ services: bmahrms-elasticsearch: image: docker.frappet.com/core/elasticsearch-icu:8.14.3 env_file: "service.env" - mem_limit: "4g" + mem_limit: "4g" volumes: - elasticsearch_data:/usr/share/elasticsearch/data - ./elasticsearch_config/config.yaml:/usr/share/elasticsearch/config/elasticsearch.yml restart: unless-stopped - # disable ulimits for Proxmox LXC - # ulimits: - # memlock: - # soft: -1 - # hard: -1 + # disable below ulimits if run inside LXC + ulimits: + memlock: + soft: -1 + hard: -1 networks: - hrms bmahrms-kibana: @@ -640,15 +700,15 @@ services: volumes: - ./edm_config/keycloak.json:/app/static/keycloak.json:ro environment: - - PUBLIC_KEY=REALMS_PUBLIC_KEY + - PUBLIC_KEY=put_realm_edm_public_key_here - REALM_URL=https://bma-hrms-id.bangkok.go.th/realms/EDM - PREFERRED_AUTH=online - MANAGEMENT_ROLE=doc-management - MINIO_HOST=bmahrms-s3.bangkok.go.th - MINIO_PORT=443 - MINIO_SSL=true - - MINIO_ACCESS_KEY=dIYTJ2nXmD9cDln7yrwE - - MINIO_SECRET_KEY=pENPrGWpkngbLHnPBBh0dp2BoMQL5KZH60MucN6I + - MINIO_ACCESS_KEY=put_minio_access_key_here + - MINIO_SECRET_KEY=put_minio_secret_key_here # Bucket notification event needed to be configured # Can use prepare script to create bucket - MINIO_BUCKET=edm @@ -657,11 +717,11 @@ services: - ELASTICSEARCH_PORT=9200 # Can use prepare script - ELASTICSEARCH_INDEX=edm-index - - AMQ_URL=amqp://admin:admin123456@bmahrms-mq:5672 + - AMQ_URL=amqp://admin:put_rabbitmq_admin_password_here@bmahrms-mq:5672 - AMQ_QUEUE=edm - NODE_TLS_REJECT_UNAUTHORIZED=false extra_hosts: - - bma-hrms-id.bangkok.go.th:192.168.2.101 + - bma-hrms-id.bangkok.go.th:ipaddress_bma_hrms_id depends_on: - bmahrms-postgres