RHEL8環境へのRedmine v5.0.5の手動インストール手順 (5) - 旧バージョンからのデータ移行

このドキュメントでは、RHEL8環境に手動でRedmineをインストールする手順を記載します。 構築手順を1つの記事で全部書くと非常に長文になってしまいますので、以下の内容で記事を分割して記載しています。

■記事一覧

5回目の今回は、旧バージョンからのデータ移行です。

この連載記事(?)を書き始めたのも仕事でBitnami Redmine v3系の環境を、別サーバーのRedmine v5.0.5環境へバージョンアップした事が発端で、 その際にBitnami Redmine v3系からv5.0.5へデータ移行をする必要がありました。

世の中のRedmineユーザーはどれくらい頻繁にバージョンアップをしているのかわかりませんが、 この様な別サーバーへのバージョンアップでデータ移行が必要となるケースはそれなりにあると思ったので、 記事として残すことに意味があると考えました。

どなたかのお役に立てば幸いです。

0. 前提

0.1. 環境

0.1.1. 移行先の新環境

全体のソフトウェア環境構成は以下となります。

  • Redhat Enterprise Linux 8.6
  • Ruby環境
    • rbenv v1.2.0-74
    • Ruby v3.1.4p223
    • Rails v6.1.7.6
  • Apache HTTP Server v2.4.37
  • MariaDB v10.3.35
  • Redmine v5.0.5
  • Subversion v1.10.2
  • Git v2.31.1
  • LDAP
    • Windows Server 2019 Active Directory

0.1.2 移行元の旧環境

データ移行元のRedmine環境は以下となります。

  • Redhat Enterprise Linux 7.2
  • Bitnami Redmine v3.2.3-1

また、インストールディレクトリは以下とします。

  • /opt/redmine-3.2.3-1

0.2. 移行対象のデータ

移行対象のデータは以下の2点としています。

  • mySQLのDBデータ
  • Redmineチケットなどに添付されたファイル

0.3. コマンド記載時のプロンプトルール

コマンド実行の記載でのプロンプトは以下のルールで記載をしています。

  • $ : 一般ユーザー
  • # : rootユーザー

0.4. 参考にした記事

以下の記事を参考にさせて頂きました。

qiita.com

1. Redmineプラグインに関する考慮

Redmineを使用していたら普通様々なプラグインを使用していると思います。
プラグインの中にはDBにデータを保存している物もあります。
mySQLのDBデータを移行する際には、このプラグインが保存しているDBデータも意識する必要があります。

1-1. 移行先Redmineバージョンで動作しないプラグインのアンインストール

Redmine v3系で使用していたプラグインが、Redmine v5では動かないということはままあります。(※プラグインを最新バージョンにしてもです)
それらの中で、DBにデータを保存されているプラグインについては、DBデータは移行する必要がありません。移行してしまうとゴミとして残ってしまいます。
そのため、旧環境のmySQLからデータをエクスポートする前に、それらのプラグインをアンインストールして下さい。

プラグインのアンインストール方法は以下のURLに記載されています。

www.redmine.org

bundle exec rake redmine:plugins:migrate NAME=plugin_name VERSION=0 RAILS_ENV=production

1-2. 移行先Redmineバージョンで動作するプラグインについて

新環境のRedmineバージョンでも使用する事ができるプラグインは、データ移行前に事前のインストールをして動作確認をして下さい。
プラグインのバージョンが、旧環境とバージョンが異なる事になっても大丈夫です。

2. 旧環境からのデータ抽出

2-1. mySQLのDBデータ

2-1-1. DBデータのエクスポート

mySQLのデータ抽出は、「mysqldump」コマンドを用いました。
移行先では元のDBを削除してからデータをインポートする事を想定し、オプション「--add-drop-database」を指定しています。
以下コマンドをmySQLが起動した状態で実行します。以下ではエクスポートファイルをrootユーザーのHOMEディレクトリに作成しています。

# cd /opt/redmine-3.2.3-1/mysql/bin
# ./mysqldump -u root -p -P 3306 --databases bitnami_redmine --add-drop-database > ~/bitnami_redmine.sql

パスワード入力を求められます。パスワードはBitnami導入時にBitnami管理者に設定したパスワードです。
Bitnami導入がすごい昔でもうわかりませんという人はここで詰んでしまいます。。。

2-1-2. DBエクスポートファイルの修正

Bitnami環境でのDB名は「bitnami_redmine」でした。
しかしRedmineを本連載記事や、公式の手順通りにインストールするとDB名は「redmine」でインストールしていると思います。
エクスポートしたファイルはテキストのSQLファイルなので、このエクスポートファイルのDB名を修正します。

また、「CREATE DATABASE」文で指定している文字コードも「utf8」→「utf8mb4」に修正します。

-- MySQL dump 10.13  Distrib 5.6.31, for linux-glibc2.5 (x86_64)
--
-- Host: localhost    Database: bitnami_redmine
-- ------------------------------------------------------
-- Server version       5.6.31

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES UTF8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Current Database: `bitnami_redmine`
--

-- /*!40000 DROP DATABASE IF EXISTS `bitnami_redmine`*/;
/*!40000 DROP DATABASE IF EXISTS `redmine`*/;                  (←修正箇所1)

--CREATE DATABASE /*!32312 IF NOT EXISTS*/ `bitnami_redmine` /*!40100 DEFAULT CHARACTER SET utf8 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `redmine` /*!40100 DEFAULT CHARACTER SET utf8mb4*/;  (←修正箇所2)

