プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。

2021/05/18

Redmine のアップデートとリストア

event_note2021/05/18 9:29

会社で Redmine の環境を移行することになったので、そのメモです。

概要

  • 現在の Redmine が 3.4.2 なので、移行ついでにアップデートする
  • 移行先では docker 上で Redmine を動作させる
  • DB は MySQL

事前準備

まずは現在使用しているプラグインなどが、最新の Redmine で動作するかをチェックしておきます。

具体的には、docker で各バージョンの Redmine を起動し、プラグインをインストールして使えるかを逐一チェックしていきました。
こんなの docker 使わないとやってられんね。

んで、調査の結果、現在の最新の 4.2 では動作しないプラグインがあったので、それが動作する 4.0 にアップデートすることにしました。

移行の流れ

  1. 移行先となる Redmine 4.0.9 を docker で起動
  2. 移行元の Redmine 3.4.2 のバックアップファイルをもとにリストアする
  3. プラグインとテーマのインストール
  4. 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 を再起動すれば完了です。