add service.env, correct word and description

This commit is contained in:
Sorawit 2024-11-20 12:58:49 +07:00
parent 6bb58b9a84
commit 95ddc1c671

View file

@ -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