【2024年8月版】redmine 移行備忘録【Windows：オンプレ→クラウド】

## はじめに
全てにおいて泥臭いやり方です。
本記事は、オンプレ老朽化によってクラウド移行をすることになったredmineの移行模様をざっくばらんに残したものです。（Windows→Windows）
元々はAWSのオンプレをクラウド化する便利機能を利用しようとしていたらしいですが、オンプレ側が風前の灯火過ぎてその負荷に耐えきれず落ちるため、手動で全部やることになりました。

## 前提
オンプレにインストールされていたredmineは以下の通り。
```
Environment:
  Redmine version                4.2.2.stable
  Ruby version                   2.6.8-p205 (2021-07-07) [x64-mingw32]
  Rails version                  5.2.6
  Environment                    production
  Database adapter               Mysql2
  Mailer queue                   ActiveJob::QueueAdapters::AsyncAdapter
  Mailer delivery                smtp
SCM:
  Git                            2.39.2
  Filesystem                     
Redmine plugins:
  redmine_issue_templates        1.0.1
  view_customize                 2.5.0
  ```

数年前にオンプレ→オンプレ移行をしており、Bitnamiで導入。
当時の作業証跡などは残っていない。

## クラウド側にredmineを立てよう
### 当初の想定
オンプレ側のredimineはバージョンが古く、Bitnamiで一緒にインストールされる周辺ソフトのバージョンも今世に出ているものに比べると低い。
特にmySQLのバージョン乖離があるとデータの不整合が発生する可能性が高いと考えられていた。
なので、クラウド側に最新のredmineを立てた後、オンプレ側のredmine等々をバージョンアップして揃えてから移行しようと考えていた。

### 崩れる前提：BitnamiはWindows版の提供が終了していた
私死亡のお知らせ。I am not さーばーつよつよマン。
全部手でredmineを1から立てることになりそう。

