メインコンテンツまでスキップ

セルフ・ホスティング

Supabaseにはいくつかの利用方法があります。

  • Supabaseクラウド:何も導入する必要はありません。私たちがインフラを管理し、スケールします。
  • Docker:ご自身のインフラにデプロイします。
  • Kubernetes:近日公開予定です。

アーキテクチャ

Supabaseは、オープンソースのツールを組み合わせたもので、それらはエンタープライズで耐えられるよう、特別に選んでいます。

すでに必要なツールとコミュニティーが存在し、MITやApache 2または同等のオープンライセンスであれば、そのツールを使用し、サポートします。 もし、必要としているツールが存在しないのであれば、自分たちでオープンソースとして開発します。

Supabase Architecture

  • Kongは、クラウド・ネイティブなAPIゲートウェイです。
  • GoTrueはSWTベースのAPIで、ユーザーの管理やSWTトークンの発行ができます。
  • PostgRESTは、PostgreSQLデータベースにRESTful APIで直接接続できるようにするためのWebサーバーです。
  • RealtimeはElixirのサーバーで、PostgreSQLの挿入、更新、削除をWebsocketを使ってリッスンできます。Realtimeは、Postgresに組み込まれたレプリケーション機能を使ってデータベースの変更をポーリングします。そして、変更内容をJSONに変換し、そのJSONをWebsocket経由で許可されたクライアントにブロードキャストします。
  • Storageは、S3に保存されたファイルを管理するためにRESTfulなインターフェイスを提供し、Postgresを使用してパーミッションを管理します。
  • postgres-metaは、Postgresを管理するためのRESTful APIで、テーブルの取得、ロールの追加、およびクエリの実行などが可能です。
  • PostgreSQLは、30年以上にわたって活発な開発が行われているオブジェクト・リレーショナル・データベースシステムです。信頼性、機能の堅牢性、パフォーマンスの面で高い評価を得ています。

構成

各システムには数多くの設定オプションがあり、関連するプロダクトのドキュメントに記載されています。

データベースの管理

ミドルウェアをダウンタイムなしでアップグレードできるように、データベースをミドルウェアから切り離すことをお勧めします。 「ミドルウェア」とは、Postgres以外のすべてのものを指し、あらゆるPostgresプロバイダー(AWS RDSなど)や独自のPostgresクラスターで動作するはずです。

データベースの拡張機能

Supabaseは、APIと認証システムを動作させるために、いくつかのPostgres拡張機能をデフォルトで有効にする必要があります。拡張は、スキーマ初期化スクリプトの中にあります。

すべての拡張をextensionsスキーマにインストールすることをお勧めします。これにより、publicスキーマのすべてのテーブルがAPIで公開されるため、APIをクリーンに保つことができます。

create schema if not exists extensions;
create extension if not exists "uuid-ossp" with schema extensions;
create extension if not exists pgcrypto with schema extensions;
create extension if not exists pgjwt with schema extensions;
uuid-ossp

UUID関数のためのもので、PostgreSQLの13.0以降で必要です。

pgcryptoおよびpgjwt

JWTおよびAuth関数を扱うためのものです。

データベースのロール

Supabaseは、Postgresデータベースにいくつかのデフォルトのロールを作成します。スキーマ初期化スクリプト内にあるコマンドを実行することで、いつでもデフォルトに戻せます。

postgres

PostgreSQLのデフォルトのロールです。管理者権限を持ちます。

anon

「匿名アクセス」のためのロールです。これは、ユーザーがログインしていないときに、API(PostgREST)が使用するロールです。

authenticator

API(PostgREST)用の特別なロールです。非常に限定されたアクセス権を持ち、JWTを検証し、JWTの検証によって決定された別のロールへ「変身」するために使用されます。

authenticated

「認証されたアクセス」のためのロールです。これは、ユーザーがログインしたときにAPI(PostgREST)が使用するロールです。

service_role

昇格アクセス用。このロールは、API(PostgREST)が行単位セキュリティーをバイパスするために使用されます。

supabase_auth_admin

Authミドルウェアがデータベースに接続し、マイグレーションを実行する際に使用します。アクセス権はauthスキーマに限定されます。

supabase_storage_admin

Authミドルウェアがデータベースに接続し、マイグレーションを実行する際に使用します。アクセス権はstorageスキーマに限定されます。

dashboard_user

Supabase UIでコマンドを実行するために使用します。

supabase_admin

Supabaseの管理者で、データベースのメンテナンスを行います。

APIキー

APIゲートウェイ(Kong)は、データベースへのアクセスを認証するためにJWTを使用します。JWTは、関連するPostgresのロールに対応していなければなりません。Supabaseは、認証されていないアクセス用のANON_KEYと、昇格したアクセス用のSERVICE_KEYの2つのロールで動作するように設計されています。

鍵の生成には次のツールを使用してください。

シークレットの管理

Supabaseの多くのコンポーネントは、安全なシークレットとパスワードを使用しています。これらはセルフ・ホスティングのenvファイルに記載されていますが、プロダクションにデプロイする際にはシークレット・マネージャーを使用することを強くお勧めします。dotenvのようなプレーンテキストのファイルでは、誤ってリークが発生し、高くつくことになります。

推奨されるシステムとしては、以下のようなものがあります。

移行とアップグレード

データベースとミドルウェアを切り離しているのであれば、破壊的な変更がない限り、いつでも最新のミドルウェアを再デプロイできるはずです。 Supabaseは急速に進化しており、私たちのコアなサービスの一部として、移行のための戦略を改善していきます。

データベースの移行が難しいことは認識しています。そして、開発者にとって簡単にできるようにするのは、私たちが計画している問題の1つでもあります。

デプロイメントの選択肢

Supabaseは公式にDockerをサポートしていますが、他にもコミュニティーによって管理されているデプロイメントの戦略がいくつかあります。

<<<<<<< HEAD