🐷

SupabaseをRasberry Pi5でSelf-Hostingしてみた

に公開

先日、Rasberry Pi5上でSupabaseを動作させてみたので、備忘録として残しておきます。

環境

  • Rasberry Pi5 16GB
    • Rasbery Pi Active Coolerをインストール済み
    • Raspberry Pi OS (64-bit)

やり方

ラズベリーパイの起動方法などは割愛します。OSを導入し、シェルを叩けることを前提とします。

Dockerの導入

まっさらな状態で始めたのでここからです。Supabase Self-HostingはDockerを要求します。

導入にあたって下記の記事を参考にさせていただきました。
https://zenn.dev/tryeverything/articles/a0022_raspberry-pi-docker-install

記事に従い、下記コマンドを実行するとパッケージが見つかりました。(省略)

sudo apt search docker

次に、下記を実行します

sudo apt install docker.io docker-compose

2025/10/18 現在では以下のバージョンがインストールされるようです。
記事ではツールのバージョンを上げていますが、ここでは上げません。(結果的にSupabaseのコンテナがこのバージョンでまともに動作したため、上げませんでした)

example@raspberrypi:~ $ docker --version
Docker version 26.1.5+dfsg1, build a72d7cd
example@raspberrypi:~ $ docker-compose --version
Docker Compose version 2.26.1-4

Supabaseの導入

基本的に下記の手順に従うだけで問題なく動作すると思います。
https://supabase.com/docs/guides/self-hosting/docker

私の環境では特にエラーを生ずることなく、下記のコマンドをそのまま順番に実行することができました。
しかし、最後のdocker compose up -dを実行するとvectorコンテナのみunhelthyとなってしまいました。ログ関連のコンテナらしいので、そのままでも良いと言えば良いのですが、気になるので対処します。

# Get the code
git clone --depth 1 https://github.com/supabase/supabase

# Make your new supabase project directory
mkdir supabase-project

# Tree should look like this
# .
# ├── supabase
# └── supabase-project

