コンテナ環境でひとり気ままに Redmine
オープンソースのプロジェクト管理ツール「Redmine」を、自分のパソコン 1 台で利用できるようにセットアップしてみます。ありがたいことに Redmine の運用に必要な Web サーバーやデータベースが、ひとつのコンテナイメージにまとめられて配布されているので、あとはそれを自 PC のコンテナ環境で動かすだけです。
目次
はじめに
本稿では Redmine を利用できるようになるまでのセットアップ方法を記載します。セットアップ後の利用方法については、他を当たってください。例えば石原 佑季子『入門 Redmine 第 6 版』(秀和システム) には「社員旅行の段取りで Redmine を体験してみよう」という楽しそうな章があるので、読んでみてはいかがでしょうか (私はこれから読んでみます)。まあ、そこに書かれていることを私が 1 人で実践したら孤独な一人旅になってしまう訳ですが、それはそれで、きっと楽しいはずです。
それから、コンテナ環境は Windows 11 に Podman Desktop を使って構築します。有名な Docker Desktop でも同じことができると思います。私自身コンテナ環境に慣れていないので優劣をつけることはできないのですが、両方試してみて Podman Desktop のほうがなんとなくしっくり来たので、そちらを使うことにしました。
作業のおおまかな流れ
おおむね次のような手順で作業を行います。
- (必要に応じて) WSL (Windows Subsystem for Linux) をインストールする
- Podman Desktop をインストールして起動する
- Podman machine (仮想マシン) を起動する
- Redmine のコンテナイメージをダウンロード (pull) して起動する
- Web ブラウザで Redmine にアクセスする
事前準備: WSL のインストール
Podman Desktop の実行には WSL (Windows Subsystem for Linux) が必要となります。もしインストールされていなければ、Podman Desktop のインストールの際に一緒にインストールすることもできるようです。私の場合は、なにかのついでで既にインストールしてあり、細かい手順は忘れてしまいました。詳細は下記のサイトなどを参照してください。
- WSL を使用して Windows に Linux をインストールする方法https://learn.microsoft.com/ja-jp/windows/wsl/install
また、BIOS / UEFI でなにか設定変更する必要もあった気がしますが、これも忘れてしまったので、他サイトで調べてみてください。
Podman Desktop のインストール
Podman Desktop を下記のサイトからダウンロードします。
Windows の場合は 3 種類のパッケージ (Installer / Portable binary / Installer for restricted environments) が選べます。各自の事情に合わせて選んでください。ここでは、インストール不要で任意のフォルダで直接実行できる Portable binary を選びました。ダウンロードしたファイルを実行したら、次の手順で作業を進めます。
- Get started with Podman Desktop の画面 (図 1(a)) で [Start Onboarding] をクリックする。
※ もしここからの作業中におかしな状態になって、まっさらな状態からやり直したいということになった場合は、タスクマネージャで Podman Desktop のプロセスを削除し、C:\Users\<ユーザー名>\.local\share\containers を削除したうえでやり直せばよいようです。 - 外部パッケージのインストールウィザードに移行する (図 1(b))。基本的には画面の指示にしたがって進めればよいが、2 点だけ補足:
- 「Podman is not installed on this system, would you like to install Podman <バージョン>?」と訊かれたら、[Yes] をクリックする (図 1(c))。まだ WSL をインストールしていなければ、ここで一緒にインストールできる。らしい (図 1(d))。
- 「Autostart Podman engine when launching Podman Desktop」は、そのまま Enabled にしておくのがラクそう (図 1(e))。
- なんやかやで Dashboard の画面 (図 1(f)) まで来たら一段落。
Podman Desktop の設定
Podman Desktop をインストールできたら、Podman エンジンやその他の設定をします。Podman machine (仮想マシン) の作成は必須、その他は必要に応じてやってください。
Podman machine の作成
- ダッシュボード画面の左下 [Settings] ボタンをクリックし、[Resources] > [Podman] > [Create new ...] ボタンをクリックする (図 2(a))。
- Create Podman machine の画面で必要事項を入力する (図 2(b))。ここでは仮想マシン名を「podman-machine-01」に変更した。その他はデフォルトのまま。
※ ちなみに [Image Path (Optional)] の欄で仮想マシンファイル (ext4.vhdx) の保存先を自由に指定できるのかと思ったんですが、どうも違うみたいです。別の仮想マシンファイルからインポートするための指定欄?ぽいです。 - しばらく待つ。
- 「Successful operation」と表示されれば OK。[Go back to resources] ボタンをクリックする (図 2(c))。
- Resources 画面に戻ると Podman machine が作成されている (図 2(d))。手順 2. で [Start the machine now] を Enabled にしておいたので、仮想マシンが既に起動している。
Podman machine ファイルの保存先を変更する
Podman の仮想マシンは、デフォルトでは C:\Users\<ユーザー名>\.local\share\containers 以下に作成されます。それなりに巨大なファイルになるので、C ドライブでは都合が悪いケースもあると思います。別のドライブに変更しましょう。ただし、積極的に推奨されることではないためか、仮想マシンの保存先を指定できるような設定項目は見当たりません。ググったところ、PowerShell からコマンドラインで変更できることがわかりました。情報源:
なお、この作業 (具体的にはwsl --unregister
のところ) により、C ドライブにあった元の仮想マシンは削除されてしまいます。何かあってもダメージが少ない最初のうちにやってしまうとか、バックアップを取っておくとか、各自対策のうえ実施するようにしてください。
- Podman machine が起動していたら停止させる。
PS> wsl -l -v NAME STATE VERSION * Ubuntu-22.04 Stopped 2 podman-machine-01 Running 2 PS> podman machine stop podman-machine-01 PS> wsl -l -v NAME STATE VERSION * Ubuntu-22.04 Stopped 2 podman-machine-01 Stopped 2
- 保存先のフォルダを作ってそこに移動する。
PS> cd d: PS> mkdir podman PS> cd podman
- WSL をシャットダウンし、仮想マシンを tar ファイルにエクスポートする。
PS> wsl --shutdown PS> wsl --export podman-machine-01 podman-machine-01.tar
- インポートして Podman machine を起動する。
PS> mkdir podman-machine-01/ PS> wsl --unregister podman-machine-01 PS> wsl --import podman-machine-01 ./podman-machine-01/ ./podman-machine-01.tar --version 2 PS> podman machine start
以上です。エクスポートした podman-machine-01.tar はこれで不要になったのですが、ストレージに余裕があれば残しておいたほうが安心かもしれません。
その他の設定
あとは [Settings] メニューを開いて、好みや必要に応じて設定します。私は [Preferences] タブで次の 2 点を変更しました。
- [Appearance]: dark (ダークテーマを適用する)
- [Start on login]: Disabled (ログオン時に Podman Desktop を起動しない)
Redmine コンテナイメージのダウンロードと実行
次の手順で Redmine のコンテナイメージをダウンロードして、Podman machine 上で実行しましょう。
- Podman machine が起動していなければ [Settings] > [Resources] で仮想マシンを選んで起動する。
- [Images] > [Pull] ボタンをクリックする (図 3(a))。
- [Image to Pull] の欄に「redmine」と入力して [Pull image] をクリックする (図 3(b))。
- しばらく待つ。
- 完了したら [Done] ボタンをクリックする (図 3(c))。
- Images 画面に戻って、今ダウンロードしたイメージが表示されている (図 3(d))。
- 再生ボタンを押すとコンテナの初期設定画面となる。[Basic] タブの各項目を次のように入力する (図 3(e))。他のタブは変更なし。
- [Container name]: 他のコンテナと重複しないように名前をつける。
- [Volumes]: (左: ホスト側のディレクトリ,右: コンテナ上でのマウントポイント)
- d:\redmine\sqlite, /usr/src/redmine/sqlite
- d:\redmine\files, /usr/src/redmine/files
- [Port mapping]: 8081
※netstat -ano
コマンド等でチェックし、他のプロセスの使用ポートと重複しないようにします。
- [Start Container] をクリックすると、図 3(f) のように Tty タブの表示に切り替わって、起動時のログが流れていく。最後に「Use Ctrl-C to stop」と出たら OK (だと思います)。
ちなみに、Podman には Docker CLI と互換性のあるコマンドライン・インターフェースが用意されているようで、上記の手順 2 ~ 4 は次のようにコマンドラインからも実行できます。
PS> podman pull redmine:latest
Redmine の初期設定
これで、ブラウザから Redmine の Web アプリケーションを使えるようになりました。次のようにしてアクセスし、初期設定を行います。
- ブラウザで http://localhost:<コンテナ起動時に設定したポート番号> にアクセスする。前節の起動例の場合は http://localhost:8081。
- 図 4(a) のようにホーム画面が表示される。右上の [ログイン] をクリックする。
- ユーザー ID、パスワードともに「admin」と入力する (図 4(b))。
- admin でログインすると、早速パスワードの変更を求められるので変更する (図 4(c))。
- 一般ユーザを追加する。
- ホーム画面左上のメニューから [管理] をクリックする。
- [管理] 画面のメニューから [ユーザー] を選ぶ (図 4(d))。
- [ユーザー] 画面右上の [新しいユーザー] をクリックする (図 4(e))。
- [ユーザー >> 新しいユーザー] 画面の各項目に入力する (図 4(f))。ログイン ID、名、姓、メールアドレス、パスワードは必須。言語は、目に優しい Japanese (日本語) を選択。それ以外の項目はデフォルトのまま。
- 画面を下のほうにスクロールしていくと [作成] ボタンがあるので、それをクリックする。
日常の起動・終了手順
これでやっと旅行計画を立てることができます。日常的な利用では、次の手順で起動・終了します。
起動手順
- Podman Desktop の実行ファイル (「Podman Desktop のインストール」の節でダウンロードした Portable binary ファイル。ショートカットを作っておくとよい) をダブルクリックする。
- Podman Desktop が起動する。インストール時に設定しておいたとおり、この時点で Podman Machine は自動的に起動している。
- [Containers] 画面を開く。「Redmine コンテナイメージのダウンロードと実行」の節で作っておいたコンテナを選んで、再生ボタンをクリックする (図 5)。
- ブラウザで http://localhost:8081 にアクセスしてログインする。
終了手順
- Redmine からログアウトする。
- タスクトレイにある Podman Desktop のアイコンを右クリック > [Podman Machine 01] > [stop]
- 同じくタスクトレイ上の Podman Desktop のアイコンを右クリック > [Quit]
※ 単にウィンドウ右上の × ボタンで終了させただけだとプロセスが残ってしまうようです。
もっと簡略化できないかな?と思わなくもないですが、とにかく最低限の目標はクリアできたので、一旦ここまでとします。