プロジェクトで使用していた、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 に落ち着きました!そこに至るまでいろいろ検討してみました。
- Bitnami Docker Image for Redmine ・・・bitnami/bitnami-docker-redmine: Bitnami Docker Image for Redmine
- オフィシャル Redmine Docker Image・・・https://hub.docker.com/_/redmine/
検討して合わなかった理由
- Bitnami Docker Image for Redmine
- オフィシャル Redmine Docker Image
主に、この2つを実現するのが大変だったので、採用を見送りました。 (2017年3月時点)
- Redmine plugin ・・・ いくつか使用している (bundle install必要なものもある)
- URL ・・・ 「/redmine」でアクセスしたい、HTTPS必須
「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_1NAMESを確認しておく
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の更新ができる!
- ファイルは共有ストレージに入れたいなー!とか、バックアップはオブジェクトストレージに保存したいなーとか、課題が見つかりました!