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を要求します。
導入にあたって下記の記事を参考にさせていただきました。
記事に従い、下記コマンドを実行するとパッケージが見つかりました。(省略)
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の導入
基本的に下記の手順に従うだけで問題なく動作すると思います。
私の環境では特にエラーを生ずることなく、下記のコマンドをそのまま順番に実行することができました。
しかし、最後の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
Raspberry Pi5のページサイズについて調べると以下のようでした。
Raspberry Pi5からはKernelのpagesizeが4KBから16KBへと4倍にアップされました。
(補足)ページサイズの違いにより、以下のようなパフォーマンスの差異が生じるようです。
ともかく、原因は分かったのでページサイズを変更することとします。
この操作は自己責任で行なってください
現状のサイズを確認します。
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
以上です。ご参考になれば幸いです。
Discussion