院内(イントラネット)環境にRedmineを導入するまでの道のり

院内ヘルプデスクDocker, Redmine, イントラネット

私が病院に入職して初めに感じた問題点が、業務内容の報告や連絡がほとんど口頭ベースで行われていて記録として残っていないことでした。 そのため一度対応した内容でも担当者が異なると、解決方法が分からず前回の担当者に聞ければいいのですが、知らないとまた解決するのに時間がかかってしまいます。 先輩の「ここの業務は師から弟子への一子相伝のようなものだからね~」と言っていたのが印象に残りました。

そこで以前の会社で使用していたRedmineというプロジェクト管理ツールを部署に導入しようと思い試してみることにしました。Redmineについては今回説明を省きます。詳しく知りたい方はこちらをご参照ください。 結果から言うと無事にRedmineの導入に成功し、現在では部署だけではなく別拠点の部署でも使ってもらえるようになりました。

病院という情報漏えいなどセキュリティに厳しい場所でどのように導入できたのかご紹介します。

環境

セキュリティ対策のためインターネットに繋がる回線と病院内だけのネット(イントラネット)の2種類があります。 普段はイントラネットで電子カルテなどを使って業務を行っているので、インターネットPCに移ってRedmineをしなくても済むようにイントラネットの方に環境を作ります。

また、システム課にはプログラム開発が快適にできるように、他の職員のマシンスペックとは群を抜いて良いPCが支給されていました。

スペックシステム課一般職員
メモリ32GB4~8GB
ストレージSSD:160GB、HDD:1TBHDD:320GB
CPUCore i7Core 2 Duo~Core i5
OSWindows 8.1Windows7 or Windows 10

実際使い勝手はよかったのですが、院内ネットワークには繋がっておらずプログラム開発の案件がないとただのネットサーフィンマシンとなっていて正直持て余していました。 そこで、このPCを院内ネットワークに組み込むとともに贅沢なスペックを何かに生かすことはできないかと考え、Redmineを導入することを検討しました。

導入までの流れ

作成した流れとしては以下のようになっています。内部の事情で作業が多くなってしまいました。

  1. 仮想マシンへのCoreOSインストール
  2. CoreOS上でDockerを利用したRedmine導入(←この記事ではここまで)
  3. CoreOS院内ネットワーク移行
  4. Redmine移行手順
  5. 仮想マシンからWindows Server 2016への移行
  6. Windows Server 2019への移行

仮想環境にRedmineを導入

Windows8(Pro)以上からはHyper-Vという仮想マシンのソフトが使えます。デフォルトでは無効になっていたので「アプリと機能」から有効化しておきます。

今回仮想マシンに使うOSはCoreOSというLinux系のOSを使いました。これはDockerというコンテナという仮想環境を扱えるOSです。つまりHyper-Vという仮想マシンにOSを入れて、さらにその中に仮想環境を作ります。

なぜこのようなめんどくさいことをやるかというと、Hyper-VとDockerという仮想環境に興味があったのと、Redmineの導入が初めてだったので失敗してもやり直しやすい仮想環境で作りたかったからです。

それではCoreOS公式サイトからISOをダウンロードしておきます。

今回導入したCoreOSのバージョンは以下の通りです。

core@coreos ~ $ cat /etc/os-release
NAME="Container Linux by CoreOS"
ID=coreos
VERSION=2079.4.0
VERSION_ID=2079.4.0
BUILD_ID=2019-05-15-0808
PRETTY_NAME="Container Linux by CoreOS 2079.4.0 (Rhyolite)"
ANSI_COLOR="38;5;75"
HOME_URL="https://coreos.com/"
BUG_REPORT_URL="https://issues.coreos.com"
COREOS_BOARD="amd64-usr" ##別マシンで確認したのでCPUの表示は異なっています。

CoreOSのインストール

Hyper-Vマネージャーを立ち上げて、「仮想スイッチマネージャー」- 「新しい仮想スイッチ」 – 「外部」を作成します。この時Dockerインストールなども考えてインターネットに接続できるネットワークを選択しました。

次に仮想マシンを作成します。設定内容は主に以下の通りです。

  • 仮想マシン世代:第1世代
  • メモリの割り当て:2048MB(動的メモリにチェック)
  • ネットワークの構成:作成した仮想ネットワークスイッチを選択
  • インストールオプション:イメージファイルをダウンロードしたISOに指定

設定を終えた後に仮想マシンを起動させます。この時はまだCD(ISO)ブートの状態です。 起動した後、ログインユーザとパスワードを設定します。

sudo passwd core
# デフォルトのcoreというユーザにcoreというパスワードを設定しています。

Hyper-Vマネージャーのコンソールは使いづらかったのでユーザ・パスワードを設定したらTeraTermなどのターミナルソフトでログインすると操作が楽です。(私はRloginというソフトを使いました。)

そのあとユーザパスワードのハッシュ値を取得します。

openssl passwd -l
# $1xxxxxxxxxxxxxxxxxxxxxというハッシュ値が表示されるのでコピーしておきます。

取得したハッシュ値を使い、cloud-config.ymlというローカルインストール時の初期設定定義ファイルを作成します。

#cloud-config
hostname: "coreos"

coreos:
units:
   - name: etcd.service
    command: start

users:
 - name: core
  passwd: $1xxxxxxxxxxxx

write_files:
 - path: /etc/resolv.con
  content: |
      nameserver 8.8.8.8

