2017年3月9日木曜日

bitnami の redmine から、 docker-redmine に移行した話 (方法など)


プロジェクトで使用していた、Redmineを使ったチケット管理システムを移行したお話。


もくじ



bitnami redmine

一時的にしか使わないから。
そんな理由で、さらっとインストールが完了する
を使っていました!
はい。当時は重宝しました!

その後、プロジェクトは長引き・・・
Redmineの保守もしていかなくてはいけない状態。

運用エンジニアとしては、Redmineのアップデートにも簡単に追随したくなるものです・・・。

でも、bitnami-redmine ほぼすべてのコンポーネントを内包しているのと、独自設定を入れたりしていると
なかなかに アップデートが大変 でした。

前提条件

まずは前提条件を整理しますね。
  • Docker Host ・・・ Container Linux(CoreOS)
  • Redmine ・・・ Dockerホストとファイル共有出来る、簡単にアップデート可能(メンテナンス性重視)
  • Redmine plugin ・・・ いくつか使用している (bundle install必要なものもある)
  • DB ・・・ MySQL Container
  • URL ・・・ 「/redmine」でアクセスしたい、HTTPS必須
  • その他(将来できたらいいな) ・・・ memcached, gitlab連携(/gitlabとかでアクセスしたい),
こんな感じの前提条件でした。

sameersbn/docker-redmine に出会うまで

最終的に、 sameersbn/docker-redmine: Docker Image for Redmine に落ち着きました!

そこに至るまでいろいろ検討してみました。
上記であげたDocker imageは、僕の要件に合いませんでした。

検討して合わなかった理由

  • Bitnami Docker Image for Redmine
  • オフィシャル Redmine Docker Image
この2つのDocker Image なんですが。
  • Redmine plugin ・・・ いくつか使用している (bundle install必要なものもある)
  • URL ・・・ 「/redmine」でアクセスしたい、HTTPS必須
主に、この2つを実現するのが大変だったので、採用を見送りました。 (2017年3月時点)

「sameersbn/docker-redmine」 が運用まで考えられてて、すごすぎる!

は、神イメージでした!w

他のDocker imageにない運用助かる~機能として、
  • 自動バックアップ機能
  • 自動プラグインインストール(bundle install や rake migrationなど)
    • インストール前後のスクリプト実行も可能
  • Cron機能

本編の移行作業です!


Container Linux(CoreOS)

Container Linux(CoreOS) の起動です。
クラウドのものを使うとめちゃ簡単なので。

おススメの IDCFクラウド のものを使いましょー(非公式サポートみたいですけどw)
立ち上げて、SSHできるようにするまでしているものとします!汗 (; ・`д・´)

Docker-Compose をインストール

docker-composeで制御することにしたので、 docker-composeが必要です。

Container Linux(CoreOS) stableが 執筆時点では 「docker engine 1.12」だったので、 docker-composeは「1.9.0」を使うことにしました。
気に入らない方は、お好みで新しいものをお使いください。
if [ ! -d /opt/bin ]; then
    mkdir -p /opt/bin
fi

export DC_VERSION=1.9.0
curl -L https://github.com/docker/compose/releases/download/${DC_VERSION}/docker-compose-`uname -s`-`uname -m` > /opt/bin/docker-compose
chmod +x /opt/bin/docker-compose
docker-compose -v

サンプルの設定ファイルをダウンロードしてくる

今回使った、 docker-compose.ymlをgithubにアップしました。
git clone https://github.com/snickerjp/docker-redmine-config.git

起動確認してみる

docker-composeを使った起動です。
まず、動くか確認です。
docker-compose -f docker-redmine-config/docker-compose.production.yml up
これで、「docker pull」後の、起動までやってくれるはず。


exit 1
が返ってこなければ。OKです!
Ctrl-C
で、一度抜けます。

ファイルをコピーする

Dockerが使うところに「bitnamiから移行する、ファイル」をコピーします。

一例として
  • Redmineのmysql ダンプSQL
  • Redmineの pluginsフォルダ
  • Redmineの filesフォルダ
  • Redmineの themesフォルダ
  • (参考資料)Redmineのconfigフォルダ
  • (必要なら)SSL証明書

コピー先は、 docker-compose.production.yml の 「volumes」 に書いてあります。
Redmineだとこちら。
    volumes:
      - /srv/docker/redmine/redmine:/home/redmine/data

「:」の左がDockerHostのPath [/srv/docker/redmine/redmine] です。

こんな構成にファイルを入れていきます。
/srv/docker/redmine/redmine
|--backups
|--dotfiles
|--files ・・・元のところからコピーしていれる
|--plugins ・・・元のところからコピーしていれる
|--themes
|--tmp


MySQLのデータを入れる

  • MySQLのダンプを作っておく
[bitnami path]/mysql/bin/mysqldump bitnami_redmine > /tmp/mysql-dump.sql
  • MySQLのダンプをコピーしておく
/srv/docker/redmine/mysql/
あたりに、さっきのdumpファイルを置いておく
  • RedmineのDBを作成
docker-compose -f docker-redmine-config/docker-compose.production.yml start mysql
core@docker-host01 ~ $ docker ps
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                                           NAMES
7759126a09ae        sameersbn/mysql:latest       "/sbin/entrypoint.sh "   20 hours ago        Up About a minute   3306/tcp                                        dockerredmine_mysql_1
NAMESを確認しておく

containerに接続
docker exec -it dockerredmine_mysql_1 bash
mysql bitnami_redmine < mysql-dump.sql
exit
exit


もう一度動作確認

docker-compose -f docker-redmine-config/docker-compose.production.yml up
exit 1
が返ってこなければ。OKです!

いろいろ調整

もともとの 「sameersbn/docker-redmine」にないものを使っているので、そちらを微調整

一度、他の使っているDocker Imageの紹介
役割コンテナ
ロードバランサ(lb/nginx)bitnami/nginx
メール(postfix)catatnight/postfix
キャッシュ(memcached)sameersbn/memcached
DB(MySQL)sameersbn/mysql

ロードバランサ(lb/nginx)の調整

以下にファイルが保存されるので、必要に応じて変更
/opt/bitnami/nginx_data
|--conf
|  |--bitnami
|  |  |--certs
|  |  |  |--server.crt
|  |  |  |--server.key
|  |--vhosts
|  |  |--[カスタム]の.conf


サンプルのconf作っておきました。
nginx-vhost.conf ですー

これで、移行できていると思いますーw

追記: 自動起動設定

自動起動を設定していますので、こちらを参照ください。
Container Linux(CoreOS) で、 docker-redmine を自動起動する | 元うなぎ屋

まとめ

  • 「sameersbn/docker-redmine: Docker Image for Redmine」、まじ神イメージ
  • DockerImageが更新されれば、Redmineの更新ができる!
  • ファイルは共有ストレージに入れたいなー!とか、バックアップはオブジェクトストレージに保存したいなーとか、課題が見つかりました!


Zenback