ALMiniumをいい感じにバージョンアップする方法

本記事では、ALMinium (https://github.com/alminium/alminium) を適切にバージョンアップする手順について解説します。

はじめに

ALMinium(およびそれを構成する各種アプリケーション)は、日々進化を続けています。よって、一度構築したALMiniumをしばらく運用すると、培ったデータはそのままで、最新のALMiniumにバージョンアップしたいという状況がしばしば発生します。
ALMiniumのバージョンアップについては、正しい手順(というと語弊がありますが、何もエラーを発生させずにすんなりバージョンアップする手順)を解説しているサイトが見つからなかったので、私が実際に使用しているバージョンアップ手順を紹介したいと思います。

免責

本記事は、2013年8月末時点において有効な手順であることを確認しています。それ以降のバージョンでは、必ずしも本記事のとおりの手順ではうまくいかない可能性があることをご承知おきください。
また、ALMiniumと同時にJenkinsをインストールすることは想定していません(Jenkinsのデータ引継ぎに関しては本記事では一切触れていません)。

大まかな流れ

バージョンアップ手順は、大まかには以下の流れで実施します。

  1. 旧ALMiniumで培った全データのバックアップ
  2. 新しいマシンに最新のALMiniumをインストール
  3. データベースの復旧とマイグレーション(取り込んだデータを最新のALMiniumに適合する形式に変換)
  4. その他のデータの復旧

1. 旧ALMiniumで培った全データのバックアップ

バックアップが必要なのは、以下のデータです。

  • データベース: MySQLのデータ
  • リポジトリ: /var/opt/alminium 配下
  • Redmineにアップロードされたファイル: /opt/alminium/files 配下

以下は、バックアップのコマンド例です。

# mysqldump -u alminium -palminium alminium > /path/to/backup/alm_db_dump.sql
# cd /var/opt/alminium
# tar czvf /path/to/backup/alm_scm.tar.gz ./ > /dev/null
# cd /opt/alminium/files
# tar czvf /path/to/backup/alm_files.tar.gz ./ > /dev/null

上記コマンド例では、MySQLダンプを alm_db_dump.sql、全リポジトリを alm_scm.tar.gz、Redmineにアップロードされた全ファイルを alm_files.tar.gz として保存します。
私の場合、上記コマンド例をベースとしたバックアップ用スクリプトを作成して、cronで定期実行するようにしています。バックアップの保存先はファイルサーバーにしています。

2. 新しいマシンに最新のALMiniumをインストール

おそらく、大半の方がALMiniumの構築では仮想マシンを使用しているかと思います。それは正しい選択です。バージョンアップの度に新しいマシンが必要になりますので。

新しいマシンを用意して、最新のALMiniumを新規インストールします。インストール後は、あとの作業のため、Apacheを停止させておきましょう。

# service httpd stop

なお、ALMiniumと同時にJenkinsをインストールすることもできますが、ALMiniumのバージョンアップ作業が煩雑になりそうな印象があるので、私はインストールしないことにしています。Jenkinsが必要であれば、別マシンで構築して、HudsonプラグインRedmineと連携させるのがスマートではないでしょうか。

3. データベースの復旧とマイグレーション(取り込んだデータを最新のALMiniumに適合する形式に変換)

先ほどバックアップしたデータのうち、MySQLのデータベースを、新しいマシンに取り込みます。取り込む前に、ALMiniumインストール時に作られているデータベースを空にしておく必要がありますので気をつけてください。

以下は、データ取り込みのコマンド例です。

# mysql -u alminium -palminium -e "drop database alminium; create database alminium;"
# mysql -u alminium -palminium alminium < /path/to/backup/alm_db_dump.sql

取り込み完了後は、マイグレーションを実行して、取り込んだデータを最新のALMiniumに適合する形式に変換します。
以下は、マイグレーションのコマンド例です。

# cd /opt/alminium
# rake db:migrate RAILS_ENV=production
# rake redmine:plugins:migrate RAILS_ENV=production

特にエラーは発生しないはずです。

これで、データベースの復旧が完了しました。

4. その他のデータの復旧

最後に、リポジトリや、Redmineにアップロードされたファイルの復旧を行います。
以下は、データ復旧のコマンド例です。

# rm -rf /var/opt/alminium
# mkdir /var/opt/alminium
# cd /var/opt/alminium
# tar xvf /path/to/backup/alm_scm.tar.gz ./ > /dev/null

# rm -rf /opt/alminium/files
# mkdir /opt/alminium/files
# cd /opt/alminium/files
# tar xvf /path/to/backup/alm_files.tar.gz ./ > /dev/null

これでデータの復旧が完了しました。Apacheを起動して、ALMiniumにアクセスしてみましょう。

# service httpd start

これまでに経験したトラブル事例

Backlogsプラグインマイグレーションがうまくいかない

MySQLのバックアップを取り込む前には、ALMiniumインストール直後のデータベースを一旦削除&再作成して、空にしておく必要があるようです。これを怠ると、何もBacklogsプラグインに限ったことではないと思いますが、正常にマイグレーションできません。要は、新しい形式のデータと古い形式のデータは混ぜてはいけないということです。

チケット一覧におけるチケットの色がおかしくなった

チケットの色に関する仕様が、Redmine 2.1から変更されています。よって、Redmine 2.0以前のALMiniumからバージョンアップすると、チケットの色が正しく表示されなくなることがあります。
Redmine 2.2からは、2.0以前と2.1以降とでチケットの色を統一できるように、テーマの仕様が拡張されました。しかし、2013年8月末時点のALMiniumでは、同梱されているデフォルトのテーマ(Gitmike)が古いものから更新されておらず、拡張仕様に対応されていません。

対処としては、自分で最新のGitmikeに差し替えることで、チケットの色を正しく表示できるようになります。
最新のGitmikeテーマは以下からダウンロードできます。
https://github.com/makotokw/redmine-theme-gitmike

差し替え対象は以下の場所です。

/opt/alminium/public/themes/gitmike

以上、皆様のALMiniumライフのご参考になれば幸いです。