Hyper-V + WLS2 な環境で Redmine を構築してもよいのですが、いろいろ面倒(特に Ruby on Rails が面倒)なので、docker を使って構築します。
Windows 上で構築すると MySQL が相乗りになったり、Ruby のパスを設定したりといろいろ面倒で、仮想環境の Linux に入れていたのですが、.NET6 + gRPC の実験用の構築です。
docker-compose を使え
その昔、ひとつのコンテナに ruby + mysql を入れてあれこれと構築していた頃があったのですが、結果的にひとつのコンテナにひとつのアプリを入れてしまったほうが楽ですね。
Redmine – Official Image | Docker Hub https://hub.docker.com/_/redmine/
なので、素直に docker-composer を使います。以前の Docker Desktop ではうまく動かないことが多かったのですが、現在は結構スムースっぽい。
以下を、docker-compose.yml というファイル名で保存します。
公式との違いは、
- MySQL を外から参照できるようにポートフォワードしている(後で gRPC で使う)
- command で絵文字が使えるように utf8mb4 を指定する。
これがないと、Redmine で日本語を使ったときに落ちる。
version: '3.1'
services:
redmine:
image: redmine
restart: always
ports:
- 8081:3000
environment:
REDMINE_DB_MYSQL: db
REDMINE_DB_PASSWORD: example
REDMINE_SECRET_KEY_BASE: supersecretkey
db:
image: mysql:5.7
restart: always
ports:
- 33061:3306
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: redmine
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
パスワードは面倒なので「example」のままで使っています。
この例では、
- Redmine に localhost:8081 で接続
- MySQL にポート番号 33061 で接続
- mysql -u root -p で、パスワード example で接続できる
このあとで、docker-compose.yml と同じディレクトリで、以下を行えば ok
# コンテナの作成
docker-compose create
# コンテナの実行
docker-compose start
名前を間違ったりポートを間違ったりうまく作れなかったときは、Docker Desktop でコンテナを削除して何度も作り直します。
この例では、
こんな感じの2つのコンテナがひとつにまとめられます。
ブラウザで確認
localhost:8081 で確認します。初期パスワードは、admin/admin です。
初期データ(ロールやトラッカーなど)が入っていないので、デフォルト値のロードをします。このとき、文字コードが、utf8mb4 あるいは utf8 になっていないと、redmine 側でエラーになります。このときは、docker-compose の戻って、再構築します。
MySQL Workbench で確認
docker 内の mysql に接続します。
無事、テーブル構造が取得できています。
これを使って、.NET6 から CURD 用のエンティティクラスを作って、gRPC の *.proto をコード生成してやれば、適当なフロントエンドが作れるかも、ってところまで。
ちなみに、Oracle 19c の場合は 8GB 位メモリを持っていかれるのですが、redmine の場合は、512MB 位で済みます。これだとローカルPC内で動かしても大丈夫そう。oracle 19c のほうは、別のマシンに移動しました。