Try   HackMD

FHIR 伺服器建置指南

說明

FHIR 有非常多伺服器端的實作,這邊使用的是 HAPI FHIR。這是一套由加拿大醫療研究組織 UHN 開發的 FHIR 伺服器,有一個還不錯用的前端管理介面,並且是 Open Source Project。

範例實作架構

如果你有多台主機

如果你只有一台主機

安裝 CentOS 8

CentOS 8 目前還在 Pre-Release 階段,不過已經相當穩定,軟體版本也比較新,可以投入在正式環境上使用。如果還是不放心的話,可以安裝 CentOS 7 就好。

CentOS 8 下載連結:http://isoredirect.centos.org/centos/8-stream/isos/x86_64/CentOS-Stream-x86_64-dvd1.iso

因為安裝方法跟安裝其他 OS 一樣,就懶得寫了,請自行安裝在實體伺服器上。

建置 MariaDB Server

安裝

MariaDB 是 MySQL 的 Open Source Alternative Solution,截至目前的穩定版本是 10.4 版,直接上 repo 然後安裝就好。

首先新增 repo 檔案:

$ vim /etc/yum.repos.d/mariadb.repo

然後貼入以下內容:

# MariaDB 10.4 CentOS repository list - created 2019-12-17 04:08 UTC # http://downloads.mariadb.org/mariadb/repositories/ [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.4/centos8-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1

然後安裝 Sever 後啟動:

# 新的 CentOS 8 跟 Fedora 一樣都改用 dnf 作為套件管理員 # 不習慣的話也可以繼續用 yum,效果是一樣的 # 安裝服務,並使用我們剛剛新增的 source repo 抓套件 $ sudo dnf install boost-program-options $ sudo dnf install MariaDB-server MariaDB-client --disablerepo=AppStream # 啟動服務 $ sudo systemctl start mariadb # 設定開機自動啟動 $ sudo systemctl enable mariadb

啟動後可以使用以下指令確認服務是否正確開啟:

$ sudo systemctl status mariadb

看到 Active: active(running) 代表成功了

初次設定

先進行初次設定:

$ sudo mysql_secure_installation Enter current password for root (enter for none): <初次啟動密碼為空,直接 enter 就好>

然後照著畫面指示操作,改完密碼整路 Y 到底,就完成初始化設定了。

新增資料庫

先登入資料庫:

# 登入 MariaDB server # 第一次登入通常使用者名稱使用 root 就好 # 本機登入的話,主機 IP 輸入 localhost $ mysql -h <主機IP> -u <使用者名稱> -p Enter Password: <輸入密碼>

新增使用者:

CREATE USER '<使用者名稱>'@'<FHIR 伺服器 IP>' IDENTIFIED BY '<密碼>';

新增資料庫並設定預設使用 utf8 編碼:

CREATE DATABASE <資料庫名稱> CHARACTER SET utf8 COLLATE utf8_general_ci;

將資料庫權限給使用者:

GRANT ALL PRIVILEGES ON <資料庫名稱>.* TO '<使用者名稱>'@'<FHIR 伺服器 IP>' IDENTIFIED BY '<密碼>';

套用更新:

FLUSH PRIVILEGES;

建置 Docer CE

HAPI FHIR 是使用 Java 寫成的,如果會自己架環境的話也可以直接安裝在 Jetty Server 上,考量到操作難易度與易用性問題,這邊會將 HAPI FHIR 封裝成 Docker Image 並跑在 Docker CE 上面。

安裝

Docker 目前有分要錢的 EE 跟社群版的 CE,我們安裝 CE 版本的就可以了。

新增 Repo 檔案:

$ sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

然後安裝並啟動服務:

# 安裝服務 $ sudo dnf install docker-ce --nobest -y # 啟動服務 $ sudo systemctl start docker # 設定開機自動啟動 $ sudo systemctl enable docker

測試 Docker 是否正確啟用

直接跑 hello world image 就好了:

$ sudo docker run hello-world

出現執行畫面就代表成功了

建置 FHIR Server

前置作業

安裝 git 與編譯環境後抓 HAPI FHIR Repo:

# 安裝 git $ sudo dnf install epel-release $ sudo dnf install git # 安裝編譯環境 $ sudo dnf install java-8-openjdk-devel $ sudo dnf install maven # 抓 repo $ git clone https://github.com/hapifhir/hapi-fhir-jpaserver-starter.git

配置組態

配置 Dockerfile 組態

$ vim hapi-fhir-jpaserver-starter/Dockerfile

將內容取代為以下設定:

FROM jetty:9-jre8-alpine USER jetty:jetty ADD ./target/hapi-fhir-jpaserver.war /var/lib/jetty/webapps/root.war EXPOSE 8080 # 可自訂監聽 Port

配置 FHIR Server 組態

打開組態檔:

$ vim hapi-fhir-jpaserver-starter/src/main/resources/hapi.properties

找到以下設定然後編輯:

fhir_version=R4 server_address=<伺服器位址> datasource.driver=com.mysql.jdbc.Driver datasource.url=jdbc:mysql://<資料庫位址>:3306/<資料庫名稱> hibernate.dialect=org.hibernate.dialect.MySQL5Dialect datasource.username=<資料庫帳號> datasource.password=<資料庫密碼>

執行

編譯後包成 docker image:

# 編譯 $ mvn clean package # 包成 Docker Image # 記得最後面的 . 要打 $ docker build -t <Image 名稱> .

從包好的 Image 建立一個 Instance:

# 如果剛剛 Dockerfile 有改監聽 port,就要把 8080 改掉 $ docker run -d -p <外部 Port>:8080 <Image 名稱> # 例如把伺服器開在主機的 3000 Port 上 $ docker run -d -p 3000:8080 hapifhir/r4

Docker CE 會回傳一組 ID,即代表這個 Instance 的 Container ID。

建置完成後,打開 http://<Server IP>:<外網 Port>,看到以下介面即代表成功:

另外也可以透過以下指令監看輸出:

# 附加至 Container 內查看 $ docker attach <Container ID> # 如果不知道 Container ID 也可以用以下指令查看 $ docker ps