# Copy the compose files over to your project
cp -rf supabase/docker/* supabase-project

# Copy the fake env vars
cp supabase/docker/.env.example supabase-project/.env

# Switch to your project directory
cd supabase-project

# Pull the latest images
docker compose pull

# Start the services (in detached mode)
docker compose up -d

コンテナのログを確認してみると、以下のようなエラーを生じていました。どうやらページサイズに起因するようです。

example@raspberrypi:~/src/ex-supabase/supabase-project $ sudo docker logs supabase-vector
<jemalloc>: Unsupported system page size
<jemalloc>: Unsupported system page size
memory allocation of 5 bytes failed
<jemalloc>: Unsupported system page size
<jemalloc>: Unsupported system page size
memory allocation of 5 bytes failed
... 以下繰り返し

色々掘ってみると以下のようなIssueを発見しました。どうやらvectorコンテナは4KBのページサイズだと動作するようです。

FWIW - this helped.
raspiblitz/raspiblitz#4346

TL;DR:

- On a Raspberry Pi, check your current page size with getconf PAGE_SIZE, which for me returned 16384
- Edit /boot/firmware/config.txt, add the line kernel=kernel8.img to switch to a kernel that uses 4K page sizes. Reboot.
- Run getconf PAGE_SIZE after the reboot and it should now show 4096
- Try supabase gain

https://github.com/supabase/supabase/issues/18815#issuecomment-2170638770

Raspberry Pi5のページサイズについて調べると以下のようでした。

Raspberry Pi5からはKernelのpagesizeが4KBから16KBへと4倍にアップされました。

https://www.fabshop.jp/raspberrypi5kernelpagesize/

(補足)ページサイズの違いにより、以下のようなパフォーマンスの差異が生じるようです。
https://www.raspberrypi.com/news/benchmarking-raspberry-pi-5/

ともかく、原因は分かったのでページサイズを変更することとします。
この操作は自己責任で行なってください

現状のサイズを確認します。

example@raspberrypi:~ $ getconf PAGE_SIZE
16384

サイズが16KBであることが確認できたので、カーネルの設定を変更します。allセクションに追記します。

sudo vim /boot/firmware/config.txt
[all]
kernel=kernel8.img

追記し、再起動を行います。
すると、以下の結果を得ることができました。正常にページサイズが変更されていそうです。

example@raspberrypi:~ $ getconf PAGE_SIZE
4096

docker compose up -dを再び実行してみます。すべてのコンテナがUPしていることを確認できました。

example@raspberrypi:~/src/ex-supabase/supabase-project $ sudo docker compose up -d
[+] Running 13/13
 ✔ Container supabase-imgproxy               Running           0.0s 
 ✔ Container supabase-vector                 Healthy           0.0s 
 ✔ Container supabase-db                     Healthy           0.0s 
 ✔ Container supabase-analytics              Healthy           0.0s 
 ✔ Container supabase-rest                   Running           0.0s 
 ✔ Container supabase-storage                Running           0.0s 
 ✔ Container realtime-dev.supabase-realtime  Running           0.0s 
 ✔ Container supabase-auth                   Running           0.0s 
 ✔ Container supabase-studio                 Running           0.0s 
 ✔ Container supabase-meta                   Running           0.0s 
 ✔ Container supabase-pooler                 Running           0.0s 
 ✔ Container supabase-kong                   Running           0.0s 
 ✔ Container supabase-edge-functions         Running           0.0s 
example@raspberrypi:~/src/ex-supabase/supabase-project $ sudo docker compose ps
NAME                             IMAGE                                    COMMAND                    SERVICE     CREATED          STATUS                   PORTS
realtime-dev.supabase-realtime   supabase/realtime:v2.51.11               "/usr/bin/tini -s -g…"    realtime    19 minutes ago   Up 3 minutes (healthy)   
supabase-analytics               supabase/logflare:1.22.6                 "sh run.sh"                analytics   19 minutes ago   Up 3 minutes (healthy)   0.0.0.0:4000->4000/tcp, :::4000->4000/tcp
supabase-auth                    supabase/gotrue:v2.180.0                 "auth"                     auth        19 minutes ago   Up 3 minutes (healthy)   
supabase-db                      supabase/postgres:15.8.1.085             "docker-entrypoint.s…"    db          19 minutes ago   Up 3 minutes (healthy)   5432/tcp
supabase-edge-functions          supabase/edge-runtime:v1.69.6            "edge-runtime start …"    functions   19 minutes ago   Up 3 minutes             
supabase-imgproxy                darthsim/imgproxy:v3.8.0                 "imgproxy"                 imgproxy    19 minutes ago   Up 3 minutes (healthy)   8080/tcp
supabase-kong                    kong:2.8.1                               "bash -c 'eval \"echo…"   kong        19 minutes ago   Up 3 minutes (healthy)   0.0.0.0:8000->8000/tcp, :::8000->8000/tcp, 8001/tcp, 0.0.0.0:8443->8443/tcp, :::8443->8443/tcp, 8444/tcp
supabase-meta                    supabase/postgres-meta:v0.91.6           "docker-entrypoint.s…"    meta        19 minutes ago   Up 3 minutes (healthy)   8080/tcp
supabase-pooler                  supabase/supavisor:2.7.0                 "/usr/bin/tini -s -g…"    supavisor   19 minutes ago   Up 3 minutes (healthy)   0.0.0.0:5432->5432/tcp, :::5432->5432/tcp, 0.0.0.0:6543->6543/tcp, :::6543->6543/tcp
supabase-rest                    postgrest/postgrest:v13.0.7              "postgrest"                rest        19 minutes ago   Up 3 minutes             3000/tcp
supabase-storage                 supabase/storage-api:v1.28.0             "docker-entrypoint.s…"    storage     19 minutes ago   Up 3 minutes (healthy)   5000/tcp
supabase-studio                  supabase/studio:2025.10.01-sha-8460121   "docker-entrypoint.s…"    studio      19 minutes ago   Up 3 minutes (healthy)   3000/tcp
supabase-vector                  timberio/vector:0.28.1-alpine            "/usr/local/bin/vect…"    vector      19 minutes ago   Up 3 minutes (healthy)   

動作確認

Supabase Studioにアクセスしてたところ、レスポンスを得ることができました。動作していそうです。
(秘匿情報は.envに記述してあります。)

example@raspberrypi:~/src/ex-supabase/supabase-project $ curl -u supabase:this_password_is_insecure_and_should_be_updated http://localhost:8000
/project/default

以上です。ご参考になれば幸いです。

MIERUNEのZennブログ

Discussion