GrowiとRaspberry Pi 4について
2023年1月11日 GrowiがRaspberry Piにも対応しました。公式のDockerコンテナーが”linux/arm64″対応としても公開されています!
これで「Growi を Raspberry Pi 4で普通に動かす」ことが簡単にできるようになりました。
Growiは、オープンソースで公開されているWiki用のソフトウェアです。このGrowiではマークダウンを使うことができる他に図形の処理も容易で、さらにはTeXの数式も処理できるなど非常に多機能で便利なものです。
GitHubでは、weseek/growiとしてリポジトリーが公開されていて、現在のバージョンは2022年11月17日に公開されたv5.1.8となっています。
さらに、DockerHubでDockerコンテナーも公開されているのですが、現在プルできるバージョンのプラットフォームがLinux/x86_64となっています。注3
$ docker pull weseek/growi:5.1.8
$ docker inspect --format='{{.Architecture}}' weseek/growi:5.1.8
"amd64"
またDockerコンテナーを作成してdocker-composeで動かすためのリポジトリーとして、weseek/growi-docker-composeが公開されています。
そこで、これらのリポジトリーを使ってRaspberry Pi 4で動かすことのできる「arm64」対応のDockerコンテナーを作成する方法もあるかとは思いますが、Dockerのマルチプラットフォーム機能とdocker-composeで対応されている「DOCKER_DEFAULT_PLATFORM」を利用して「無理やり」動かしてみることにします。
注1:昨日2022年12月20日にdocker-composeのv2.14.2が公開されました。機能拡張の一つとして、「DOCKER_DEFAULT_PLATFORM」をコンテナー作成時にも使用できるとなっています。
注2:2023年1月6日に最新のGrowiを使用して「GrowiをRaspberry Pi 4で普通に動かす」という記事を掲載しています。マルチプラットフォーム機能を使うのではなく、ネイティブな環境で動かす場合には、そちらを参照して下さい。
注3:2023年1月11日にGrowi v6.0.2が”linux/arm64″に対応したとのアナウンスがありました。現在では、普通にdocker pull weseek/growi:6.0.2を実行すれば入手することが出来ます。
Growiのdocker-composeでは、growiとmongoとelasticsearchを同時に動かしているのですが、mongoとelasticsearchは「arm64」対応版がありますので、これを利用します。つまりRaspberry Pi 4上で「Linux/x86_64」と「Linux/aarch64」のDockerコンテナーを同時に動かそうというものですから、「無理やり」としています。
前提となる準備
Raspberry Pi 4にDockerとdocker-composeをインストールしておきます。その上で、QEMUパッケージを追加インストールしてマルチプラットフォーム対応にします。Dockerは、buildxを有効にしています。
$ docker buildx ls
NAME/NODE DRIVER/ENDPOINT STATUS BUILDKIT PLATFORMS
default * docker
default default running 20.10.22 linux/arm64, linux/amd64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
$ cat /etc/docker/daemon.json
{
"features": { "buildkit": true }
}
参考: Raspberry Piでlinux/amd64のDockerコンテナーを動かす
growi-dokcer-composeをクローンしてビルド
growi-docker-composeをGitHubからクローンします。
$ git clone https://github.com/weseek/growi-docker-compose.git
まずサービスappとしてgrowiをビルドするのですが、この際に「DOCKE_DEFAULT_PLATFORM=linux/amd64」を指定して実行しちゃいます。
$ env DOCKER_DEFAULT_PLATFORM=linux/amd64 docker compose build app
これでビルドしたDockerコンテナーは、アーキテクチャーが”amd64″となっています。
$ docker inspect --format='{{.Architecture}}' growi-docker-compose-app:latest
amd64
mongoは、そのままDockerHubからpullしておきます。
$ docker pull mongo:4.4
Elasticsearchは、そのままビルドしてarm64用のDockerコンテナーを作ります。
$ docker compose build elasticsearch
Growiを起動する
Growiを起動する前に、docker-compose.ymlのappサービスに”platform: linux/amd64″の行を追加します。また公開するポートが”127.0.0.1:3000:3000″としてローカルホストのみになっていますから、必要に応じて修正します。
準備ができたら、docker composeから起動します。
$ docker compose up
起動するまで、しばらく待ってからブラウザーでアクセスすると初期設定画面が表示されて無事に動いています。
初期設定でアカウントを作成すれば、Growiを使用することが出来ます。
Dockerとdocker-composeでマルチプラットフォーム対応しているために、今までであればRaspberry Piでは動かせなかったようなアプリを動かすことも出来そうです。なんとなく逆向きの使い方のような気もしてはいるのですが…