WSL2 と Docker を利用して Windows 上でお手軽に Redmine を構築する

※ 本記事は [Redmine Advent Calendar 2020](https://adventar.org/calendars/5392) の 16 日目の記事です。

# はじめに

みなさん、自分で好き勝手に使える Redmine の環境はお持ちでしょうか？

Redmine はシステム管理者権限を持っていないとすべての機能や設定を操作することができません。また、他の利用者がいる環境では好き勝手に設定を変更するわけにはいかなくなります。

とはいえ、Redmine はサーバーアプリケーションですので、セットアップするためにそれなりの知識や作業の手数が必要です。また、Redmine を含む多くのサーバーアプリケーションは、 Windows 上に構築しようとすると Linux よりも多くの手間がかかります。多くの IT エンジニアにとって Linux は慣れ親しんだものだとは思いますが、Redmine は非エンジニアにも広く利用されていることを考えると、Redmine を自分で自由に使ってみたい方の中には「Linux なんてよくわからない」「手元には Windows の PC しかない」という方も多くいらっしゃるのではないかと想像します。

そこで本記事では、手元の Windows PC 上に WSL2(Windows Subsystem For Linux 2) を使って Linux の環境を構築し、Docker を使って少ない手数で Redmine を構築する手順を説明します。

# おことわり

本記事では、WSL2 や Docker の説明は割愛します。（ぶっちゃけると説明が面倒というのもあるのですが…） WSL2 や Docker の説明を真面目にするとかなりの分量になります。本記事は、お手軽に Redmine が構築できるということを知っていただき、みなさんにも気軽に試していただきたいという願いがありますので、理論的なところはあまり触れずに進めさせていただきます。実際に動く環境が手元に出来上がったら、それをきっかけに学ぼうという気持ちも湧いてくるんじゃないかと思いますので、そこから WSL2 や Docker について調べていただいた方が学習効率も良いのではないかと思います。

また、本記事で説明する内容は執筆時点の情報になります。WSL2 や Docker に関連する技術は目まぐるしくアップデートされておりますので、本記事もすぐに陳腐化する可能性もあることをご承知おき願います。本記事と実態が食い違っているときは一次情報をあたるようにしてください。

# 動作環境

WSL2 を動作させるには比較的新しい Windows 10 が必要です。以前は 2004 が必須でしたが、現在では 1903/1909 でも動作するとのことです。また、以前は Windows 10 Pro しか対応していなかったですが、現在では Windows 10 Home でも利用可能です。

CPU やメモリはそれほど潤沢になくても WSL2 や Docker は動作します。ただし、Docker イメージのサイズがそれなりに大きいので空きディスク領域は確保しておいた方がよいです。（今回扱う Redmine のイメージだけでも 500MB 以上あります）

※ 2020/12/17 追記：よくよく考えたらメモリは多い方がいいです。（手元の環境は 16GB でした…）


# 構築手順

構築に必要な手順は以下の 3 ステップです。

1. WSL2 のインストール
1. Docker Desktop のインストール
1. Redmine コンテナの起動

## WSL2 のインストール

[Windows 10 用 Windows Subsystem for Linux のインストール ガイド](https://docs.microsoft.com/ja-jp/windows/wsl/install-win10) を参考にしてください。

手順の中で PowerShell コマンドを使うので不慣れな方にはちょっとハードルが高く感じられるかもしれませんが、以下のコマンドを順番に実行するだけですので心配しなくて大丈夫です。

※ どうやら将来的にはこのあたりの手順も簡略化されて `wsl --install` だけでいけるようになるようです。（現時点では開発者向けのみ公開されています）

```powershell
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
```

※ ここで再起動して、x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ をインストールする。

```powershell
wsl --set-default-version 2
```

ここまで終われば、あとは Linux をインストールするだけです。今回は Ubuntu 20.04 LTS を選びます。Docker を動かすときによく選択されるディストリビューションです。

## Docker Desktop のインストール

[WSL 2 での Docker リモート コンテナーの概要](https://docs.microsoft.com/ja-jp/windows/wsl/tutorials/wsl-containers) の「Docker Desktop のインストール」の章を参考にしてください。その先に開発者向けの情報がありますが、すべて読み飛ばして大丈夫です。

Docker Desktop をインストールして、設定を一部変更するだけです。

## Redmine コンテナの起動

※ 2020/12/17 一部訂正、追記しました。

ここまで来たらあと一息です。せっかくですので、先日リリースされたばかりの RedMica 1.2 を試してみましょう。

先ほどインストールした Ubuntu を起動して以下のコマンドを実行すれば OK です。

```bash
sudo docker run -d -p 8000:3000 --name some-redmica redmica/redmica
```

`http://localhost:8000` にアクセスすれば Redmine が表示されます。初期ユーザー／パスワードはどちらも `admin` です。

ね、簡単でしょ？

ここから先は [Redmineガイド](http://guide.redmine.jp/) の「システム管理者向けガイド」を参考にしながら色々お試しください。

### 補足： Docker のコマンドを実行するユーザーについて

Docker のコマンドはデフォルトでは root 権限（Windows で言えば管理者権限のような位置づけのようなもの）をもつスーパーユーザーでしか実行できません。Ubuntu は一時的にスーパーユーザーの権限を使ってコマンドを実行するときに `sudo` というコマンドを使います。

ちなみに、Docker コマンドは現在ログインしているユーザーでも実行することが可能です。以下のコマンドを実行した後、Ubuntu に再ログインすれば `sudo` なしでも Docker コマンドが実行できます。

```bash
sudo usermod -aG docker （Ubuntu のセットアップ時に作成したユーザー名）
```

たとえば、Ubuntu のセットアップ時に作成したユーザー名が `alice` だった場合、実際に実行するコマンドは以下のようになります。

```bash
sudo usermod -aG docker alice
```

# 注意事項

上記の手順は Redmine コンテナを起動するまでの最小の手順です。本格的に利用するにはデータベースの情報を永続化するための設定などが必要になります。詳しい使い方は Docker Hub の [redmica/redmica](https://hub.docker.com/r/redmica/redmica) を参照してください。最初は何を書いてるかわからなくてつらいかもですが、Docker に慣れ親しむうちに理解できるようになると思います。

また、Dokcer コンテナの性質を正しく理解しておかないと、永続化していたつもりのデータが消失するなどのトラブルが起きることも考えられます。ただし、それは決して恐ろしいことではなく、正しく理解しておけば特に問題になりません。それを知らずに思い込みで進めてしまうと危険な目に遭うかもしれないということです。このあたりは Dokcer コンテナとボリュームについて調べていただくのがよいと思います。わからないことがあれば Twitter 等で僕に直接ご質問いただいても OK です。

# 熱いダイマ

[Docker Compose を使った自分好みの Redmine 実行環境](https://github.com/juno-nishizaki/myfav-redmine) というものを作っています。今回インストールした WSL2 の Ubuntu でも動作するものですので、ご興味のある方は是非ともお試しいただけたらと思います。

# おわりに

WSL2 と Docker を利用すると Redmine がお手軽に構築できます。Redmine だけでなく多くのサーバーアプリケーションも Docker を使うとお手軽に構築できます。これをきっかけに Docker の知識を身につけてスキルアップを図るのもよいかもしれません。

そして、みなさんが快適な Redmine ライフを過ごせるようになることを願っています。