### 朗報：古いBitnamiを手に入れる方法がある
さーばーよわよわマンの私はBitnamiに全力他力本願時していたので、インターネットの海に祈りを捧げ続けた。
結果、祈りが届き、なんと[過去バージョンのBitnamiのWindows版を手に入れる方法](https://a1-style.net/tips-download-previous-versions-of-bitnami-redmine-stack-for-windows/)に行きついた。


### Bitnamiを使ってredmineを導入
現行のredmineのバージョンは4.2.2であり、一番近しいバージョンであれば適当にやってもバージョン不整合が起きづらいだろう、という短絡的思考によって4.1.1を選択して導入。
バージョン差異エラーがあっても、クラウド側がバージョン低ければクラウド側をバージョンアップすればよいので、この方がいいだろうとも判断。
Bitnamiを使ってのインストール手順は[この記事](https://qiita.com/Ki2neudon/items/369ec9d8b87ecb7155bc)を参照。



インストールしたら以下の通り。
```
Environment:
  Redmine version                4.1.1.stable
  Ruby version                   2.5.8-p224 (2020-03-31) [x64-mingw32]
  Rails version                  5.2.4.2
  Environment                    production
  Database adapter               Mysql2
  Mailer queue                   ActiveJob::QueueAdapters::AsyncAdapter
  Mailer delivery                smtp
SCM:
  Git                            2.30.0
  Filesystem                     
Redmine plugins:
  no plugin installed
  ```

## DBを移行しよう
### オンプレ環境からDBのエクスポート
結論：うまくいかず
なんか、テーブルに権限が無いとかで出力をすべて断られる。
[これ](https://qiita.com/katzueno/items/29d812eb3aafdb23b0bb)とか[これ](http://gmonsoon.blog96.fc2.com/blog-entry-152.html)を参考に試行錯誤するも、解消せず。

### 作戦その１：DBファイルを挿げ替える
「DBつっても実態はファイルじゃん、置き換えようぜ」
ということで、mySQL以下のdataフォルダを丸ごと挿げ替える荒業を実施。
そうしたら案の定mySQLのバージョン差異エラーが発生してmySQLが立ち上がらなくなったので断念。

### 作戦その２：DBファイルを挿げ替えてバージョンを揃えよう
「クラウド側のバージョンが低いはずだから、バージョン上げて揃えればOKっしょ」
と、当初の作戦を発動させようとする。
が、ここで衝撃の事実が発覚。
オンプレ側のmySQLのバージョンは「8.0.26」だったが、
クラウド側のmySQLのバージョンは「14.14」だった。
何故だ、何故高い。
現行オンプレのredmineより下位のBitnamiでインストールしたはずだぞ。
前述の通り、オンプレ側が風前の灯火過ぎて、実は平行で移行しようとしているJenkinsのバージョンアップにすら耐えられていない。
オンプレ側のmySQLのバージョンを上げて揃えることは不可能だ。
そもそも揃えたとてエクスポートできないから無理だったと今書いて気付いた。

### 作戦その３：いっそmySQLから全部挿げ替えてやろう
mySQL本体とdataに差異があるなら、いっそ本体から置き換えてやればいいだろう、という暴論暴挙がまさかの通る。
my.iniの中身だけ、クラウド側で立てたmySQLの内容といい感じに（オンプレ側を元に、ポート番号やパスをクラウド側のものに）融合させることで、サービスの起動まで漕ぎつけた。
バージョンが8になってしまったが、移行することが優先なので些事。

## redmineがDBを読むようにしよう
### 死んだredmine本体
mySQLを置き換えてDBがオンプレ側のものになったのでredmineがこれを読んでくれれば勝ち。
といったところでredmineを再起動したら、すぐに停止して使えない状態に。

### redmine死亡ログ
mySQLに「デフォルトのログイン情報じゃログインできねぇよ」と怒られていた。
D:\Bitnami\redmine-4.1.1-7\apps\redmine\htdocs\config\database.yml
の中身を使ってログインしようとしていたので、ここを変更することで解消。

### 無事起動するredmine
以上より、オンプレ側のDBの中身でクラウドredmineが稼働した。

## プラグインを持って来よう
どうやらこいつらも実体のファイルが存在しているらしい。
ということで、redmine\htdocs\plugins の中に、オンプレ側にあったpluginsフォルダの中身をそのままドンと配置。
しただけだとredmineが落ちた。
[プラグインをインストールする系記事](https://qiita.com/koji0705/items/29efe300784269acad09)を読んだが、こんな変なことをしている場合の事例はわかるわけもなく、
とりあえずpluginsをカレントディレクトリにして、
```
bundle exec rake redmine:plugins:migrate RAILS_ENV=production
```
を実行して再起動したら、redmineは起動するようになったし、プラグインも認識してくれた。
なんでかは未だによく分かってない。

また、pluginsの中身に入ってるのかDBの中に入っているのか不明だが、オンプレ側で設定されていた内容がすべてクラウド側でも入っていたので超ラッキー。

## 見た目を同じにしよう
無事redmineは動いているが、なんだか見た目が変。
特に、優先度によってチケットが赤くなったりしてたのが動作していない。
pluginsを入れれば直るかと思ってたが、これは「[テーマ](https://redmine.jp/glossary/t/theme/)」なるものの影響らしい。
redmine\htdocs\public\themes にテーマの実ファイルがあるので、これをオンプレ側から持ってきてクラウド側に配置。
redmine内で [管理 > 設定 > 表示 > テーマ](https://redmine.jp/glossary/t/theme/change-themes/) から、オンプレ側と同じやつをクラウド側でも選択して完了。

## 昔redmineにアップロードしたファイルのリンク切れを直そう
[redmine\htdocs\files 以下にアップロードされたファイル群がある](https://redmine.jp/guide/RedmineAttachedFiles/)ので、同じように丸ッとオンプレ→クラウドへ持ってきて配置。
これで、過去の画像やファイルもredmine上で参照できるようになった。

## 終わり……のはず
以上で、オンプレ側のデータもファイルも見た目も全部同じになったので、とりあえずはよさそう。
ざっくりと設定を見比べたり、チケットの作成や編集をしても問題なさそうだった。
今後使っていって問題が出てきたりしたら、その度更新する、かも。

泥臭いやり方ですが、誰かの助けになれればと思います。