背景

ORCAとは日本医師会が無償で提供しているレセプトソフトである。 レセプトソフトは、医療機関が健康保険組合に診療報酬を請求するために不可欠なソフトウェアである。 レセプトソフトは、ORCA以外にもいろいろな電子カルテベンダーが提供している。 そのなかでORCAは、無償でAPIを提供しているほとんど唯一のレセプトソフトである。

筆者が開設した仙台東口メンタルクリニックはORCAをdocker上で動かしている。 今回は、このORCAをdockerで稼働させる方法を紹介する。

方法

まず、以下のようなディレクトリ構造を準備する。

localhost:~/projects/docker-orca$ tree .
.
├── docker-compose.yml
└── orca
     ├── Dockerfile
     ├── db.conf
     └── start.sh

docker-compose

docker-compose.ymlは、以下のようになる。

version: '2'
services:
  ###########
  # ORCA
  ###########
  orca:
    build: ./orca
    container_name: "orca-server"
    volumes:
      - "./tmp:/tmp"
      - /var/run/cups:/var/run/cups:ro
    ports:
      - 8000:8000
      - 5132:5432
    environment:
      - TZ=Asia/Tokyo
    privileged: true
    command: /etc/init.d/jma-receipt restart 

Dockerfile

docker-composeから呼びだされる DockerfileでORCAサーバーの構築法を定義する。

FROM ubuntu:16.04

# ORCAの管理者である ORMASTERのパスワードをXXXXXXXに設定します
ENV ORMASTER_PASSWORD=XXXXXXXX

# Install.
RUN \
  sed -i 's/# \(.*multiverse$\)/\1/g' /etc/apt/sources.list && \
  apt-get -yqq update && \
  apt-get -y upgrade
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y curl git man unzip vim wget syslinux-common sudo 
# データベース設定ファイルをコピーする
COPY db.conf /etc/jma-receipt/

RUN set -xe \
  && cd /tmp \
  && wget -q https://ftp.orca.med.or.jp/pub/ubuntu/archive.key \
  && apt-key add archive.key \
  && wget -q -O /etc/apt/sources.list.d/jma-receipt-xenial50.list https://ftp.orca.med.or.jp/pub/ubuntu/jma-receipt-xenial50.list \
  && apt-get -yqq update \
  && apt-get dist-upgrade -y \
  && apt-get install -y jma-receipt \
  && wget https://ftp.orca.med.or.jp/pub/data/receipt/outline/update/claim_update.tar.gz \
  && tar xvzf claim_update.tar.gz \
  && bash claim_update.sh \
  && service postgresql restart \
  && jma-setup \ 
  && /bin/echo -e "$ORMASTER_PASSWORD\n$ORMASTER_PASSWORD" | sudo -u orca /usr/lib/jma-receipt/bin/passwd_store.sh

RUN rm -rf /tmp/* /var/lib/apt/lists/*
VOLUME ["/tmp"]

EXPOSE 8000 5432

ADD start.sh /start.sh
ENTRYPOINT ["/start.sh"]

start.shは、以下のような内容となる。

#!/bin/bash
# c.f. https://github.com/y-yagi/jma-receipt-docker
service postgresql restart 
service jma-receipt restart

tail -f /var/log/dmesg

db.confではpostgresの基本的な設定を記述する。 最低限の設定は、以下のようにpostgresの文字コードを utf-8に設定することである。

DBENCODING="UTF-8" 

起動する

以上を準備すれば、ORCAサーバーの起動は下記コマンドを実行するだけである。

$ docker-compose up -d 

議論

dockerでORCAを管理することで以下のような利点がある。

  • バックアップが容易である
  • docker imageを利用することで、すぐに別のマシーンでサービスを利用できる

今回難航したのは、ORCAサーバーに接続されたプリンターから各種の文書を印刷する点であった。 いろいろと試行錯誤したのち、docker-compose.ymlに以下の記述を追加することで印刷が可能となった。 ただし、ORCAレセプトソフトを起動して、サーバーに接続されたプリンターを適切に設定する作業が必要となる。

    volumes:
      - /var/run/cups:/var/run/cups:ro

現在確認している問題点は、レセプトクライアント(glclient2)を起動後に「医療機関情報がない」というエラーが出ることである。

この問題に対する解決は、以下のようにORCAサーバーのdockerコンテナにログインして、そこで jma-receipt を再起動することである。

$ docker exec -i -t orca-server bash 
(ここでdockerコンテナ内にはいる)
root@3341259d5a50:/# /etc/init.d/jma-receipt restart
 * Restart jma-receipt
 * Stopping jma-receipt:
 * Stopping monitor:                                                                                                                                                     [ OK ]
 monitor
killall end.
.
I, [2017-09-03T01:34:31.458234 #480]  INFO -- : list_check
 * Starting jma-receipt:
 * Starting monitor:                                                                                                                                                     [ OK ]
 monitor.