Windows版Bitnami Redmineの移行覚書（3.4.2-4 > 3.4.6-5）

ローカルサーバのBitnami Redmine（Windows版）をAWSに移行したので、その移行方法覚え書き。

# 移行先のバージョン
現在のBitnami Redmine最新バージョンは4.2.1（2021/05/10現在）。[公式ページ](https://bitnami.com/stack/redmine "Redmine Cloud Hosting, Redmine Installer, Docker Container and VM")からダウンロード可能。

最初は最新版に更新しようと思っていたけれど、ひとつハマりどころが。
現サーバのRedmineに管理ユーザでログインして **管理** > **プラグイン** を見ると現在使っているプラグインが分かるのだけど、使っているプラグインが4.1系に対応していない！
というわけで3.4系の最終版である**3.4.6**を入れることになったのでした。

# サーバ構築
普通にAWSのEC2で構築。ちゃんとやるならLinuxで作ったほうがメンテナンスは楽だと思うけれど、移行自体に手間を掛けたくなかったので**Windows Server 2019**にした。
インスタンスサイズは小さいものでいいのだが、Windowsにt3.microでも大丈夫か……？　ま、**t3.small**でいいか。公式のAMIからサクッと作って日本語化、PC名とかその他諸々必要な設定を実施。

# インストール
3.4.6のインストーラが公式にない！　ってことで、URLを直に打ってダウンロードする。[これ](https://downloads.bitnami.com/files/stacks/redmine/3.4.6-5/bitnami-redmine-3.4.6-5-windows-installer.exe)。

あとは管理者で実行して普通にインストール。途中でユーザIDとパスワードを入れるところがあるが、パスワードに注意。**MySQLのrootユーザのパスワードもこのユーザのパスワードと同一になるのだ。**また、メール設定については後でやればいいやと思ってチェックを外した。

インストール後、忘れてはいけないのが環境変数の設定。これしないと後でコマンド叩くときにすごく面倒くさい。
**環境変数 PATH に、いまインストールされたRubyのフォルダを追加する。**これ↓。
<インストールフォルダ>\ruby\bin\

# DBのmigration
念の為DBのドロップをしてからデータ移行するので、Pluginのインストールとかより先に実施。
## 旧サーバからバックアップ
まずは旧サーバからデータを回収。コマンドプロンプトでコマンドを実行。

```batch:旧サーバ
cd <インストールフォルダ>\mysql\bin
mysqldump -u bitnami -p bitnami_redmine --default-character-set=binary > %TEMP%/redmine-sqlbackup.dmp
```
Enter Password: とか言われるので、bitnamiユーザのパスワードを入れる。このパスワードはRedmineインストール時に自動生成されるもので、**<インストールフォルダ>\apps\redmine\htdocs\config\database.yml** に書いてある。サーバ毎に異なるので、旧サーバで上記ファイルを確認すること。
少し待つと %TEMP% （C:\Users\<ユーザ名>\AppData\Local\Temp）にダンプファイルが出力される。これを新サーバへコピーする。

## 新サーバでレストア
まずは初期DBをDROPする。コマンドプロンプトを起動。

```batch:新サーバ
mysql -u root -p 

mysql> DROP DATABASE bitnami_redmine;
mysql> CREATE DATABASE bitnami_redmine;
mysql> GRANT all privileges on bitnami_redmine.* to bitnami@localhost;
mysql> flush privileges;
mysql> exit;

mysql -u bitnami -p bitnami_redmine < <旧サーバからコピーしたダンプファイルのフルパス>
```
最初のコマンドでまたパスワードの入力を求められる。これは、Redmineインストール時に初期ユーザで設定したパスワードを入力する。
成功すると mysql にログインできるので、DBのDROPとCREATE、bitnamiユーザへの権限付与を実施する。
最後は、bitnamiユーザでDBデータをレストア。パスワードは先程バックアップしたときと同じく、**新サーバのdatabase.yml** を見て確認する。

Redmineの新旧のバージョンが大きく違う場合はmysqlのバージョン変更などにより、もう少し諸々の設定変更などが必要になったりすることもあるが、今回はそのあたりは不要だった。
よって、データの移行についてはこれでOK。

# 添付ファイルの移行
ファイルを旧サーバから新サーバにコピーする。場所はここ。
<インストールフォルダ>\apps\redmine\htdocs\files

# Pluginのインストール
Pluginのファイルを <インストールフォルダ>\apps\redmine\htdocs\plugins にコピーする。ファイルは、旧サーバのRedmine > 管理 > プラグイン に公式ページがあるのでそこからダウンロード。いちいち Git コマンド叩いたりしなくてもブラウザから行ける便利さがWindowsの強み。更新がないなら、旧サーバの同じフォルダからフォルダごとコピーしてきてもOK。

それから、コマンドプロンプトを開いてRubyのコマンドを叩く。インストール後に環境変数を設定していないと見つからないとか言われるので気をつけよう。

```batch
cd <インストールフォルダ>\apps\redmine\htdocs
bundle install
bundle exec rake redmine:plugins:migrate RAILS_ENV=production
```
Rubyはよく知らないが、後ろの「RAILS_ENV=production」は本番環境のDBをいじるための決まり文句のようなものらしい。productionの他にはdevelopmentとかtestとかがあるようだ。
今回はうまくいっていたが、bundle install時にdevelopmentが云々とかのエラーが出ることがあるらしい。その場合は末尾に --without オプションを追加する。その場合、インストールコマンドは以下のようになる。

```batch
bundle install --without development
```
これでプラグインのインストールも完了。Redmineを再起動させる。
**再起動は、<インストールフォルダ>\manager-windows.exe からやるのが便利でよい。**exeを叩いて Manage Servers のタブを開き、下部の Restart All で再起動する。
このツールのショートカットでも作っておくと後が楽。

# メール設定
このままでも動作には問題ないが、メールを飛ばしたいならメールサーバの設定を入れる必要がある。なぜか管理画面からはできないようなので、ファイルを直接編集。
ファイルはここにある。なければメモ帳で空のファイルを作る。
<インストールフォルダ>\apps\redmine\htdocs\config\configuration.yml

ファイルの一番上の方にメール設定があるので、とりあえずコメントアウトしてしまう。

```yml:configuration.yml
  # email_delivery:
  #  delivery_method: :smtp
  #  smtp_settings:
  #    
  #    address: smtp.gmail.com
  #    port: 587
  #    domain: example.net
  #    authentication: :login
  #    user_name: 
  #    password: 
```
該当箇所の先頭に # を付けてコメントアウトした。
コメントアウトした場所の直下に自分のメール環境を追記する。
**設定方法はどのメールサービスを利用するかによって変わるので注意。**以下はAWSのSES（東京リージョン）を利用している場合。

```yml:configuration.yml
production:
  email_delivery:
    delivery_method: :smtp
    smtp_settings:
      enable_starttls_auto: true
      address: "email-smtp.ap-northeast-1.amazonaws.com"
      port: 587
      domain: "<mydomain.com>"
      authentication: :login
      user_name: "<user>"
      password: "<password>"
```
それ以外のメールサービスは、[Redmineガイド](http://guide.redmine.jp/Email_Configuration/ "メールの設定")に詳しい。

ファイルを上書き保存（管理者権限でないと保存できないので、一旦別のところに保存して上書きする等してみる）したら、先程と同様にmanager-windows.exeで再起動して、管理ページからテストメールが送信できるか試してみる。
問題なく送信できれば設定完了。

なお、当環境では、メールサーバにM365（Exchange）を設定するとテスト送信時にInternal Errorが出るという状況に陥った。ログファイル（<インストールフォルダ>\apps\redmine\htdocs\log\production.log）を確認したところ、**ActionDispatch::Cookies::CookieOverflow**というエラーが発生していた。Rubyに依存する問題で、Cookieが4kbを越えると出るらしい。ちゃんと対応するのであれば、**activerecord-session_store**なんかを入れて、MySQL上でセッションを管理するとよいようだ。
こちらではメールサーバをAWS SESに変更したらエラーが解消されたので、M365のせいということにしてスルー。

# 終わり
以上でRedmineの移行が完了した。