Docker on WSL2 環境構築メモ (5/x) - Bitnami/Redmine 導入

前提

導入対象とするマシンは下記の通り。

  • Hardware : CPU = i10900, GPU = GeForce RTX 2080Ti, Mem = 32GB, SSD 1 TB + HDD 2TB
  • ベース OS : Windows 10 Pro バージョン 20H2 (ビルド 19042.685)
  • 仮想 OS : Ubuntu 20.04 LTS on WSL2

Bitnami/Redmine + MariaDB 導入

インストール手順 & 実行手順

Docker Hub での Bitnami/Redmine の解説の通り。Docker Compose での提供であるため、起動は簡単。

# install
docker pull bitnami/redmine

# execute
docker-compose up -d

初期設定状況と docker-compose.yml

初期設定は下記のとおり。docker-compose.yml の環境変数設定に追記することで変更可能 (だが、ユーザ関連情報は平文保存になってしまうため docker-compose.yml には書かない)。

初期ユーザ user 初回起動・ログイン直後に変更する
初期パスワード bitnami1 初回起動・ログイン直後に変更する
初期メールアドレス user@example.com
初期言語 en 初回ログイン前に ja にしておくのが無難

設計戦略 のところで述べたように、サーバサービスやシステム設定を格納するディレクトリ構造はコンテナとデータボリュームの間で分割せず一体とした方がバックアップ&リストア等の管理をしやすい。というわけで docker-compose.yml を下記のように編集しておく。

version: '2'
services:
  mariadb:
    image: 'docker.io/bitnami/mariadb:10.3-debian-10'
    restart: always                                    # 常に再起動するように設定しておく
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
      - MARIADB_USER=bn_redmine
      - MARIADB_DATABASE=bitnami_redmine
    volumes:
      - 'mariadb_data:/bitnami'
  redmine:
    image: 'docker.io/bitnami/redmine:4-debian-10'
#   image: 'docker.io/bitnami/redmine:4-debian-10-XXX' # スナップショットをとった場合はイメージを切り替える
    restart: always                                    # 常に再起動するように設定しておく
    environment:
      - REDMINE_DB_USERNAME=bn_redmine
      - REDMINE_DB_NAME=bitnami_redmine
      - REDMINE_LANGUAGE=ja                            # 日本語に設定しておく
    ports:
      - 'XXXX:3000'                                    # Port を変更しておく
    volumes:
#     - 'redmine_data:/bitnami'                        # データボリュームは使わない (システム設定情報の分断を回避するため)
      - '/mnt/.... /redmine_plugins:/redmine_plugins'  # 外部ディスク格納のプラグインパッケージをインストール
                                                       # する場合は参照先をマウントする
    depends_on:
      - mariadb
volumes:
  mariadb_data:
    driver: local
# redmine_data:                                        # データボリュームは使わない
#   driver: local

Redmine のカスタマイズ

本メモを記述する理由はインストール/実行手順の記録ではなく、むしろこちら。

カスタマイズした Redmine の挙動を確認する上で Docker コンテナをサンドボックスとして使い倒す。その際の操作・設定手順を記録することにある。 コンテナ内部の構成が Windows 版 Bitnami Redmine と少々異なるため、また、コンテナにエディタや日本語フォント等がないことをちょっとした工夫で凌ぐため、メモしておくことが重要。

Redmine 標準項目名の編集

日本語の標準項目名は /opt/bitnami/redmine/conf/locales/ja.yml に定義されている。これを (エディタなしで) 編集して挙動確認してみる。

テストケースとして assigned_to (日本語名:"担当者") 項目を "SendTo" にしてみる。 類似項目に assigned_to_role というものがあるため、これを比較対象として編集が exact になされたかを確認する。

# ディレクトリ移動
cd /opt/bitnami/redmine/conf/locales

# ファイルのバックアップ
cp ja.yml ja.yml.bak

# ファイルの編集
cat ja.yml.bak | awk '{ sub(/field_assigned_to:.*/, "field_assigned_to: SendTo"); print }' > ja.yml

# 確認
cat ja.yml | grep field_assigned_to

編集後に docker-compose restartとしてコンテナを立ち上げ直し、Redmine サービスが起動すれば、項目名が変更になっている。他の項目を含めて、あるべき項目を壊したりしてしまうとサービスが起動しなくなる。

