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

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

Windows 8の仮想マシンHyper-VにCoreOSを入れ、そこでDockerという仮想化環境でRedmineを導入したところまで出来ました。今回はそのPCを院外ネットワーク(インターネット)側から院内ネットワーク(イントラネット)に移行するところを説明しようと思います。

CoreOS院内ネットワーク移行手順

インターネット環境でRedmineを整えた後、院内ネットワークへ参加させるには仮想マシンの仮想ネットワークスイッチの修正と、CoreOS上での設定変更が必要となります。

ちなみにRedmineのプラグインやテーマなどは院内環境(イントラネット)でも出来なくはないですが、インターネット環境に比べると手間がかかるので、導入したいプラグインやテーマが決まっている方はインターネット環境で導入してからこれからの作業を行って方が楽です。

仮想ネットワークスイッチの修正

  1. 新しい仮想ネットワークスイッチを作成し、イントラネットのネットワークアダプターを選択します。
    • 私の場合PCに無線と有線が付いていたので、無線でインターネット、有線でイントラネットに接続していたので、有線のネットワークアダプターを選択しました。
    • 有線のみもしくは無線のみの場合は、それぞれのネットワークアダプタの設定を変更してインターネットからイントラネットへの修正が必要です。
  2. ネットワークと共有センターからアダプター設定の変更を選びます。
  3. vEthernetとういHyper-V仮想イーサネットアダプタがあるので、ここでIPv4のプロパティを開き、院内ネットワーク用の設定を行います。
    • 私の場合設定後、仮想マシンをシャットダウンすると、外部からホストマシンへのpingが通るが、仮想マシンを起動するとホストマシンへのpingが通らなくなりました。恐らくこれは「管理オペレーティングシステムにこのネットワークアダプターの共有を許可する」にチェックが入っていなかったため、仮想マシン起動後にネットワークアダプターが仮想マシンのみに接続された状態になっているためだと思われます。

CoreOSでのネットワーク設定

さて、Hyper-Vのネットワークの設定は切り替えたので、次はCoreOSのネットワーク設定を行います。CoreOSでネットワーク設定を行う方法は2つあります。

  1. cloud-configの設定
  2. /etc/systemd/network下に設定ファイルを置く

ここでは2番目の設定で行います。

まずifconfigで設定するターゲットを確認します。

ifconfig
eth0:~~~~~
local:~~~~~

イントラネットに接続されているネットワークを確認したら、/etc/systemd/network/static.networkを作成します。

[Match]
Name=eth0

[Network]
Address=10.**.**.**/24
Gateway=10.**.**.254
DNS=10.**.*.*

作成後、仮想マシンの再起動か、下記コマンドでネットワーク設定の読み込みを行います。

sudo systemctl restart systemd-networkd

トラブルシューティング

上記のstatic.networkのアドレスを Address=10.**.**.** としていたところ、同一IP帯のアドレス帯からしかアクセスができないようになっていました。 そこでAddress=10.**.**.**/24とすることで、別拠点からのアクセスができるようになりました。

/24はサブネットマスクを示しており、255.255.255.0を指しています。 これを設定しないと、サブネットマスクが255.0.0.0になっていて、スイッチを介さず直接通信しようとして失敗するようです。

また、CoreOSがDockerとの通信で使用しているネットワークアドレス帯が私の環境では(172.17.0.1/16)になっていて別拠点がこのアドレス帯を使用していて通信ができない現象が発生しました。Dockerと通信するためのIP(bip:bridge ip)を以下で変更することでバッティングを回避することが出来ました。

sudo vim /etc/systemd/system/docker.service.d/docker.conf

# 以下を書き込み
[Service]
Environment="DOCKER_OPTS"=--bip=192.168.200.1/24"

# 以下コマンド実行
sudo systemctl daemon-reload
sudo systemctl restart docker.service

# redmineのDockerフォルダで以下を実行
docker-compose start

Redmine移行手順

無事にイントラネットに移行でき、しばらく運用していたのですが、ホストマシンがWindows 8.1で無償アップグレードでWindows 10にアップグレードすることにしました。そのためRedmineのデータを別PCに移行することにしました。

ここでは仮想マシンの環境ごと移行する方法と、チケットなどのデータのみを移行する方法を説明します。