--USE `bitnami_redmine`;
USE `redmine`;  (←修正箇所3)

--
-- Table structure for table `attachments`
--
 :
 :

さらに、ファイル内の「CREATE TABLE」等でも文字コードが指定されているので、これを全て変更します。

  • 変更前:CHARSET=utf8
  • 変更後:CHARSET=utf8mb4

私は最初の修正をviエディタで開いて修正したので、この修正もviエディタの文字列置換で実施しました。

:%s/CHARSET=utf8/CHARSET=utf8mb4/g

2-2. Redmineチケットなどに添付されたファイル

Redmineチケットなどに添付されたファイルは以下のディレクトリに格納されています。

  • /opt/redmine-3.2.3-1/apps/redmine/htdocs/files

このディレクトリをtar.gzで圧縮します。
サイズが大きい場合には、その下の年ごとに区切られたディレクトリ単位で圧縮しても良いかもしれません。
以下ではrootユーザーのHOMEディレクトリに作成しています。

# cd /opt/redmine-3.2.3-1/apps/redmine/htdocs/files
# tar zcf ~/redmine_attachfiles.tar.gz ./*

3. 新環境へのデータ移行

前手順で取得した以下2つのファイルを新サーバーへコピーして下さい。

  • bitnami_redmine.sql
  • redmine_attachfiles.tar.gz

3-1. mySQLのDBデータ

3-1-1. DBデータのインポート

MaraDBが起動している状態で、以下のコマンドを実行し、前手順でエクスポートしたデータをインポートします。

mysql -u root -p -P 13306 < ./bitnami_redmine.sql

3-1-2. Redmine DB構造の最新化

インポートしたDB構造は、Redmine v3系なので、以下のコマンドを実行して、DB構造をRedmine v5.0.5に最新化します。

$ sudo su - redmine
$ cd /opt/redmine-5.0.5
$ bundle exec rake db:migrate RAILS_ENV="production"
== 20160404080304 ForcePasswordResetDuringSetup: migrating ====================
== 20160404080304 ForcePasswordResetDuringSetup: migrated (0.0339s) ===========

== 20160416072926 RemovePositionDefaults: migrating ===========================
-- change_column("boards", :position, :integer, {:default=>nil})
   -> 0.0024s
-- change_column("custom_fields", :position, :integer, {:default=>nil})
 :
 :
 :
== 20211213122102 RemoveOpenIdSetting: migrating ==============================
== 20211213122102 RemoveOpenIdSetting: migrated (0.0019s) =====================

== 20220224194639 DeleteOrphanedTimeEntryActivities: migrating ================
== 20220224194639 DeleteOrphanedTimeEntryActivities: migrated (0.0180s) =======

$

正常に終了したら、以下のコマンドを実行してキャッシュをクリアします。

$ bundle exec rake tmp:cache:clear

以上でDBデータの移行は終了です。

3-2. Redmineチケットなどに添付されたファイル

新環境では、Redmineチケットなどに添付されたファイルは以下のディレクトリに格納されます。

  • /opt/redmine-5.0.5/files

そのため、旧環境で圧縮したファイルをここに解凍します。

# tar zxf redmine_attachfiles.tar.gz -C /opt/redmine-5.0.5/files

その後、ディレクトリ・ファイルの所有者・グループを変更します。
Bitnamiでは「daemon:daemon」でしたが、本手順で構築したRedmineは「apache:apache」で動作していますのでそれに変更します。

# chown -R apache:apache /opt/redmine-5.0.5/files/*

以上でデータ移行は完了です。

4. DBを使うプラグインのDB構造の更新

Redmine v3系で使用していたプラグインのバージョンは、恐らくRedmine v5では動かないので最新バージョンを導入することになると思います。 DBにデータを保存しているプラグインの場合、DB構造が古いバージョンのまま移行されてきていますので、RedmineのDB構造を最新化したのと同様にこちらもDB構造を最新化する必要があります。

ここでは私が実際に実施した以下2つのプラグインについて例示します。

  • Redmine Checklists plugin (Light Version)
  • View Customize Plugin

4-1. Redmine Checklists plugin (Light Version)

以下のコマンドを実行します。

$ sudo su - redmine
$ cd /opt/redmine-5.0.5
$ bundle install --without development test --no-deployment
$ bundle exec rake redmine:plugins NAME=redmine_checklists RAILS_ENV=production

4-2. View Customize Plugin

以下のコマンドを実行します。

$ sudo su - redmine
$ cd /opt/redmine-5.0.5
$ bundle install --without development test
$ bundle exec rake redmine:plugins:migrate RAILS_ENV=production

後書き

どうにか当初予定していた内容を全て記載することができました。

第1回の冒頭でも書きましたが、Redmine環境の構築に関する情報は、ネット上では部分的な情報しか書いている人はおらず、 今回の全5回分の記事はそれが1つに纏まっているということで、それなりに価値が高いのではと自画自賛(?)しています。
が、これからどれくらいのアクセス数を集まるのかが、その価値を評価することになると思いますので、静観しておこうと思います。

この「RHEL8環境へのRedmine v5.0.5の手動インストール手順」が役になったという方がいらっしゃいましたら、 「いいね」やコメントを残して頂けると、今後の執筆の励みになりますので助かります。
(広告もクリックしてくれるとなお嬉しいですが(^^;))

最後まで読んで頂きありがとうございました。