借助Orthanc快速建立一个属于你自己的 DICOM 服务器


本文章仅提供快速设置启用相关服务的配置方法,不涉及相关网络安全设置的内容。作者对依此文章进行配置后可能导致的网络安全漏洞问题不负责,需要相关安全配置的请自行查阅参考资料中的Doc自行配置。

最近由于身体原因,经常需要去医院拍X光片。总所周知,由于各种原因,现在很多医院已经不再提供激光胶片了,转而变为在云端提供电子胶片。
熟悉我的人都知道,由于一些原因,我是一个稍微有点极端的信息安全自持派,虽然云胶片是由医疗机构提供并储存的,但是出于信息安全我仍然希望可以对相关数据进行自有自持,因此我在进行了一大圈的搜索之后找到了 Orthanc 作为电子胶片的内网存储调阅服务器。

电子胶片与激光胶片的优劣

既然提到电子胶片那么就不得不提到电子胶片与传统激光胶片之间的优劣比较。
电子胶片相较于传统激光胶片,具有易储存、易转移、清晰度高、价格便宜等优势。在特定的放射影像拍摄产生原始数据后甚至可以通过原始数据进行反向建模重构,有效提高了放射影像的可读性与实用性;而传统激光胶片相对于电子胶片则是几乎完全没有什么性价比了,可视维度少,严重受制于打印机的分辨率,保存方式要求较苛刻。
由此可见在未来电子胶片将会是大势所趋,逐步替代传统激光胶片。

Orthanc 简介

Orthanc是一款开源、免费的独立 DICOM 服务器程序,旨在让用户专注于 DICOM 文件本身的内容而非其复杂的格式与协议。由于其采用了 mimiPACS 方式构建,所以用户并不需要花费大量的时间在数据库管理和第三方依赖的处理中。

快速安装 Orthanc 服务端

  1. 访问Orthanc下载页面找到适合你的系统的版本下载按钮,下载最新版本的安装包,此处以 windows 版本为例。
  2. 一路按默认安装流程进行程序安装
    安装程序界面
  3. 安装完成后即可访问Orthanc自带的Web管理界面
    Orthanc Explorer 2
  4. 通过管理界面左侧的上传按钮上传你通过当地的影像云平台/医疗机构获取的 DICOM 文件
    上传 DICOM 文件
  5. 通过管理界面自带的网页阅片器查看你的电子胶片

配置内网访问

此时,虽然你已经可以在本机上访问Orthanc Explorer 2了,但是细心的人肯定会注意到地址栏里写的是localhost而非本机的IP地址,并且当你尝试使用http://IP:8042/访问时也会发现浏览器完全不买账,这是因为 DICOM 服务通常并不对本机之外的设备直接提供服务,但是如果你需要的话也不是没有办法。

通过 Nginx 提供反向代理

Nginx 作为一款轻量的 Web 服务器也是我们的老朋友了,具体的安装过程便不再赘述。
通过 Nginx 为 DICOM 服务器提供反向代理提供服务是较为常见的方式,你只需要在你的 Nginx 配置文件(通常是./nginx/nginx.conf,如果你像我一样用了vhost的话那就是./nginx/vhost/<filename>.conf)里加入以下几行代码即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Server {
listen ...

location /dicom/studies {
proxy_pass http://127.0.0.1:8042/dicom-web/studies;
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
rewrite /orthanc(.*) $1 break;
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Origin' '*';
}
}

直接通过 Orthanc 提供服务(以 Windows 为例)

如果你懒得折腾这些东西,只是和我一样希望尽快使用Orthanc,那么你现在需要做这么几件事:

  1. 打开C:\Program Files\Orthanc\Configuration\,找到orthanc.json
  2. 找到"RemoteAccessAllowed" : false,,将false替换为true
  3. 找到"RegisteredUsers",在注释后换行按照"<Username>" : "<Password>"的格式设置你的账号密码

    此方式设置的账号密码采用 HTTP Basic Authentication 方式进行身份验证,安全性相对较差,如需更高级的安全身份验证请自行选用 Nginx 反代方式进行配置

  4. 于本机防火墙中开启 8042 端口的 TCP 入站放行
  5. Services.msc中手动重启Orthanc服务即可在内网内其他设备上使用http://IP:8042/的方式访问Orthanc数据库了

配置 DICOM 访问

不过,虽然通过这种方式可以做到直接通过 Web 进行访问了,不过为了搭配相关的阅片软件(如我在 iPad 上使用的 IDV - IMAIOS DICOM Viewer),我们还需要开启Orthanc的 DICOM 设置:

  1. 打开C:\Program Files\Orthanc\Configuration\,找到orthanc.json
  2. 找到"DicomAet"设置你的DICOM AET
  3. 找到"DicomPort"设置你的DICOM 端口,通常默认使用 4242
  4. 找到"DefaultEncoding"设置你的DICOM 文件编码,默认为Latin1
  5. 于本机防火墙中开启 4242 端口的 TCP 入站放行
  6. 保存并于Services.msc中手动重启Orthanc服务

此时你就可以在支持 DICOM 的程序中设置你的 DICOM 服务器的相关设置并尝试进行 echo 测试查看 DICOM 服务是否联通了
于 DICOM Viewer 程序中设置 DICOM 服务器信息
但是此时你仍然无法通过 DICOM 获取储存于Orthanc内的电子胶片,你还需要继续做如下配置:
7. 打开C:\Program Files\Orthanc\Configuration\,找到orthanc.json
8. 找到"DicomModalities",在注释后换行按照"<设备注释> : ["<阅读器的 DICOM AET>", "<阅读器设备的IP地址>", "<阅读器的 DICOM 端口>"]"的格式设置你的阅读器信息
9. 保存并于Services.msc中手动重启Orthanc服务
之后你便可以通过内网中的其他设备上支持 DICOM 协议的程序进行阅片了

参考资料

About Orthanc - Orthanc Offical
Orthanc Book - Orthanc Offical