環境ごと移行

移行先PCもHyper-Vを有効化しておきます。

  1. 仮想マシンで動いているRedmineのDockerを止めます。
    • docker-compose stop で止まるはずですが、止まりませんでした。
    • docker stop [コンテナID] で1つずつ止めました。
  2. Redmineが止まったことを確認したら、仮想マシンをシャットダウンします。Hyper-Vマネージャーで仮想マシンのエクスポートを行う。
    • チェックポイントから復元したいチェックポイントを選ぶとエクスポートの容量は少なくなります。
    • 仮想マシンの名前からエクスポートすると容量が大きくなります。(全てのチェックポイントを含むため)
  3. 移行先のPCへエクスポートしたフォルダを移動します。

ここからは移行先のPCでの操作

  1. 移行先のPCでHyper-Vマネージャを開き、仮想マシンのインポートを実行します。
  2. 移行元のPCからエクスポートしたフォルダを選択します。
  3. インポート種別を選択(仮想マシンをインプレースで登録するで良いと思います。)
  4. 移行元PCの仮想スイッチがなかった場合エラーになるが、特に気にしなくていいです。
    • チェックポイントの数だけエラーが出ました。
  5. 仮想マシンがインポートされたら、仮想マシンを起動します。
  6. 別のIPを使う場合は仮想マシンのネットワーク設定を編集します。
    • sudo vim /etc/systemd/network/static.network
    • 設定後ネットワーク設定再読み込み sudo systemctl restart systemd-networkd
  7. 設定後docker-compose.ymlがあるフォルダに移動(cd Redmine)
  8. docker-compose up -d を実行
  9. 無事にRedmineが見ることが出来れば移行完了です。

※移行後導入したプラグインの設定が反映されていなかったので、もう一度設定しなおしました。

データのみ移行(移行先で環境構築済み)

  1. データベースをバックアップ pg_dump -h localhost -p 5432 -U redmine -W -Fc -f redmine_db.dump redmine
  2. ファイルをコピー Redmineコンテナに入り、filesやpluginsなど使用しているフォルダをコピーします。 docker cpでコピーすると、シンボリックリンク形式でコピーされて、中身がない状態になるので"-L"オプションで実態をコピーします。 docker cp -L redmine_redmine_1:/home/redmine/redmine/files files[filesのディレクトリをコピー]
  3. 移行先のコンテナでデータベースをリストア 一度データベースを削除してから作り直してリストア
docker exec -it docker-redmine-config_postgresql_1 bash
su - postgres
dropdb redmine
createdb -T template0 redmine
pg_restore -d redmine redmine_db.dump
# Redmineのコンテナに入り、DBマイグレーションを行う。
core@coreos ~/docker-redmine-config $ docker exec -it docker-redmine-config_redmine_1 bash
root@f6220db80ea9:/home/redmine/redmine# bundle exec rake db:migrate RAILS_ENV=production
root@f6220db80ea9:/home/redmine/redmine# bundle exec rake tmp:cache:clear
core@coreos ~/docker-redmine-config $ docker restart docker-redmine-config_redmine_1
  1. 移行先でfilesなどのコピーしたフォルダを保存
  2. メールサーバ設定 今回新規導入したメールサーバ(postfix)はデフォルトだと、ドメインネーム解決が出来ずに、メール送信が行えませんでした。 なので、postfixに入り、/etc/postfix/main.cfを編集し、relayhostの項目にIPを記入することで、メール送信が出来ました。

tips

Redmine4系からデータベースの時間の形式が変わったみたいで、Redmine3系からのDBをそのままリストアするとチケットなどの時間がずれてしまう現象が発生しました。 修正する方法としては、redmineのコンテナに入り、redmine/configのapplication.rbを修正、config.active_record.defaultの値を[:utc]にすることで、正しい時間表示にすることが出来ました。

移行のまとめ

ネットワークの移行方法とRedmineのデータ移行の方法を説明しました。環境が変わることはそうそうないとは思いますので、忘れたころに見直したいと思います。

次回で現在の運用方法であるWindows Server 2019への環境構築を説明して、Redmineの環境構築は終わりになります。興味がある方は次の記事を是非見ていってください。