FHIR 有非常多服务器端的实作,这边使用的是 HAPI FHIR。这是一套 FHIR 的服务器,有一个还不错用的前端管理介面。HAPI FHIR 早期由加拿大医疗研究组织 UHN 开发,後来发展成 Open Source Project 并有自己的专案开源社群,使用的也是很友善的 Apache 2.0 授权条款,可以拿来作为商业用途。
这篇文将会使用 Rocky Linux 8.4 做为教学用的系统,Rocky Linux 8 简单来说是 CentOS 8 的替代版本,用起来一模一样,如果你没看过,现在让你看看:
Rocky Linux 8 官方网站:https://rockylinux.org/zh-tw/
如果你有在使用 VMWare、VirtualBox 等虚拟化平台,可以考虑改用 Proxmox VE。他是一个开放原始码的虚拟化平台,并提供一个类似 VMWare vCloud 的 Web 管理工具。你可以在上面开 QEMU VM 跟LXC Container,也可以在上面实现 Ceph、HA Cluster 等机制,全部都滑鼠点一点就好。
Proxmox VE 上面已经有 Rocky Linux 8 的 LXC Image,直接抓下来开就行了,请参考以下说明,或是你也可以参考 Jason(Proxmox VE 专家,江湖人称"节神")的系列文章:
Proxmox VE 官方网站:https://pve.proxmox.com/wiki/Main_Page
节省工具箱部落格:https://blog.jason.tools/
由於本篇文章是比较新手向的教学,目标是给完全没接触过 HAPI FHIR 架设的初学者使用的(当然建议还是要知道怎麽操作 Linux 作业系统),在接下来的教学中,你将学会如何从官方的 GitHub Repository 把 HAPI FHIR 服务器抓下来,设定好 PostgreSQL 资料库後,直接把服务器跑起来。
下面会详细纪录每个安装步骤以及指令,这篇很长,你忍一下。
如果你懒得自己架设,台湾也有公开测试服务器,请参考:https://hapi.fhir.tw
安装 EPEL8 扩展套件库并更新系统,中间会跳出提示,直接 y 到底就好
$ dnf install epel-release -y
$ dnf update -y
安装 PostgreSQL 套件库,中间会跳出提示,直接 y 到底就好
$ dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
$ dnf update -y
把内建的 PostgreSQL 套件库停用
$ dnf -qy module disable postgresql
安装 PostgreSQL 14 服务器(写这篇文的时候刚好 14 stable 版本 release 出来了,就直接用这个版本吧!)
$ dnf install postgresql14 postgresql14-server -y
安装好之後确认一下 PostgreSQL 版本对不对
$ psql -V
开始之前要先初始化 PostgreSQL 14 资料库
$ /usr/pgsql-14/bin/postgresql-14-setup initdb
确认版本没问题後,就可以启动并设定开机自动启用
$ systemctl enable postgresql-14
$ systemctl start postgresql-14
检查一下 PostgreSQL 是否正常启动
$ systemctl status postgresql-14
安装好後,PostgreSQL 预设会帮你建立一个叫 ==postgres== 的使用者,记得先改密码
$ passwd postgres
切换到 postgres 这个使用者
$ su - postgres
改资料库管理员 ==postgres== 的预设密码
$ psql -c "ALTER USER postgres WITH PASSWORD '新密码';"
显示 ALTER ROLE 代表有改成功
注意
这边密码设 1234 是只做教学展示用途,好孩子请不要学,否则你的资料库会被打到不要不要的 ˊ_>ˋ
连线进去资料库
$ psql
进来後你会看到这样的提示:
新建使用者
$ create user fhir with encrypted password 'hapifhir';
# 语法长这样
$ create user 使用者名称 with encrypted password '密码';
注意
还是要强调,密码请设定强密码,否则你的资料库会被打到连你老板都认不出来 ˊ_>ˋ
新建资料库
$ create database hapifhir with owner fhir template template0;
# 语法长这样
$ create database 资料库名称 with owner 资料库拥有者名称 template template0;
将所有权限给这个使用者
$ grant ALL privileges on database hapifhir to fhir;
# 语法长这样
$ grant ALL privileges on database 资料库名称 to 使用者名称;
设定资料库时区为台湾时区
$ alter database hapifhir set timezone to 'ROC';
# 语法长这样
$ alter database 资料库名称 set timezone to '时区代码';
上面全部设定完之後就退出 PostgreSQL 并退出 postgres 帐号
postgres=# \q
$ exit
我们会直接使用最新版的 HAPI FHIR 服务器,并设定使用 R4(FHIR 4.0.1) 版本。
因为这个是用 Java 写的,所以会需要准备 Java 跟 Maven 环境。另外各版本 HAPI FHIR 支援的 Java 版本都不一样,记得参考以下网站:
https://hapifhir.io/hapi-fhir/docs/getting_started/versions.html
在最新版本的 HAPI FHIR 里面,官方虽然将最小 Java 版本订为 Java 8,不过实际上 Java 8 会编译失败,因此要改用 Java 11 或是 Java 16,这边我们以 Java 11 为例。
安装必要套件
$ dnf install -y vim git make gcc gcc-c++ tmux
安装 Java 11(你也可以试试看 Java 16) 跟 Maven
$ dnf install java-11-openjdk-devel maven
由於 Maven 3.5.4 预设使用 Java 8,因此要把版本切换回 Java 11
$ alternatives --config java
$ alternatives --config javac
让 Maven 预设使用 Java 11
$ vim /etc/profile
最下面加入这行
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
让他生效
$ source /etc/profile
从 GitHub 把 Repository 抓下来
$ git clone https://github.com/hapifhir/hapi-fhir-jpaserver-starter.git
设定 HAPI FHIR Server 组态
$ cd hapi-fhir-jpaserver-starter/
$ vim src/main/resources/application.yaml
把资料库改为 PostgreSQL 并设定连线资讯
spring:
datasource:
url: 'jdbc:postgresql://localhost:5432/hapifhir'
username: fhir
password: hapifhir
driverClassName: org.postgresql.Driver
设定使用 FHIR R4 版本:
hapi:
fhir:
### This is the FHIR version. Choose between, DSTU2, DSTU3, R4 or R5
fhir_version: R4 # 指定使用 FHIR R4(也可以改其他版本)
server_address: http://<服务器URL>/fhir # 设定服务器 URL
default_encoding: JSON # 预设使用 JSON(也可以改 XML)
default_pretty_print: true # 预设格式化输出
default_page_size: 20 # 预设搜寻结果分页数量(选填)
graphql_enabled: true # 启用 GraphQL(选填)
cors: # 启用 CORS 设定(选填)
allow_Credentials: true
allowed_origin:
- '*'
tester:
home:
name: Local Tester
server_address: 'http://<服务器URL>/fhir' # 设定服务器位址
refuse_to_fetch_third_party_urls: false
fhir_version: R4
validation: # 设定服务器端验证(选填)
requests_enabled: true
responses_enabled: true
进入 tmux 虚拟视窗
$ tmux
编译成 war 可执行档,编译後会放在 target/ROOT.war 里面
$ mvn clean package spring-boot:repackage -Pboot
上面这条指令预设以 Single Thread 模式执行,如果你的主机是多核心,也可以加入-T <thread>
参数,几核心就打多少数字,像这样:
$ mvn clean package spring-boot:repackage -Pboot -T 20
看到 BUILD SUCCESS
就代表编译成功了
用 Java 执行
$ java -jar target/ROOT.war
只要不跳错误,并且看到 Completed initialization in ....ms
这行就代表启动成功了
服务器预设会开在 8080 Port,请直接打开浏览器输入 http://<IP>:8080
即可看到 HAPI FHIR 页面
大家好,来到 IT 铁人赛最後一天了,终於要进入尾声了! 今天我们要整合这三十天来所学到的知识量,...
前言 该系列是为了让看过Vue官方文件或学过Vue但是却不知道怎麽下手去重构现在有的网站而去规画的系...
今天,我们要来示范如何去还原存在 Glacier 里头的档案,并观察整个过程所需的时程。 Glac...
一般情况下,使用 computed 比起 watcher 更简洁,如下: new Vue({ dat...
#使用 margin(向外)、padding(向内) 来推挤距离 css: .box{border:...