会社で Redmine の環境を移行することになったので、そのメモです。
概要
- 現在の Redmine が 3.4.2 なので、移行ついでにアップデートする
- 移行先では docker 上で Redmine を動作させる
- DB は MySQL
事前準備
まずは現在使用しているプラグインなどが、最新の Redmine で動作するかをチェックしておきます。
具体的には、docker で各バージョンの Redmine を起動し、プラグインをインストールして使えるかを逐一チェックしていきました。
こんなの docker 使わないとやってられんね。
んで、調査の結果、現在の最新の 4.2 では動作しないプラグインがあったので、それが動作する 4.0 にアップデートすることにしました。
移行の流れ
- 移行先となる Redmine 4.0.9 を docker で起動
- 移行元の Redmine 3.4.2 のバックアップファイルをもとにリストアする
- プラグインとテーマのインストール
- DB のマイグレーションを行う
Dockerfile の作成
公式の Redmine の docker イメージをそのまま使いたかったですが、社内の諸事情(主に証明書とかプロキシ関連)により Dockerfile を作成しました。
その際、unzip
があるとプラグインのインストールが楽なので追加しておきました。
FROM redmine:4.0.9
# 中略
RUN apt -y install unzip
そして、ここでは適当に myredmine
という名前でイメージを作成しました。
$ docker build -t myredmine:4.0.9 .
docker-compose.yml の作成
Redmine と MySQL を簡単に起動できるよう、docker-compose を使いました。
例えば以下のような感じです。
version: '3.1'
services:
redmine:
image: myredmine:4.0.9
container_name: myredmine
restart: always
depends_on:
- mysql
ports:
- 3000:3000
environment:
REDMINE_DB_MYSQL: mysql
REDMINE_DB_PASSWORD: example
volumes:
- files:/usr/src/redmine/files
mysql:
image: mysql:5.7
container_name: redmine-mysql
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: redmine
volumes:
- mysql:/var/lib/mysql
volumes:
files:
mysql:
リストア
docker-compose を使って Redmine を起動したら、リストアを行います。
例えば以下のような感じです。
ここでは DB のバックアップファイルが redmine_db_backup
、添付ファイルバックアップフォルダが redmine_files
です。
docker cp redmine_db_backup redmine-mysql:/
docker exec redmine-mysql bash -c "mysql -u root -pexample redmine < redmine_db_backup"
docker cp redmine_files/. myredmine:/usr/src/redmine/
プラグインとテーマのインストール
github などからクローンできるものはコンテナ内で直接クローンします。
クローンできないものはあらかじめ適宜ダウンロードしておき、コンテナ内にコピーして展開しました。
例えば、以下のように、ホスト側で実行する install_plugins.sh
と、その中で、コンテナ内で実行する install_plugins_run.sh
を作成しました。
install_plugins.sh
#!/bin/bash
# github から clone できないプラグインをコンテナ内にコピー
docker cp redmine_checklists-3_1_18-light.zip myredmine:/usr/src/redmine
# コンテナ内で実行するシェルスクリプトをコンテナ内にコピー
docker cp install_plugins_run.sh myredmine:/usr/src/redmine
# 実行
docker exec myredmine bash /usr/src/redmine/install_plugins_run.sh
exit 0
install_plugins_run.sh
#!/bin/bash
# docker コンテナ内で実行するシェルスクリプト
# github から clone してくる
git clone --depth 1 https://github.com/koppen/redmine_github_hook ./plugins/redmine_github_hook
# クローンできないものはあらかじめダウンロードして、ホストからコンテナにコピーしておく
# ここでは展開するだけ
unzip redmine_checklists-3_1_18-light.zip -d ./plugins
# テーマのインストール(Redmine のバージョンに合わせたものをクローン)
git clone --depth 1 https://github.com/makotokw/redmine-theme-gitmike.git public/themes/gitmike -b v1.1.1
exit 0
マイグレーション
以下をコンテナ内で実行するだけです。
上記の install_plugins_run.sh
の中に含めてもいいかもしれません。
export RAILS_ENV=production
bundle update
bundle exec rake db:migrate
bundle exec rake redmine:plugins:migrate RAILS_ENV=production
bundle exec rake tmp:clear
あとは Redmine を再起動すれば完了です。