経緯(いきさつ)
- 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を構築することになった話です。
風が吹けば桶屋が儲かる。
前提条件
- Raspberry Pi 4 Model B(2GB) ※リンク先は8GB
- 32GB microSDカード
- Type-CのACアダプタ
- Raspbian 10.7 インストール済
- 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
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
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
まとめ
- Raspberry Pi 4 にredmineを構築するのは簡単です
- docker-composeをインストールしてymlファイルを作成してください
- docker-composeを実行したらredmineが使えるようになります
- でも私は3〜4時間格闘した気がします