作成したらローカルディスクにCoreOSをインストールします。

sudo coreos-install -d /dev/sda -V current -c ./cloud-config.yml

インストール処理が進みますので完了後、仮想マシンを一度シャットダウンし、ISOのマウントを解除して仮想マシンを再起動します。 CoreOS起動後、作成したユーザーパスワードcore/coreでログイン出来たらインストール完了です。Dockerコマンドが既に使えるようになっています。

Redmine導入

仮想マシンへのCoreOSインストールが完了したら、Hyper-Vマネージャーでチェックポイントを作っておくと良いです。この先、設定を失敗してもチェックポイント作成時点に戻れるので節目節目で残しておくと安心です。

Dockerが使えるようになっていると思いますが、いくつものコンテナを管理するのは手間になります。そこで、Docker-Composeというのを導入すると楽に管理ができます。 Docker-composeとはdockerの仕様書や設定ファイルの通りにイメージの取得や設定、コンテナの作成・実行を行ってくれるツールです。これを使うと、Dockerで1つずつイメージの取得やコンテナの作成をする必要がなく、まとめてコマンド一つで行ってくれます。 ということで、最初にDocker-composeを導入します。

下記のコードを順番に実行します。

COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep 'tag_name' | cut -d\" -f4)
OUTPUT_PATH="/opt/bin"
sudo mkdir -p /opt/bin
sudo curl -L "https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o ${OUTPUT_PATH}/docker-compose
sudo chmod +x ${OUTPUT_PATH}/docker-compose
docker-compose -v

最後にdocker-composeのバージョンが表示されればインストール完了です。

さていよいよRedmineの導入です。Redmine用のフォルダを作り、そこにdocker-compose.ymlを作成します。

mkdir redmine
touch docker-compose.yml

docker-compose.ymlの構文はまだいまいち分かっていないので色々なサイトを参考にして下記のように設定しました。

version: '2'

services:
postfix:
  image: 'catatnight/postfix'
  ports:
     - '25:25'
  environment:
     - maildomain=test.com
     - smtp_user=notification-redmine:006480
memcached:
  image: 'sameersbn/memcached:latest'
  ports:
     - '11211:11211'
   restart: always
postgresql:
  image: 'sameersbn/postgresql:latest'
  environment:
     - DB_USER=redmine
     - DB_PASS=admin123
     - DB_NAME=redmine
  volumes:
     - /srv/docker/redmine/postgresql:/var/lib/postgresql
redmine:
  image: 'sameersbn/redmine:latest'
  depends_on:
     - postgresql
     - postfix
     - memcached
  ports:
     - "10083:80"
     - "10443:443"
  volumes:
     - /srv/docker/redmine/redmine:/home/redmine/data
  environment:
     - TZ=Asia/Tokyo
     
     - DB_ADAPTER=postgresql
     - DB_HOST=postgresql
     - DB_PORT=5432
     
     - DB_USER=redmine
     - DB_PASS=admin123
     - DB_NAME=redmine
     
     - REDMINE_PORT=10083
     - REDMINE_HTTPS=false
     - REDMINE_CONCURRENT_UPLOADS=2
     
     - REDMINE_RELATIVE_URL_ROOT=/redmine
     - REDMINE_SECRET_TOKEN=
     - REDMINE_SUDO_MODE_ENABLED=false
     - REDMINE_SUDO_MODE_TIMEOUT=15
     
     - REDMINE_BACKUP_SCHEDULE=weekly
     - REDMINE_BACKUP_EXPIRY=
     - REDMINE_BACKUP_TIME=
     
     - MEMCACHE_HOST=memcached
     - MEMCACHE_PORT=11211
     
     - SMTP_ENABLED=true
     - SMTP_METHOD=smtp
     - SMTP_DOMAIN=test.com
     - SMTP_HOST=postfix
     - SMTP_PORT=25
     - [email protected]
     - SMTP_PASS=redminepasswd
     - SMTP_STARTTLS=false
     - SMTP_AUTHENTICATION=:login

上記の内容でRedmineのメールを送信するメールサーバ(postfix)、高速化に寄与するキャッシュサーバ(memcached)、データベースサーバ(postgresql)、Redmine本体のサーバ(nginx?)が導入されます。しかもそれぞれ設定されて使える状態になります。

上記のdocker-compose.ymlを作成したフォルダで以下のコマンドを実行するとRedmineが立ち上がります。

docker-compose up -d

トラブルシューティング

ここまで進む際にいくつか問題に当たったので解決法を残します。

  • インターネットに接続できない
    • インターネットに接続できない場合は、一度仮想マシンをシャットダウンして、ホストマシンであるWindowsも再起動して試したところ無事につながりました。
  • SSH接続でWARNING: REMOTE HOST IDENTIFICATION HAS CHANGEDと表示され接続を拒否される
    • 仮想マシンを何度か作りなおしてる作業で、ホストに接続するとknown_hostsに記憶され、接続時に以前と違うマシンだと認識される。その場合は下記コマンドで接続情報の上書きをすることで接続することができる
    ssh-keygen -R IPアドレス

まとめ

ここまででRedmineのインストールは完了です。CoreOSにdocker-composeやRedmineの環境をダウンロードするのにインターネット環境が必要だったんです。なのでこの時点ではまだインターネットに接続されていて院内(イントラネット)にはまだ入っていないです。

長いような感じはしますけど何度も作っていくと慣れてきて結構簡単に環境構築出来るようになっていました。