まえがき
Windows Serverに自前で作ったRedmineにデータ移行するのは2度目ですが、はまりどころがいくつかあるため、備忘のため残しておきます。
※Ruby on Railsについて無知です。参考サイトを頼りに頑張りましたが、間違った点などあればご指摘ください。
前提
- 既存のBitnami版Redmineからデータ移行する(MySQL → MariaDB)
※Bitnami版Redmineの最新バージョン(4.2.3-3)ではMariaDBが採用されており、自前構築に限界が来た場合にいつでも乗り換えられるようにMariaDBへ移行しておく。 - Apacheは使わず、IIS(ARR)を使う
※IISのARRを使ってリバースプロキシでRedmineにつなげる。その場合、間にApacheを挟む意味があまりないと判断したため。
環境回り
# | 移行元 Redmine packaged by Bitnami (Version 4.1.0-0) |
移行先 |
---|---|---|
OS | Windows Server 2012 R2 | Windows Server 2012 R2 |
Redmine | 4.1.0.stable | 4.2.3.stable |
Ruby | 2.5.7-p206 (2019-10-01) [x64-mingw32] | 2.6.9-p207 (2021-11-24) [x64-mingw32] |
Rails | 5.2.4.1 | 5.2.6 |
DB | MySQL(14.14 Distrib 5.7.28, for Win64 (x86_64)) | MariaDB(15.1 Distrib 10.4.22-MariaDB, for Win64 (AMD64)) |
Appサーバー | thin/1.7.2 | thin/1.7.2 |
Webサーバー | Apache/2.4.41 | IIS/10 |
手順
1. Ruby (RubyInstaller for Window)
Redmineを動かすためにはRubyのインストールが必要。
-
ダウンロード
公式サイトからインストーラーをダウンロードする
Ruby+Devkit 2.6.9-1 (x64)
※Redmineの対応Rubyバージョンによると2.7.2以降でも動くはずですが、途中で原因不明のエラーが起きて解決できなかったので、2.6.9を使う。 -
インストール
手順に従ってインストールする。
※今回はインストール先をDドライブに変更:例)D:\Ruby26-x64
※後は全部デフォルトで(参考:【Ruby on Rails】動作環境を構築するーーー2020.07 ver)
2. MariaDB
本番運用前提であればデータ保存先はsqliteよりもRDBMSにしておいた方がよい(らしい)。
あと単純に現行がMySQLなのでデータ移行を簡略化するため。
-
ダウンロード
公式サイトからインストーラーをダウンロードする。
MariaDB Server 10.4.22
Redmineのインストールガイド(日本語版)によるとMySQL5.7までとのことなので、MariaDB10.2 or 10.3ということになるはずですが、Bitnami版最新バージョンで10.4.22が使われていたので、合わせておく。
参考:MariaDB と MySQL のバージョン比較 -
インストール
手順に従ってインストールする。
参考:WindowsにMariaDBをインストールする手順
※ポート番号が既存のMySQL等と被らないように注意すること!!
※既定でCドライブにDataフォルダが作られてしまう。
Dドライブに作りたい場合は、事前にCドライブにDataフォルダを作っておくと、インストーラが重複を検知して作成先を指定できるようになる。
例)C:\Program Files\MariaDB 10.4\data を作ってからインストーラを実行する。
※既定の場所はインストーラーのバージョンにより異なる。
3. Redmine
基本的に公式の手順に従ってインストールする
-
ダウンロード
公式サイトからzipをダウンロードする。
redmine-4.2.3.zip -
展開
zipを展開する(展開先は適宜)
例)D:\redmine-4.2.3 -
空のデータベースとユーザーの作成
移行前のデータベース名とユーザー名に合わせておく。
※データベースは後でレストアするので作らなくても良いかもしれない。CREATE DATABASE redmine CHARACTER SET utf8; CREATE USER 'redmine'@'localhost' IDENTIFIED BY '移行前とおなじパスワード'; GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';
※パスワードはRedmineの設定ファイルに記載されている。
例)D:\Bitnami\redmine-4.1.0-0\apps\redmine\htdocs\config\database.ymldatabase.ymlproduction: adapter: mysql2 database: bitnami_redmine host: 127.0.0.1 username: bitnami password: ********** # Use "utf8" instead of "utfmb4" for MySQL prior to 5.7.7 encoding: utf8 port: 3307
-
データベースに接続するための設定
config/database.example.yml
をコピーしてconfig/database.yml
を作成する。
そしてconfig/database.yml
を編集し、"production" 環境用のデータベース設定を行う。
※port
には新しくインストールしたデータベースのポート番号を指定すること!!
例)config/database.ymlproduction: adapter: mysql2 database: bitnami_redmine host: 127.0.0.1 username: bitnami password: ********** # Use "utf8" instead of "utfmb4" for MySQL prior to 5.7.7 encoding: utf8 port: 3308
-
メールサーバーに関する設定
config/configuration.example.yml
をコピーしてconfig/configuration.yml
を作成する。
config/configuration.yml
を編集し、"default:email_delivery:" の設定を行う。
※細かいメールサーバー設定は説明省略
参考:https://guides.rubyonrails.org/action_mailer_basics.html#action-mailer-configuration -
依存するソフトウェアのインストール
-
Bundlerをインストールする。※Rubyへのパスが通っている前提。
cmdgem install bundler
-
独自の依存関係の設定
thin
(Redmineを動かすためのアプリケーションサーバー) をインストールするため、Gemfile.localを作成する。
※Windowsサービス化するためのthin_service
も入れておく
D:\redmine-4.2.3\Gemfile.localGemfile.localgem "thin" gem "thin_service"
-
Redmineを実行するために必要なソフトをインストールする。
※グローバルに入れると既存のRedmineに影響でそうなので、--path vendor/bundle
をつける。
が、この書き方非推奨らしい警告が出るので、使えなくなったら新しい文法で対応が必要。cmdcd D:\redmine-4.2.3 bundle install --without development test rmagick --path vendor/bundle
-
セッションストア秘密鍵の生成
cmdbundle exec rake generate_secret_token
※ここでエラーが発生して先に進めなくなりました。
eventmachine云々というエラーで、ここを参考にしてリトライして成功。(根本原因は不明。。。)
あと、再インストールしてもダメで、Gemfile.lockファイルを手で書き換えました。- eventmachine (1.2.7-x64-mingw32) + eventmachine (1.2.7)
-
データベースバックアップ&レストア
既存のMySQLからデータをバックアップcmdD:\Bitnami\redmine-4.1.0-0\mysql\bin>mysqldump -u bitnami -B bitnami_redmine -P 3307 -p > D:\Redmine-work\redmine-4.1.0-0_202201041028.dump
新しく作ったMariaDBにレストア
※文字コードにUTF8を指定する
--default-character-set=utf8
cmdC:\Program Files\MySQL\MySQL Server 8.0\bin>mysql -u root -p -B bitnami_redmine -P 3308 --default-character-set=utf8 < "D:\Redmine-work\redmine-4.1.0-0_202201041334.dump"
-
添付ファイル、プラグインをバックアップ&レストア
既存Redmineのfiles
フォルダとplugins
フォルダをそのまま新Redmineに移す。
コマンド使ってもいいし、エクスプローラーでもいいし、よしなに。。。 -
データベースのマイグレーション
cmdset RAILS_ENV=production bundle exec rake db:migrate
-
プラグインのマイグレーション
cmdbundle exec rake redmine:plugins:migrate RAILS_ENV=production
-
キャッシュクリア
cmdbundle exec rake tmp:cache:clear RAILS_ENV=production
-
Redmineにプレフィックスを付ける
WebRoot直下ではなくて、xxx.xxx.xxx/redmine
というURLで動かしたいので、Redmine側にプレフィックスを付ける。(ARRの設定等もこれに依存する)
参考:Application Request Routing(ARR)を使ったRedmineの設定について -
Windowsサービスに登録
※コマンドプロンプトを使っているせいか、文字コード関連でエラーになる。RUBYOPT
を空にして対応。
※--prefix "/redmine"
で起動時にプレフィックスをつけることができる。cmdset RUBYOPT= thin_service install -N "redmineThin-4.2.3" -c "D:\redmine-4.2.3" -p 3005 -e production --prefix "/redmine"
-
リバースプロキシ設定
IISのARRを使ってリバースプロキシを行う。DefaultWebSite └ redmine ← ここにアクセスして来たときにURL書き換えを行う。
パターン: (.*)
URLの書き換え:http://127.0.0.1:3005/redmine
後続の規則処理を停止する: 停止するこれで、
http[s]://xxx.xxx.xxx/redmine
にアクセスした場合に、thinで動かしているredmineに振り分けることができます。
-
あとがき
チケットに添付された日本語名ファイルをダウンロードすると、ファイル名の文字化けが発生。
移行元のBitnami版でも同じ事象が発生していて、その際行ったのと同じ対処方法①を施してみたが、改善せず。
対処方法①
フォルダ :Redmine実行ディレクトリ\app\controllers
ファイル名 :application_controller.rb
- %r{(MSIE|Trident|Edge)}.match?(request.env['HTTP_USER_AGENT']) ? ERB::Util.url_encode(name) : name
+ %r{(MSIE|Trident|Edge|Chrome|Safari)}.match?(request.env['HTTP_USER_AGENT']) ? ERB::Util.url_encode(name) : name
別の対策で安定したので、これで様子見中。
参考:Rails日本語ファイル名がSafariやIEで文字化けする対策
対処方法②
フォルダ :Redmine実行ディレクトリ\app\controllers
ファイル名 :application_controller.rb
下記を末尾に追記
class ApplicationController < ActionController::Base
def send_file_headers!(options)
super(options)
match = /(.+); filename="(.+)"/.match(headers['Content-Disposition'])
encoded = URI.encode_www_form_component(match[2])
headers['Content-Disposition'] = "#{match[1]}; filename*=UTF-8''#{encoded}" unless encoded == match[2]
end
end