この記事を書くに至った背景
- 業務PC上の仮想マシン(Ubuntu 20.04)にインストールした Remine 4.2 を Raspberry Pi 4 に移したい
- PoC としてインストールしたが、PCを持ち運ぶと接続できなくなる…
- DBのデータをそのまま移したいので、同じDB、Redmine を利用したい
- 慣れてる Ubuntu を利用したい(苦労の始まり)
- 折角なら LTS がいい
- Ubuntu 20.04 LTS は Raspberry Pi だといくつか問題があったのでパス
- Ubuntu 22.04 LTS には OpenSSL 3系がインストールされているが、Redmine 4.2 が対応する Ruby 2.7系 のインストールには OpenSSL 1.1系が必要
- OpenSSL をアンインストールしても良いものかわからなかった(無知)
- RVM で強引に Ruby 2.7.2 をインストールしても、会社のプロキシに弾かれて bundle が上手く動作しない
- 色々諦めて Podman を使ってコンテナで Redmine 4.2 を構築
- Docker は会社の規模的に利用できない…
- 製造業は IT エンジニア・予算が限られているのでそこらへんも考慮してほしいところ。。。
- 今回初めてコンテナを利用…
- きっと「そうじゃない」というところがいくつもあると予想
- 可能であれば、ご指導ご鞭撻などよろしくお願いします
- きっと「そうじゃない」というところがいくつもあると予想
- Docker は会社の規模的に利用できない…
- 「これをなぞれば実装できる」という情報が見つからず、かなり苦戦したので Qiita にまとめることに
- 誰かの役に立てば幸いです
今回の構成
- 環境
- マシン: Raspberry Pi 4
- RAM: 8GB
- ストレージ: 256GB SSD (USBブート)
- OS: Ubuntu 22.04 LTS
- Redmine 4.2
- PostgreSQL 12.9
- マシン: Raspberry Pi 4
ARMじゃないCPUでも役に立つんじゃないかと思います(未検証)
設定手順
Ubuntu 22.04 LTS はインストールされ、sudo 権限をもつユーザーでログインし、プロキシなどを通して apt ができている状態の前提で進めます。
1. Podman インストール ~ イメージの取得
-
Podman のインストール
$ sudo apt install podman -y
-
/etc/containers/registries.conf の編集
$ sudo nano /etc/containers/registries.conf
以下
-
行を削除し、+
行を追加- # unqualified-search-registries = ["example.com"] + unqualified-search-registries = ['docker.io']
-
イメージの pull
$ podman pull redmine:4.2 $ podman pull postgres:12.9
- pull の成否は
$ podman images
で確認できる
- pull の成否は
3. pod・コンテナの作成
-
Pod の作成
$ podman pod create -p 3000:3000,5432:5432 --name redmine-pod
-
DB のコンテナを作成
$ podman run -d \ --name=db-redmine --pod redmine-pod \ -e POSTGRES_USER="redmine" \ -e POSTGRES_PASSWORD="{Password}" \ -e POSTGRES_DB="redmine" \ -e LANG="en_US.UTF-8" \ -e LANGUAGE="en_US.UTF-8" \ -e LC_ALL="en_US.UTF-8" \ -v /var/lib/postgresql/data postgres:12.9
-
もし「5432ポートは利用中」という旨のエラーが出た場合は、OSで既に PostgreSQL デーモンが起動している可能性がある。OS側の PostgreSQL を停止するか、 pod ・コンテナのポート番号を変更するかのどちらかで対応できる。
-
デフォルトだとロケールが POSIX になってしまうため UTF-8 を設定
-
ただし ja_JP を直接指定するとエラーになるので en_US を指定
-
-
DB のコンテナを設定
-
DB のコンテナの bash を起動
$ podman exec -it db-redmine bash
-
ja_JP.UTF-8ロケール作成
PostgreSQLで日本語を正しく扱う(
lc_collate
とlc_ctype
にja_JP.UTF-8
を設定する)ために必要-
ロケールの作成
# localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
-
ロケールの設定
# echo "export LANG=ja_JP.utf8" >> ~/.bashrc # echo "export LANGUAGE=ja_JP.utf8" >> ~/.bashrc # echo "export LC_ALL=ja_JP.utf8" >> ~/.bashrc # source ~/.bashrc
次のようなエラーが発生するが無視
bash: warning: setlocale: LC_ALL: cannot change locale (ja_JP.utf8): No such file or directory
-
ロケール追加の確認
# locale
次のような結果になるはず
LANG=ja_JP.utf8 LANGUAGE=ja_JP.utf8 LC_CTYPE="ja_JP.utf8" LC_NUMERIC="ja_JP.utf8" LC_TIME="ja_JP.utf8" LC_COLLATE="ja_JP.utf8" LC_MONETARY="ja_JP.utf8" LC_MESSAGES="ja_JP.utf8" LC_PAPER="ja_JP.utf8" LC_NAME="ja_JP.utf8" LC_ADDRESS="ja_JP.utf8" LC_TELEPHONE="ja_JP.utf8" LC_MEASUREMENT="ja_JP.utf8" LC_IDENTIFICATION="ja_JP.utf8" LC_ALL=ja_JP.utf8
-
DB コンテナの bash を閉じる
# exit
-
-
-
Redmine のコンテナを作成
$ podman run --name=redmine -d --pod redmine-pod \ -e REDMINE_DB_POSTGRES="127.0.0.1" \ -e REDMINE_DB_USERNAME="redmine" \ -e REDMINE_DB_PASSWORD="{Password}" redmine:4.2
-
redmine にアクセスし、Redmine が日本語で動作しているか確認
所感
- コンテナを使って構築すると、直接 OS 上に構築するよりも何倍も早くインストールできることがわかった
- snap を使えるアプリであればより素早く構築できるが、バージョンの固定ができないなどの問題がある
- コンテナの便利さの一部を体感することができ、初めてコンテナを触った感触としては上々の経験ができた