2
0

Raspberry Pi 5とCloudflare Tunnelを使って、GROWIを自宅で運用する

Last updated at Posted at 2024-07-10

オープンソース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)を選択しています。

スクリーンショット 2024-07-10 11.17.24.png

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が起動します。起動完了するまでにはしばらくかかるので、気長に待ちましょう。立ち上がってしまえば、ブラウザからの操作はスムーズです。

image.jpg

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

image.png

認証したら、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を設定してください。

image.png

まとめ

Raspberry Pi 5とCloudflare Tunnelを使って、GROWIを自宅で運用しつつ、インターネットからアクセスできる方法を紹介しました。Cloudflare Tunnelを使えばHTTPSアクセスになるのも手軽で便利です

OSS開発wikiツールのGROWI | 快適な情報共有を、全ての人へ

2
0
0

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
2
0