EC2でRedmineのplugin適用

## 本記事のターゲット
* Dockerは触ったことあるけど理解が深くない人
* RedmineをEC2で立てたい人
* 自分の備忘録

## 概要
本番のRedmineを使う前に、本番と同じRedmineバージョンでpluginが正常に動作するか確認したいが、MacでDockerを使いRedmine環境を作成するとDockerDesktopは有料になるため、Linuxで動作するEC2上にテスト環境を立てて確認します。

今回はEasyGanttを入れました。

作成した記憶を辿って書いているため、インストール内容など不足分があるかもしれませんのでご了承ください。

## 手順
EasyGanttは事前に登録してダウンロードしておく。

### EC2作成
手順上t2.microのインスタンスサイズだと途中でスペックが足りずinstallしていると落ちてしまったので、t3a.mediumを使用。
AmazonLinux2を作成する。

EC2にSSHでログインして、dockerをインストールします。インストール方法は以下で説明されています。

https://kacfg.com/aws-ec2-docker/


### Redmineを起動
docker-compose.yamlを作成する。
```
$ mkdir redmine
$ touch docker-compose.yaml
```
[公式ページ](https://hub.docker.com/_/redmine)の通りdocker-compose.yamlに以下を入力。
```
version: '3.1'

services:

  redmine:
    image: redmine
    restart: always
    ports:
      - 8080:3000
    environment:
      REDMINE_DB_MYSQL: db
      REDMINE_DB_PASSWORD: example
      REDMINE_SECRET_KEY_BASE: supersecretkey

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: redmine
```

Dockerを起動
```
$ docker-compose up -d
```

これでEC2のパブリックIPからログインできます。
セキュリティグループでTCPの8080ポートに開発環境のIPからアクセス可能に設定して開けることを確認。

### redmineプラグイン適用方法
やることはとっても簡単で以下を行うだけです。
1. redmineのソースのpluginsのフォルダ内にpluginのソースを配置
1. migrateコマンドを実行
1. redmineの再起動

### redmineのプラグインを配置
Container IDを取得し、EasyGanttFree.zipをコピーします。
redmineのソースはDocker内の/usr/src/redmineにあります。
cdなどは省略しています。
(ここではEasyGanttFreeは3系を使っています)
```
$ docker ps
$ docker cp EasyGanttFree.zip {redmineのcontainer id}:/usr/src/redmin/plugins/EasyGanttFree.zip
$ docker exec -it {redmineのcontainer id} bash

// redmineの中
$ cd /usr/src/redmine/plugins

// unzipが入っていないためyumをアップデートしてunzipをインストール
// docker内ではyumが入っていないのでaptを使用
$ apt update
$ apt install unzip
$ unzip EasyGanttFree.zip
$ unzip EasyGanttFree-3.x.zip
```



### migrateコマンドを実行
以下で更新が可能ですが、実行するとrubyのバージョンが古いためエラーとなります。
2022/10時点ではrubyの2.7.0を要求されました。
```
$ bundle exec rake db:migrate RAILS_ENV=production
$ bundle exec rake redmine:plugins:migrate RAILS_ENV=production
```

rubyを入れるためrbenvをインストールしますが、色々と足りないためインストールします。
パスを通すなどインストール後に要求されますので一つ一つ確認しながら進めてください。

```
$ apt install curl
// homebrewをインストール
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
// rbenvをインストール
$ brew install rbenv
// patchなどインストールされていないのでインストール
$ apt install patch
$ apt install build-essential
// rbenvでrubyの2.7.0を入れる
$ rbenv install 2.7.0
// ruby 2.7.0を使う
$ rbenv global 2.7.0
```

この後上記のmigrateを実行すると成功します。

### redmineの再起動
何気にハマりました。誤ってDokerイメージを消そうものなら初めからやり直しになるので色々検索しました。
redmineを再起動する方法を調べると以下の内容がヒットします。
* redmine/tmpフォルダにrestart.txtを入れてRedmineにアクセスする
* apacheを再起動
* Supervisorを使って再起動

上2つはコンテナでは使えません。Supervisorは使えると思いますが、再起動したいだけなので学習コストと設定の手間などを考えると別の方法を探しました。

最終的にはDockerの再起動でプラグインが動いたことを確認できました。
```
// redmineから出る
$ exit
$ docker restart {redmineのContainer id}
```

## 参考
DocerInstall: https://kacfg.com/aws-ec2-docker/
Redmine: https://hub.docker.com/_/redmine
Redmine upgrade: http://guide.redmine.jp/RedmineUpgrade/
Homebrew: https://brew.sh/index_ja.html
rbenv: https://qiita.com/hujuu/items/3d600f2b2384c145ad12
Supervisor: https://qiita.com/ymy_s/items/9270c7964d56e8e8fad3