Apelon – Distributed Terminology System (DTS) เป็น Terminology services/server ที่ทาง Standard & Interoperability Lab Thailand (SIL Thailand) กำลังศึกษาความเหมาะสมในการนำมาใช้อยู่ครับ ผมเลยลอง deploy ตัว app นี้เพื่อทดลองใช้งานดู เนื่องจากขั้นตอนค่อนข้างซับซ้อน เลยคิดว่ามาสรุปไว้ที่นี่ด้วยดีกว่า เผื่อท่านอื่นอยากทำตามครับ
เท่าที่ทำได้ตอนนี้ ผมลอง deploy บน Digital Ocean ไม่มีปัญหาอะไรครับ แต่ทำบน Azure ไม่สำเร็จ ทำบน OpenLandscape เหมือนจะสำเร็จอยู่ แต่ยังติดปัญหาเข้าไม่ได้ 403: forbidden อาจต้องรอผู้เชี่ยวชาญสาย Java มาช่วยแก้ครับ 😄 สรุปว่าผมเจอวิธีแก้แล้วนะครับ ปัญหาไม่ได้อยู่ที่ OpenLandscape ครับ อยู่ที่ขั้นตอนการตั้ง group ของ DTS Server ต้องเป็น apelondtsadmin และ apelondts เท่านั้นครับ ห้ามเป็นค่าอื่น
ผมได้ทำวิดีโอแสดงขั้นตอนการทำทั้งหมด สามารถชมได้ที่ YouTube ครับ
System Requirements
Server
- Windows 7, 10, Server 2008 R2, Server 2012 R2 ส่วน Linux ก็ Redhat Enterprise 5, 6 หรือ CentOS 5,6 –> ผมเลือก CentOS 6
- CPU dual/quad core, RAM 8-16 GB, Storage 100GB
- Database: Oracle 11g, 12c, MS SQL Server 2016, MySQL Community Server 5.6 (only) –> ผมเลือก MySQL
- App: JBoss EAP 7.1.0, WildFly 12.0.0 Final, GlassFish 3.1.22, IBM WebSphere –> ผมเลือก WildFly เพราะดูใหม่สุด จริง ๆ เวอร์ชั่นใหม่กว่านี้ก็อาจจะใช้ได้ แต่ไม่กล้าเสี่ยงครับ
- Java: ต้องใช้ Oracle JDK 8 ใช้เป็น OpenJDK ไม่ได้ครับ
Client DTS Editor
- ต้องใช้ Windows เท่านั้น
ขั้นตอนการติดตั้ง
ขั้นตอนการติดตั้งหลัก ๆ ผมเอามาจาก dts4_InstallationGuide.pdf ที่อยู่ใน Documentation Center ของ Apelon ครับ แต่หลาย ๆ อย่างก็ไม่ได้ตรงไปตรงมาแบบทำตามใน guide แล้วจะใช้ได้เลย ต้องมีการปรับ ๆ พอสมควรเหมือนกันครับ หลังจากการลองผิดลองถูกไปวันกว่า ๆ อันนี้เป็นข้อสรุปที่ผมได้ในปัจจุบันครับ
Step 1: เปิด VM ใหม่
ผมเปิดที่ Digital Ocean ครับ เปิดเป็น CentOS 6 ก็ติดตั้ง SSH อะไรให้เรียบร้อยไปครับ หากท่านใดอยากเพิ่มความปลอดภัยก็ทำตามบทความ Initial Server Setup with CentOS 7 นี้ได้ครับ แต่เพื่อความรวดเร็วผมไม่ได้ทำครับ
Step 2: ดาวน์โหลด Apelon DTS มาที่เครื่องที่เราสร้าง
เมื่อเรา SSH เข้าไปจะอยู่ที่ root อยู่แล้ว ก็สร้างโฟลเดอร์สำหรับเป็น <DTS_HOME> แล้วเข้าไปในโฟลเดอร์นั้น
mkdir dts cd dts
ดาวน์โหลดไฟล์ Apelon DTS มา โดย URL ได้มาจากหน้า Download ในเว็บเขา (ต้อง log in ก่อน) แล้ว extract ออก จากนั้นลบออกก็ได้
wget [URL] tar -zxvf dts-....(กด tab เพื่อให้ได้ชื่อเต็ม) rm dts-...(กด tab เพื่อให้ได้ชื่อเต็ม)
Change mode ให้เราสามารถ execute shell script ต่าง ๆ ได้
cd bin chmod +x makeScriptsExecutable.sh ./makeScriptsExecutable.sh
Step 3: Install Java
ไปที่ Java SE Development Kit 8 Downloads เพื่อเอาลิงค์ดาวน์โหลดมา (ต้อง log in ก่อน)
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "URLที่ได้มา"
เปลี่ยนชื่อไฟล์ให้เหลือแค่ .rpm จากนั้น install
mv jdk-8u251-....(กด tab) jdk-8u251-linux-x64.rpm sudo yum localinstall jdk-8u251-linux-x64.rpm
ตรวจสอบ Java version และดูว่าไม่มีเวอร์ชั่นอื่นอยู่
java -version sudo alternatives --config java
เพิ่ม JAVA_HOME เข้าไปใน .bash_profile
vi ~/.bash_profile
เพิ่มบรรทัดเหล่านี้
JAVA_HOME==/usr/java/jdk1.8.0_251-amd64/jre PATH=$JAVA_HOME/bin:$PATH:$HOME/bin export JAVA_HOME export PATH
Step 4: Install MySQL
อ่านวิธีทำฉบับเต็มได้ที่ Installing MySQL on Linux Using the MySQL Yum Repository เราต้องมีลิงค์สำหรับดาวน์โหลด Yum repository ของ MySQL ก่อน
sudo yum localinstall https://repo.mysql.com/mysql80-community-release-el6-3.noarch.rpm
ลง yum-utils เพื่อใช้ yum-config-manager ในการเปลี่ยนจากติดตั้ง MySQL 8.0 เป็นติดตั้ง MySQL 5.6
sudo yum install yum-utils sudo yum-config-manager --disable mysql80-community sudo yum-config-manager --enable mysql56-community
ตรวจสอบความถูกต้องแล้วก็ install ได้เลย
yum repolist enabled | grep mysql sudo yum install mysql-community-server
ทำการ config MySQL ปกติจะอยู่ที่ my.conf
vi /etc/my.cnf
เพิ่ม code ต่อไปนี้
character-set-server=utf8 collation-server=utf8_general_ci default-storage-engine=InnoDB lower_case_table_names=1 max_allowed_packet=100M innodb_buffer_pool_size=2000M innodb_flush_log_at_trx_commit=2 innodb_log_file_size=512M
start MySQL service และตั้ง password
sudo service mysqld start sudo service mysqld status sudo mysql_secure_installation
จากนั้นเข้าสู่ MySQL CLI
mysql -u root -p
สร้าง table และ user ต่อไปนี้ ปรับ dts4user และ dts4password เป็นค่าที่เราต้องการ
create database dts4; create user 'dts4user'@'%' identified by 'dts4password'; grant all privileges on dts4.* to dts4user; create user 'dts4user'@'localhost' identified by 'dts4password'; grant all privileges on dts4.* to dts4user@localhost; flush privileges;
จากนั้นสร้าง schema ด้วยการ copy มาจากที่ Apelon DTS เตรียมไว้ให้
cp ~/dts/bin/kb/target-connection-mysql.xml ~/dts/bin/kb/target-connection.xml
เข้าไปเปลี่ยน username กับ password ให้ตรงกับที่ต้องไว้
vi ~/dts/bin/kb/target-connection.xml
ลงมือสร้างจริง ด้วยการรัน shell script
cd ~/dts/bin/kb/create ./kbcreate.sh
Step 5: Install WildFly
ลิงค์ข้อมูลเพิ่มเติม 1, 2 (Debian)
สร้าง Linux user, group ใหม่ก่อน
sudo groupadd -r wildfly sudo useradd -r -g wildfly -d /opt/wildfly -s /sbin/nologin wildfly
ติดตั้ง WildFly (ต้องใช้เวอร์ชั่น 12 แต่ผมไม่แน่ใจว่าเวอร์ชั่นหลังกว่านี้ได้ไหม) ทำ symlink และ change owner
WILDFLY_VERSION=12.0.0.Final wget https://download.jboss.org/wildfly/$WILDFLY_VERSION/wildfly-$WILDFLY_VERSION.tar.gz -P /tmp sudo tar xf /tmp/wildfly-$WILDFLY_VERSION.tar.gz -C /opt/ sudo ln -s /opt/wildfly-$WILDFLY_VERSION /opt/wildfly sudo chown -RH wildfly: /opt/wildfly
ปรับแต่งค่าของ standalone.conf
vi /opt/wildfly/bin/standalone.conf
ปรับแต่งค่า 2 บรรทัด เกี่ยวกับ JAVA_HOME และการจัดการ memory
JAVA_HOME="/usr/java/jdk1.8.0_251-amd64/jre" JAVA_OPTS="-Xms512M -Xmx4G -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=4G"
เพิ่ม user admin ของ WildFly
sudo /opt/wildfly/bin/add-user.sh
เลือกเป็น Management User. (a)
ตั้ง username/password ตามต้องการ เช่น apelonadmin, password: apelon
ไม่ต้องเลือกกลุ่ม และไม่มี AS configuration
จากนั้นทดสอบการรัน WildfFly ค่า -b=0.0.0.0 -bmanagement=0.0.0.0 คือทำให้เราใช้ IP ของ VM เราในการเข้า app ได้
sudo sh -c 'chmod +x /opt/wildfly/bin/*.sh' /opt/wildfly/bin/standalone.sh -b=0.0.0.0 -bmanagement=0.0.0.0
จะสามารถเข้าได้จาก [ipเครื่องVMเรา]:8080 และเข้า admin ได้ที่ [ipเครื่องVMเรา]:9990
Step 6: ติดตั้ง Apelon DTS
ก็อป config มาตรฐานที่ Apelon เตรียมไว้ให้
cp ~/dts/server/wildfly-12/standalone/configuration/standalone-apelondts.xml /opt/wildfly/standalone/configuration/
เข้าไปแก้ค่าของ standalone-apelondts.xml ให้สามารถเข้าหน้า admin ได้จาก any IP
vi /opt/wildfly/standalone/configuration/standalone-apelondts.xml
ปรับค่าดังนี้
<interface name="management"> <any-address/> </interface>
ทดสอบการรันอีกรอบ
/opt/wildfly/bin/standalone.sh -c standalone-apelondts.xml -b=0.0.0.0 -bmanagement=0.0.0.0
Step 7: ทำให้รันเป็น Linux Service
เริ่มจากก็อป wildfly.conf ที่ Apelon เตรียมไว้ให้
sudo cp /opt/wildfly/docs/contrib/scripts/init.d/wildfly.conf /etc/default/wildfly
แก้ไข config
vi /etc/default/wildfly
ตามค่าต่อไปนี้
JBOSS_USER=wildfly STARTUP_WAIT=90 JBOSS_HOME=/opt/wildfly JBOSS_CONFIG=standalone-apelondts.xml WILDFLY_BIND=0.0.0.0 WILDFLY_CONSOLE_BIND=0.0.0.0
จากนั้นก็อป shell script สำหรับรันไฟล์มา และ change owner
sudo cp /opt/wildfly/docs/contrib/scripts/init.d/wildfly-init-redhat.sh /etc/init.d/wildfly sudo chown -R wildfly:wildfly /opt/wildfly*
เริ่มการรัน service
chkconfig wildfly on /etc/init.d/wildfly start
จะสามารถเข้าได้จาก
จะสามารถเข้าได้จาก [ipเครื่องVMเรา]:8080
และเข้า admin ได้ที่
[ipเครื่องVMเรา]:9990
คำสั่งอื่น ๆ
#หยุด service /etc/init.d/wildfly stop #ดูสถานะ /etc/init.d/wildfly status #ดู service ที่รันอยู่ netstat -napt #ดู log vi /var/log/wildfly/console.log
ตอนผม deploy ไปที่ OpenLandscape หากมีการเปลี่ยน config Firewall ที่เครื่องต้องมา flush IP ที่ VM ด้วย ตามลิงค์นี้ Linux: Reset iptables firewall rules แต่ตอนทำใน Digital Ocean ไม่ต้องทำ
./iptables_flush.sh
Step 8: เตรียม user สำหรับ DTS browser/editor
ในขั้นนี้สำคัญมากนะครับ ต้องตั้ง group เป็น apelondtsadmin, apelondts เท่านั้น ห้ามตั้งอย่างอื่นครับ ไม่งั้นจะ 403: Forbidden
สร้าง user admin ก่อน
sudo /opt/wildfly/bin/add-user.sh
เลือก Application User. (b) ตั้ง username/password ตามต้องการ เช่น dtsadminuser/ dtsadmin ตั้ง group เป็น apelondtsadmin, apelondts และเลือก no AS configuration
จากนั้นสร้างอีก user หนึ่งสำหรับ user ธรรมดา
sudo /opt/wildfly/bin/add-user.sh
เลือก Application User. (b) ตั้ง username/password ตามต้องการ เช่น dtsuser/ dts ตั้ง group เป็น apelondts และเลือก no AS configuration
Step 9: Deploy DTS app
ดาวน์โหลดไฟล์ config มาเก็บไว้ในเครื่องตัวเองก่อน
scp root@[ipเครื่องVMเรา]:~/dts/lib/mysql-connector-java.jar mysql-connector-java.jar scp root@[ipเครื่องVMเรา]:~/dts/server/wildfly-12/standalone/deployments/dtsjbosswildfly.ear dtsjbosswildfly.ear
จากนั้นเข้าหน้า admin ที่ [ipเครื่องVMเรา]:9990 แล้วทำตามขั้นตอนต่อไปนี้
Deployments –> start –> Add –> upload mysql-connector-java.jar –> Finish
Configuration –> Create a Datasource –> Subsystems –> Datasource –> Non-XA –> Add –> MySql
Name: ApelonDtsDS JNDI: java:jboss/datasources/ApelonDtsDS
Driver –> Detected Driver –> mysql-connector-java.jar –> Connection Setting
url: jdbc:mysql://localhost:3306/dts4 user: userMySQL pass: passMySQL
Deployment –> start –> Add –> upload dtsjbosswildfly.ear
มาถึงขั้นนี้ เราจะสามารถเข้า DTS browser ได้แล้วที่
[ipเครื่องVMเรา]:8080/dtsserverws
Step 10: สร้าง Keystore
ขั้นนี้ต้องใช้ Windows โดยการดาวน์โหลด DTS Editor มาให้เรียบร้อยก่อน (อยู่ใน package เดียวกัน ดาวน์โหลดจากหน้า Download ของ Apelon เหมือนกัน) จากนั้นให้ลองรันโปรแกรมดู
ในขั้นตอนนี้จะ fail แต่ใน server เราจะมีการสร้างไฟล์ keystore ขึ้นมา ให้เราก็อปไฟล์นั้นมาเก็บไว้
scp root@[ipเครื่องVMเรา]:/opt/wildfly/standalone/configuration/application.keystore application.keystore
<DTS_HOME> ปกติคือ C:\Program Files\Apelon DTS 4.7.1\
ก็อปปี้ไฟล์ jboss-client.jar จาก <DTS_HOME>\lib\client\ แล้ววางไว้ใน <DTS_HOME>\lib\
put application.keystore in <DTS_HOME>
เปิด Command Prompt ด้วยสิทธิ์ admin แล้วไปที่ C:\Program Files\Apelon DTS 4.7.1\java\jre\bin\
พิมพ์คำสั่งต่อไปนี้
keytool -importkeystore -alias server -srckeystore "C:\Program Files\Apelon DTS 4.7.1\application.keystore" -destkeystore ..\lib\security\cacerts -trustcacerts
ใส่ข้อมูลต่อไปนี้
destination password: changeit
source password: password
มาถึงตรงนี้จริง ๆ ใช้ได้แล้ว แต่เราควรมีข้อมูลอะไรอยู่บ้างใน terminology server ของเรา
Step 11 (เสริม): Install Import Wizard
ในเว็บของ Apelon มี demo ของ LOINC ให้ download ได้ และเราต้องดาวน์โหลด plug-in ชื่อ ImportWizard มาจากหน้า Download แล้ว extract ไว้ใน <DTS_HOME>
หลังจากนั้นคงมีวิธีการ import บางอย่าง ที่ผมยังไปไม่ถึงเหมือนกันครับ
ณ ปัจจุบันผมก็เพิ่ง install ได้เท่านี้แหละครับ จริง ๆ เหมือนใน DTS เองก็มีอะไรอีกเยอะมากครับถ้าจะใช้ให้เต็มประสิทธิภาพจริง ๆ อย่างไรลอง explore กันดูครับ 😀
Hi Rath, Thats a good explaination. i have some questions reg dts installation.
1. I am installing dts in Docker and using the ubuntu as OS.
2. Is dts support Postgressql ?
3. how to connect dts with external database ?
4. How to integrate DTS with Hl7 ?
Thanks a lot, Pavan.