3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Raspberry Pi 4 Model B 2GB にRedmineのdockerコンテナを入れる

Last updated at Posted at 2020-12-22

経緯(いきさつ)

  • Amazon ブラックフライデー&サイバーマンデーで4TBのHDDを購入。
  • WifiルータにUSB接続してNAS化しようと思っていたら対応していないらしい。
  • 秋月電子に行く用がありATTiny85(130円)を買うついでにRaspberry Pi 4を購入^^;
  • RaspberryにRasbianを入れ、OpenMediaVaultでHDDをNAS化するところまで完了済。
  • Linux サーバが家にあるならやりたいことはいくつかある。
  • (私と妻で共同作業することもあるので)
  • WordPressのサンドボックスがほしい → 未着手
  • 作成したHTMLをwebサーバ経由してスマホで確認したい → 未着手
  • 仕事に関する情報をwikiなどに残したいことがある → redmine作ります

前置きが長いですがw HDDを購入したらredmineを構築することになった話です。
風が吹けば桶屋が儲かる。

前提条件

  1. Raspberry Pi 4 Model B(2GB) ※リンク先は8GB
  2. 32GB microSDカード
  3. Type-CのACアダプタ
  4. Raspbian 10.7 インストール済
  5. ssh接続できること(以下の手順は piユーザで接続している前提です)

手順

手順 1: docker-compose のインストール

ググった感じだとpip3は何もしなくても実行できるっぽく書いてありました。
ですが私の場合、そんなコマンドないよ!や、なんかおかしいよ!など、エラーにorz
なのでpython3のインストール、pip3のupgradeやwheelインストールは
何も考えずに実行してしまえば良いと思います。

sudo apt-get update # おまじない その1
sudo apt-get -y upgrade # おまじない その2
curl -sSL https://get.docker.com | sh # dockerをインストール
sudo apt-get -y install python3-dev # pip3が使いたいので (注*1)
sudo apt-get -y install python3-pip # pip3が使いたいので (注*1)
sudo pip3 install --upgrade setuptools # pip3がエラーになるかも知れないので (注*1)
sudo pip3 install wheel # pip3がエラーになるかも知れないので (注*1)
sudo pip3 install docker-compose # docker-composeをインストール

(注*1) 2021年11月追記:このコマンド実行は不要のようです

手順 2: 起動準備(やらなくても良いかも)

ググっていたら以下の設定をする記事があったので一応やりました。
が、これはやらなくても問題なさそう。docker実行はsudoでも良いし。

sudo vi .bashrc
# 追加した行は以下の内容です(私の場合 ~/.local は存在しなかったので、この設定は必要なさそう)
# export PATH="$PATH:~/.local/bin
source .bashrc # 上記の設定を反映
echo $PATH # 反映できたか確認
sudo usermod -a -G docker pi # dockerコマンドをユーザpiで実行できるように設定
sudo reboot # 念のため再起動

手順 3: docker-compose の実行

以下の/path/to/docker-compose はご自身の環境に合わせて変えてください。
ここまで実行が終われば PCブラウザからhttp://{RaspberryPiのIPアドレス}:3000
アクセスすることでredmineの画面が表示されるはずです。

mkdir /path/to/docker-compose # 作業用ディレクトリを作成
sudo chown root:users /path/to/docker-compose/ # 所有権の設定(ユーザpiはusersグループ)
sudo chmod 775 /path/to/docker-compose/ # アクセス権の設定(ユーザpiはusersグループ)
cd /path/to/docker-compose # 作業用ディレクトリに移動
sudo touch docker-compose.yml # yamlファイルを作成
sudo vi docker-compose.yml # 編集内容は以下を参考にしてください
docker-compose -f docker-compose.yml up -d # 実行

作成したyamlファイルは以下の内容です。ポート番号やDB名、パスワードなど
任意に設定してください。

docker-compose.yml

docker-compose.yml
version: '3.8'
services:
  redmine:
    image: arm32v7/redmine
    container_name: redmine
    ports:
      - 3000:3000
    volumes:
      - ./files:/usr/src/redmine/files
      - ./log:/usr/src/redmine/log
      - ./plugins:/usr/src/redmine/plugins
      - ./public/themes:/usr/src/redmine/public/themes
    environment:
      REDMINE_DB_POSTGRES: redmine-db
      REDMINE_DB_DATABASE: redmine
      REDMINE_DB_USERNAME: redmine
      REDMINE_DB_PASSWORD: redmine
      REDMINE_DB_ENCODING: utf8
    depends_on:
      - redmine-db
    restart: always
    
  redmine-db:
    image: postgres
    restart: always
    environment:
      POSTGRES_DB: redmine-db
      POSTGRES_USER: redmine
      POSTGRES_PASSWORD: redmine
    volumes:
      - ./dbdata/:/var/lib/postgresql/data

手順 4: DBがない?

docker ps -a
実行結果
CONTAINER ID   IMAGE             COMMAND                  CREATED         STATUS                          PORTS      NAMES
b7090b0ee0a7   arm32v7/redmine   "/docker-entrypoint.…"   8 minutes ago   Restarting (1) 50 seconds ago              redmine
6e7dca7cd79b   postgres          "docker-entrypoint.s…"   8 minutes ago   Up 8 minutes                    5432/tcp   redmine-db

