ติดตั้ง Apelon – Distributed Terminology System (DTS)

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 กันดูครับ 😀

Comments

  1. 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.

Leave a Reply

Your email address will not be published. Required fields are marked *