docker-compose downdocker-compose up -dとするとコンテナを捨てて作り直すため、この設定は無かったことになる。しかし、プロジェクトやチケットの状況は MariaDB (のマウント先 = データボリューム) に保存されているため、無くならない。

プラグイン・インストールの事前準備

bitnami/redmine はお手頃なのだが、プラグイン・インストールの事前準備に大変手間がかかった *1 ため、ここに記録する。

必要なパッケージ

パッケージインストール方法補足
gcc
pkg-config
apt installビルド用
build-essential
curl
file
git
apt installbrew の依存パッケージ
libmariadbd-devapt installmysql2 (mariadb) の依存パッケージ
(mysql の依存する今は亡き libmysqld-dev の mariadb 版)
brewcurl でバッチのダウンロード&実行apt ではないパッケージ管理コマンド (Mac OS 由来)
nokogiri が apt でまともにインストールできないため必要
libxml2
libxslt
brew installnokogiri (Ruby 用 XML/HTML 用パーサ) の依存パッケージ
bundlergem installgem 管理コマンド
rakegem installRuby on Rails ビルドツール (要バージョン 13.0.1)

事前準備手順

事前準備の手順は下記のとおり *2

ディレクトリ移動
cd /opt/bitnami/redmine/
apt install によるパッケージ導入

docker コンテナ内では sudo 不要で下記のとおり進める。

apt update && apt upgrade
apt install gcc
apt install pkg-config
apt install build-essential curl file git
apt install libmariadbd-dev
brew のインストール

Ubuntu でのインストールパスは linuxbrew であるが、ダウンロード元は linuxbrew という名称が消え、本家 (Mac OS 用) の Homebrew と統合されたらしい *3

brew は root でインストールできない。curl で取り寄せたスクリプトの実行にはかなり時間がかかり、途中でエラー停止したように見えるところがあるが、辛抱強く待つ。

# change user (brew does not allow to be installed by root)
su bitnami

# download and execute script
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

# return to root
exit

# set path
export PATH='/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin':"$PATH"

# confirm brew
brew doctor
nokogiri 依存パッケージのインストール
brew install libxml2 libxslt
bundler と rake のインストールと設定

各 gem が要求する rake のバージョンが /opt/bitnami/redmine/Gemfile.lock に記載されているため、制約にかからないバージョン *4 をインストールし、設定する。また bundle install--no-deployment が廃止予定で使えないため、代わりの設定をする。

# install ruby on rails administrative tools
gem install bundler
gem install rake --version 13.0.1

# confirm available versions of rake
gem list rake

# set rake version to use
rake _13.0.1_ routes
bundle install による gem インストール

bundle install はこのディレクトリで実行しなければならないようだ。

# set configuration preliminarily, instead of using depreciated option '--no-deployment'
bundle config set --local deployment 'false'

# all I want to do is ...
cd /opt/bitnami/redmine/
bundle install

### preserve a docker snapshot, here ###

この節でやりたかった本質は bundle install の 1 コマンド。いままでやってきたのは、このコマンドが通らないための事前準備の事前準備。ふぅ。

プラグインのインストール方法

プラグインのインストール

bundle exec もこのディレクトリで実行しなければならないようだ。

# download plugin package (sample)
cd /opt/bitnami/redmine/plugins
git clone https://github.com/onozaty/redmine-view-customize.git view_customize

# gem install
cd /opt/bitnami/redmine/
bundle config set --local deployment 'false'
bundle install

# package install
bundle exec rake redmine:plugins:migrate RAILS_ENV=production

redmine の再起動

アプリごとの再起動方法を覚えるのが面倒なため、docker から再起動してしまう。

docker-compose restart

*1:手間がかかる理由は依存パッケージが多いこと、とさらに、解説サイトの通りにインストールできないものが多く頻繁に止まってしまうこと。

*2:わかってしまえば簡単だが、解説サイトを読み進めていくと途中途中で作業途中で課題が発生し、その解決のためにさらに解説サイトを探して課題がネストしていき、右往左往するハメになる。

*3:こういう点も、手順が (古い) 解説サイトの通りにいかない理由。

*4:今回の事例では rake 自身が 13.0.1 を要求していた様子。