STATUSを確認してください。正常であれば Up 8 minutes のような表示ですが
問題があると再起動を繰り返すことがあります。 Restarting (1) 50 seconds ago
もしredmineのコンテナが起動を繰り返すようならDBが問題かもしれません。
私の場合、redmineによるDBのmigrationがうまくいきませんでした。
(いま思えばyamlの設定でDBのホスト名が間違っていただけの気がする・・・ホスト不明だからmigrationできない状態)
ActiveRecord::NoDatabaseError: FATAL: database "redmine" does not exist
手動でデータベースを作成します。

docker logs redmine # ログを確認
docker container exec -it redmine-db /bin/bash # DBのコンテナに入る
createdb redmine --encoding=utf8 -O redmine -U redmine # CREATE DATABASEする
exit # DBのコンテナを抜ける
docker rm redmine # redmineのコンテナを削除して
docker-compose -f docker-compose.yml up -d # もう一度作り直す

補足(多め)

dockerおよびdocker-composeがインストールできたかの確認

docker -v
docker pull hello-world
docker run hello-world
docker ps -a
docker rm hungry_roentgen
docker images
docker rmi hello-world
docker-compose version

よく使うdockerコマンド

docker ps -a # コンテナの一覧表示
docker stop container_name # コンテナの停止
docker start container_name # コンテナの起動
docker logs container_name # コンテナのログを表示
docker rm container_name # コンテナの削除
docker rename before after # コンテナの名前を変更
docker images # イメージの一覧表示
docker rmi image_name # イメージの削除

podmanはUbuntuで

最初、見つけた記事がラズパイにUbuntuを入れて
podmanでredmineを構築するって内容でした。
raspbianではなくUbuntuだということをちゃんと読んでなくて
「できないなー、なんでかなー」ってなっちゃいました^^;;

結論としては、この方法は私の場合うまくいきませんでした。

  • Raspbian10のupdateがうまくいかない → 公開キーがないって言われる
  • gpg: keyserver receive failed: No data
  • そもそもpodmanがないっぽい
  • E: Unable to locate package podman

とは言え、やったことを一応のせておきます。

. /etc/os-release
# 以下のxUbuntu_はRaspbian_の間違いですがRaspbian_10だと公開キーがエラーになる。。
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/Release.key | sudo apt-key add -
sudo apt-get update

まずはこのエラー(xUbuntu_はRaspbian_の間違い)

エラー内容
Err:15 https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_10  Release
  404  Not Found [IP: 2001:67c:2178:8::13 443]

なので、このリストファイルを削除する

rm /etc/apt/sources.list.d/devel\:kubic\:libcontainers\:stable.list 

んで、xUbuntu_をRaspbian_に変更して実行すると以下の結果に。

エラー内容
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 4D64390375060AA4

こいつを取得しようとしてもエラー。

gpg --recv-key 4D64390375060AA4
エラー内容
gpg: keyserver receive failed: No data

しょうがないのでもう一度リストを削除、なかったことにして先に進むと・・

sudo apt-get -y upgrade
sudo apt-get -y install podman
エラー内容
E: Unable to locate package podman

はい、あきらめました。

MySQLとかMariaDBとか

本来ならPostgreSQLよりMySQL系の方が好ましいんですが(好みの問題)
docker hubみてもimageがよく分からず・・・とりあえず動けば良いんです。
偉い人にはそれがわからんのですよ。

SDカードの考慮

openmediavaultを環境構築した時は何もしなかったんですが
やっておいた方が良さそうな設定があったので、今回あわせて実施しました。
設定の意味は各自お調べください。
(ちなみにredmine用のディレクトリは外付けHDDに作りました)

sudo swapoff --all
sudo systemctl stop dphys-swapfile
sudo systemctl disable dphys-swapfile
systemctl status dphys-swapfile

IPアドレスの固定

これも今回あわせてやっておきましたって内容ですけど
DHCPで取得したIPアドレスを固定化するようにしました。
ルータ側ではなくクライアント(RaspberryPi)の設定です。
有線接続なのでifの名称は eth0。無線LANの方はwan0とかになると思います。
(設定が本当にこれで正解なのかは謎)

sudo vi /etc/dhcpcd.conf
/etc/dhcpcd.conf
interface eth0
static ip_address=192.168.111.123/24
static routers=192.168.111.1
static domain_name_servers=192.168.111.1 8.8.8.8 8.8.4.4

ファイアーウォール?

最初、redmineコンテナが再起動を繰り返しているのに気づかず
http://{raspberrypi}:3000にアクセスできないので
ネットワークの設定を疑いました。
その時に設定したのが以下の内容。

sudo apt-get install ufw
sudo ufw allow 22 # ssh用
sudo ufw allow 80 # いまのところopenmediavaultの管理画面用
sudo ufw allow 139 # smb://
sudo ufw allow 445 # smb://
sudo ufw allow 3000 # 今回追加したredmine用
sudo ufw default deny # 既定の設定=拒否
sudo ufw enable # ufwを有効化

いまはufwってのがメジャーなんですかね?
とりあえず設定してしまったので、そのままにしてあります。
一応、ポートの状況も確認したいのでnmapもインストールしました。

sudo apt-get install nmap
nmap localhost
実行結果
Starting Nmap 7.70 ( https://nmap.org ) at 2020-12-XX XX:23 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00070s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 995 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds
3000/tcp open  ppp

Nmap done: 1 IP address (1 host up) scanned in 0.27 seconds

まとめ

3
3
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?