はじめに
※この記事は2024/10/12時点での内容です。
Supabaseを利用していると無料プランの枠ではどうしても収まらず、Proプランを考えるときが来ると思います。
しかし、Proプランは月25ドル(約3700円)~となり、個人開発や小規模なビジネスにとっては「ちょっと高いな」と躊躇する値段に感じてしまいます。
上記のようなコスト面での悩みを抱えている人にもう一つの選択肢として考えられるのセルフホスティングです。
SupabaseはOSSであり公式がセルフホスティングの記事を公開しています。
https://supabase.com/docs/guides/self-hosting
今回は安くセルフホスティングする方法を模索してみたのでその結果を見ていただければと思います。
前提
- 各種コミュニティが用意しているsupabaseのホスティング機能かDockerを利用する
限りなく無料で使えるホスティング先を探す
まずは無料で使えるホスティング先を探してみます。
色々見ていると下記のような選択肢が候補にあがりました。
(過去にはもう少し無料で利用できるホスティング先があったようですが近年は最小プランで5ドルぐらいが多いようです。)
- GCEの無料枠
- Render
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の構成の際いくらかかるか色々調べてみると
- GCP(GCE, e2-small)
- 15.68843ドル/月(2,003円)
- https://cloud.google.com/compute/vm-instance-pricing?hl=ja
- AWS(ECS, t2.small)
- 16.56ドル/月(2,461円)
- https://aws.amazon.com/jp/ec2/instance-types/t2/
- azureは一目見て高すぎることがわかったので書かない
- DigitalOcean(Droplets, メモリ2ギガ, CPU2コアプラン)
- 18ドル/月(2,684円)
- CPU1コアにしても12ドル/月(1,789円)
- https://www.digitalocean.com/pricing/droplets
- さくらVPS(メモリ2ギガ, CPU3コア,)
- XServer VPS(メモリ2ギガ, CPU3コア,)
- 1150円/月
- セキュリティ系機能に乏しい(パケットフィルタぐらいしかなさそう)
- https://vps.xserver.ne.jp/price.php
- Conoha VPS
やはり円安の影響か海外サービスはかなり割高に感じるため、セキュリティも考えると国産サービスの
- さくら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無料枠以上のスペックで利用することは確実に可能になります。
自分のサービスをできるだけ安く運用しようと考えている方には良い選択肢の一つになるのではないでしょうか?