Supabaseのセルフホスティングをできるだけ安く行う方法

目次

はじめに

※この記事は2024/10/12時点での内容です。
Supabaseを利用していると無料プランの枠ではどうしても収まらず、Proプランを考えるときが来ると思います。
しかし、Proプランは月25ドル(約3700円)~となり、個人開発や小規模なビジネスにとっては「ちょっと高いな」と躊躇する値段に感じてしまいます。

上記のようなコスト面での悩みを抱えている人にもう一つの選択肢として考えられるのセルフホスティングです。
SupabaseはOSSであり公式がセルフホスティングの記事を公開しています。
https://supabase.com/docs/guides/self-hosting

今回は安くセルフホスティングする方法を模索してみたのでその結果を見ていただければと思います。

前提

  • 各種コミュニティが用意しているsupabaseのホスティング機能かDockerを利用する

限りなく無料で使えるホスティング先を探す

まずは無料で使えるホスティング先を探してみます。
色々見ていると下記のような選択肢が候補にあがりました。
(過去にはもう少し無料で利用できるホスティング先があったようですが近年は最小プランで5ドルぐらいが多いようです。)

GCEの方が有名でわかりやすそうなのでまずはGCEで試してみましたが、
無料枠の範囲内の条件の一つであるe2-microのインスタンスだとdocker compose up時にフリーズしてしまい、
結論としては無料枠での利用は難しいことがわかりました。
(renderの無料枠はさらにメモリが少ないため確実に動かないと思われます。)

一応GCEで対応する際のスタックしたポイントのみ載せておきます。

GCEでスタックしたポイント

debianだとsupabase-analyticsのエラーが発生

始めはGCEインスタンスのOSをデフォルトのdebianにしていたのですが、下記issueと同じような問題が発生してしまい、解決はできるものの動作が怪しかったのでubuntuで建て直したらちゃんとsupabase docker compose upが通るようになりました。(とはいえフリーズして使えなかったですが…)
https://github.com/orgs/supabase/discussions/20211

無料枠以外の選択肢を探してみる

無料枠だとフリーズしたため、メモリ1GBでは利用できないことがわかりました。

公式に推奨スペック情報などがみあたらなかったため、とりあえず1gbあげて2gbの構成で考えてみます。

各クラウドサービス、vpsでメモリ2gbの構成の際いくらかかるか色々調べてみると

  • azureは一目見て高すぎることがわかったので書かない
  • DigitalOcean(Droplets, メモリ2ギガ, CPU2コアプラン)
  • XServer VPS(メモリ2ギガ, CPU3コア,)

やはり円安の影響か海外サービスはかなり割高に感じるため、セキュリティも考えると国産サービスの

  • さくらVPS
  • Conoha VPS

の二択に絞られそうです。

今回はできるだけ安く抑えるためConoha VPSの2GBプランを利用します。

Conoha VPSの設定

サーバ申し込み

まずは申し込み時に選択すべき設定です。

イメージタイプはDockerにしましょう。サーバへの追加インストールを省略できて楽です。
月額2GBのプランを選択して購入します。

セキュリティグループ設定

サイドメニューのセキュリティタブからセキュリティグループを作成します。
開発用に自分が利用するだけであれば、ssh, http, httpsの22. 80, 443のポートをそれぞれ自宅や会社のネットワークアドレス向けに開けるようにしましょう。
下記のサイトが便利です。
https://www.cman.jp/network/support/go_access.cgi

作成したらサーバと結びつけます。

SSH接続設定

Conoha VPSのブラウザコンソール微妙に使いづらいので自分の端末から接続できるようにしたほうが良いです。
(コピペとかしやすいですし)

SSHキーはセキュリティタブ内のSSH Key項目から生成できます。

pemファイル(秘密鍵)を生成したらteratermなどのクライアントから接続しましょう。
https://teratermproject.github.io/

ここまで終わったらssh接続してサーバ内での作業に移りましょう。

ユーザ作成

rootユーザでログイン後、安全のため管理者権限のユーザを別で作成しましょう。
コンソールで下記を入力します。

adduser {ユーザ名}

ユーザの作成ができたら下記コマンドでsudo権限を渡します。

usermod -aG sudo {ユーザ名}

// ユーザ切り替え
su {ユーザ名}

サーバにSupabaseをセルフホスティングする

gitもdockerも導入済みの状態で利用できるため、まずは外部からアクセスできるようにするためnginxの設定をしていきましょう。

nginx導入

sudo apt update
sudo apt install nginx

ファイアウォールで制限されないようnginxを許可します。

sudo ufw allow 'Nginx Full'

nginxのconfファイル編集

https://github.com/supabase/supabase/blob/master/docker/.env.example
上記のSupabase/Dockerの.envファイルを見るとわかりますが、デフォルトのSupabaseの公開URLはSUPABASE_PUBLIC_URL=http://localhost:8000 となっています。つまりlocalhost:8000のプロキシ設定をして外部公開するためのconfファイルが最低限必要です。

cd /etc/nginx/conf.d
sudo vi supabase.conf

でファイルを作成し、下記のように入力しましょう。

server {
    listen       80;
    root         /usr/share/nginx/html;
    server_name  {サーバのipアドレス};

    location / {
        proxy_pass http://localhost:8000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

その後、nginxを起動し、自動起動も有効にします。

sudo systemctl start nginx
sudo systemctl enable nginx

Supabaseの立ち上げ

nginxのルートに移動します。

cd /usr/share/nginx/html

その後、下記公式URLの内容に沿ってSupabaseのプロジェクトの立ち上げを行います。
https://supabase.com/docs/guides/self-hosting/docker

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

# Go to the docker folder
cd supabase/docker

# Copy the fake env vars
cp .env.example .env

# Pull the latest images
docker compose pull

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

この際.envファイルの作成後にSecretsの設定を必ず行いましょう。
JWT_SECRET, ANON_KEY, SERVICE_ROLE_KEYは下記URL内で生成できるためそれを利用しましょう。
https://supabase.com/docs/guides/self-hosting/docker

############
# Secrets
# YOU MUST CHANGE THESE BEFORE GOING INTO PRODUCTION
############

POSTGRES_PASSWORD=
JWT_SECRET=
ANON_KEY=
SERVICE_ROLE_KEY=
DASHBOARD_USERNAME=
DASHBOARD_PASSWORD=

docker compose up-dでSupabaseの起動が問題なく完了したらサーバのIPアドレスにアクセスしてみましょう。
始めにBasic認証が表示されるので.envファイルで指定したユーザ名、パスワードを入力しましょう。
すると見慣れたSupabaseのトップページが表示されます!

まとめ

ここまででSupabaseをConoha VPSにホスティングすることができました。
Supabase Proプランと比較すると毎月2500円以上も安く利用できる計算です。
もちろんユーザサポートなどはないため、自分で全ての設定をしなければいけませんがSupabase無料枠以上のスペックで利用することは確実に可能になります。
自分のサービスをできるだけ安く運用しようと考えている方には良い選択肢の一つになるのではないでしょうか?

  • システム開発、アプリ開発
  • マッチングアプリ開発
  • インフラ構築支援等、なんでもご相談ください。
よかったらシェアしてね!
  • URLをコピーしました!
目次