オープンソースWikiであるGROWIは、個人で手軽に導入して利用できます。普段のメモ代わりに使ったり、家族で共有する情報をまとめたりするのに便利です。
そんなGROWIを手軽に運用する方法として、Raspberry Pi 5に構築しました。また、Cloudflare Tunnelを使って、インターネットからもアクセスできるようにしてみましたので、内容をメモしておきます。
参考情報
Raspberry Pi 4BでDockerを使う - みーのぺーじがとても役立ちました。ありがとうございます!
注意点
Cloudflare TunnelはCloudflareで管理しているドメインが必要です。なお、都度URLが変わっても良い場合は、ドメイン不要で利用できます。
Raspberry Pi 5のセットアップ
Raspberry PiのOSインストールはRaspberry Pi Imagerを利用しています。なお、OSはRaspberry Pi OSではなく、Ubuntu Server 24.04 LTS (64bit)を選択しています。
Dockerのインストール
Dockerのインストール手順はInstall Docker Engine on Ubuntu | Docker Docsに沿って行っています。
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
執筆時点では27.0.3がインストールされました。Raspberry Pi OSの場合、このバージョンが古いようです。
$ docker --version
Docker version 27.0.3, build 7d4bcd8
GROWIのクローン
利用するGROWIはGitクローンで取得します。
git clone https://github.com/weseek/growi-docker-compose.git growi
cd growi
GROWIのビルド
このままだとアーキテクチャが違うためビルドできないので、 Dockerfile
を修正します。
# syntax = docker/dockerfile:1.4
# バージョン修正
ARG version=7.0
FROM debian:stable-slim as fetch-dockerize
# dockerizeのバージョン修正
ENV DOCKERIZE_VERSION v0.7.0
# dockerizeのURLを、ARM64向けに変更
RUN apt-get update && apt-get install -y curl \
&& curl -sL https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-arm64-$DOCKERIZE_VERSION.tar.gz \
| tar -xz -C /usr/local/bin
FROM weseek/growi:${version}
LABEL maintainer Yuki Takei <yuki@weseek.co.jp>
COPY --from=fetch-dockerize --link /usr/local/bin/dockerize /usr/local/bin/dockerize
そしてビルドします。この時もプラットフォーム指定を忘れずに行ってください。
sudo docker build -t growi:7.0 --platform linux/arm64 .
docker-composeの修正
続いて docker-compose.yml
を修正します。
version: '3'
services:
app:
image: growi:7.0 # buildではなく、imageに修正
ports:
- 3000:3000 # 外部アクセスできるように修正
# 以下略
これで docker-compose up -d
でGROWIが起動します。起動完了するまでにはしばらくかかるので、気長に待ちましょう。立ち上がってしまえば、ブラウザからの操作はスムーズです。
Cloudflare Tunnelのセットアップ
Cloudflare Tunnelを使って、インターネットからもアクセスできるようにします。
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm64.deb
sudo dpkg -i cloudflared-linux-arm64.deb
次に、Cloudflareのアカウントを使ってログインします。認証時に、利用するドメインを指定します。ドメインは事前にCloudflareで設定しておく必要があります。
cloudflared login
認証したら、Tunnelを作成します。設定内容が ~/.cloudflared/{id}.json
に保存されます。 raspberry
は任意の名前です。
cloudflared tunnel create raspberry
この時、サブドメインに対して設定が行われます。たとえば raspberry.example.com
といった具合です。
設定ファイルの作成
~/.cloudflared/config.yaml
を作成します。 ${name}
、 ${user}
、 ${id}
はそれぞれTunnelの名前、ユーザー名、IDに置き換えてください。
tunnel: ${name}
credentials-file: /home/${user}/.cloudflared/${id}.json
ingress:
- hostname: raspberry.example.com
service: http://127.0.0.1:3000
- service: http_status:404
後はTunnelを起動して、該当ドメインからアクセスできるか確認します。
cloudflared tunnel run raspberry
サービス化
このままだと、Tunnelが起動している間はSSH接続を維持しなければなりません。そこで、Tunnelをサービス化します。
/etc/systemd/system/cloudflared.service
を作成します。
sudo cloudflared --config /home/${user}/.cloudflared/config.yml service install
おそらく完了時点でサービスとして立ち上がっているはずです。以下の通り設定ファイルは /etc/cloudflared/config.yml
にコピーされているので、今後の修正はそちらに対して行います。
$ systemctl status cloudflared
cloudflared.service - cloudflared
Loaded: loaded (/etc/systemd/system/cloudflared.service; enabled; preset: enabled)
Active: active (running) since Wed 2024-07-10 09:26:48 JST; 2h 7min ago
Main PID: 66342 (cloudflared)
Tasks: 11 (limit: 9074)
Memory: 16.4M (peak: 19.7M)
CPU: 15.731s
CGroup: /system.slice/cloudflared.service
└─66342 /usr/bin/cloudflared --no-autoupdate --config /etc/cloudflared/config.yml tunnel run
GROWIの設定
GROWIはURL設定が必要なので、管理画面で外部からアクセスしているURLを設定してください。
まとめ
Raspberry Pi 5とCloudflare Tunnelを使って、GROWIを自宅で運用しつつ、インターネットからアクセスできる方法を紹介しました。Cloudflare Tunnelを使えばHTTPSアクセスになるのも手軽で便利です