Supabaseは、アプリケーションの開発に必要なすべてのツールを提供するオープンソースのFirebaseの代替手段です。 Supabaseは、PostgreSQLデータベース、ユーザー認証、ストレージ、リアルタイムAPIを提供し、Angular、Flutter、Next.js、React、Svelte、Vueなどの一般的なフレームワークやツールと統合します。
Supabaseを使用する方法は2つあります。最初のオプションは、より多くの機能を提供するクラウドホスト型アプリにサインアップすることです。 2番目のオプションは、Dockerを使用してコードをセルフホストすることです。ただし、セルフホスティングにはいくつかの注意点があります。プロジェクトを作成または管理することはできません。さらに、プロジェクト全体がベータ段階にあるため、テストとローカル開発にのみセルフホストバージョンを使用する必要があります。他のすべての目的には、クラウドアプリケーションを使用する必要があります。
このチュートリアルでは、Debian 11ベースのサーバーにSupabaseをインストールし、Nginxサーバーを介してプロキシする方法を学習します。
-
2GB以上のRAMを搭載したDebian11を実行しているサーバー。
-
sudo権限を持つroot以外のユーザー。
-
ドメイン名(
supabase.example.com
)サーバーを指しています。 -
すべてが更新されます。
$ sudo apt update &&sudo apt upgrade
-
システムに必要なパッケージはほとんどありません。
$ sudo apt install nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release debian-archive-keyring -y
これらのパッケージの一部は、システムにすでにインストールされている可能性があります。
最初のステップは、ファイアウォールを構成することです。 Debianにはufw(Uncomplicated Firewall)が付属しています。
ファイアウォールが実行されているかどうかを確認します。
$ sudo ufw status
次の出力が得られるはずです。
ステータス:非アクティブ
SSHポートを許可して、ファイアウォールが有効にしたときに現在の接続を切断しないようにします。
$ sudo ufw allow OpenSSH
HTTPポートとHTTPSポートも許可します。
$ sudo ufw allow 80 / tcp $ sudo ufw allow 443 / tcp
ファイアウォールを有効にする
$ sudo ufw enableCommandは、既存のssh接続を中断する可能性があります。操作を続行しますか(y | n)? yFirewallはアクティブであり、システムの起動時に有効になります
ファイアウォールのステータスをもう一度確認してください。
$ sudo ufw status
同様の出力が表示されるはずです。
ステータス:activeTo Action From-- ------ ---- OpenSSH ALLOW Anywhere80 / tcp ALLOW Anywhere443 / tcp ALLOW AnywhereOpenSSH(v6)ALLOW Anywhere(v6)80 / tcp(v6)ALLOW Anywhere(v6) 443 / tcp(v6)どこでも許可(v6)
Gitをインストールします。
$ sudo apt install git
インストールを確認します。
$git--versiongitバージョン2.30.2
Dockerの最新バージョンをインストールするには、Dockerの公式GPGキーを追加します。
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
公式のDockerリポジトリをインストールします。
$ echo \ "deb [arch =$(dpkg --print-architecture)signed-by =/ usr / share / keyrings / docker-archive-keyring.gpg] https://download.docker.com/linux / debian \ $(lsb_release -cs)stable "| sudo tee /etc/apt/sources.list.d/docker.list> / dev / null
Debianシステムリポジトリを更新します。
$ sudo apt update
最新バージョンのDockerをインストールします。
$ sudo apt install docker-ce docker-ce-cli containerd.io
Dockerが実行されていることを確認します。
$ sudo systemctl status docker? docker.service-Dockerアプリケーションコンテナエンジンロード済み:ロード済み(/lib/systemd/system/docker.service;有効;ベンダープリセット:有効)アクティブ:アクティブ(実行中)Mon 2022-03-21 03:19:09 UTC; 9秒前TriggeredBy:? docker.socketドキュメント:https://docs.docker.comメインPID:15816(dockerd)タスク:7メモリ:27.9M CPU:566ms CGroup:/system.slice/docker.service ?? 15816 / usr / bin / dockerd -H fd:// --containerd =/ run / containerd / containerd.sock
デフォルトでは、Dockerにはroot権限が必要です。 sudo
の使用を避けたい場合 docker
を実行するたびに コマンドで、ユーザー名をdocker
に追加します グループ。
$ sudo usermod -aG docker $(whoami)
この変更を有効にするには、サーバーからログアウトして同じユーザーとして再度ログインする必要があります。
Docker Composeの最新の利用可能なバージョンは2.0.xですが、互換性の理由から、古くて安定したv1.29.2をインストールします。
次のコマンドを実行して、DockerComposeの安定版をダウンロードします。
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o / usr / local / bin / docker-compose
実行可能権限をバイナリファイルに適用します。
$ sudo chmod + x / usr / local / bin / docker-compose
DockerComposeのbash完了スクリプトをダウンロードしてインストールします。
$ sudo curl \ -L https://raw.githubusercontent.com/docker/compose/1.29.2/contrib/completion/bash/docker-compose \ -o /etc/bash_completion.d/docker-compose
次のコマンドを実行して、変更を適用します。
$ source〜/ .bashrc
SupabaseGithubリポジトリのクローンを作成します。
$ git clone --depth 1 https://github.com/supabase/supabase.git
--depth 1
パラメータはリポジトリの浅いクローンを作成します。つまり、履歴全体ではなく、最新のコミットのみを取得します。これは、パフォーマンスを向上させるために行われます。
dockerディレクトリに切り替えます。
$ cd supabase / docker
サンプルファイルから環境ファイルを作成します。
$ cp .env.example .env
新しく作成したファイルを開いて編集します。
$ nano .env
変数POSTGRES_PASSWORD
の値を変更します 強力に生成された一意のパスワードを使用します。
$ POSTGRES_PASSWORD =
特殊文字を含まない32文字を超える別の一意のパスワードを生成します。 JWT_SECRET
の値を置き換えます このパスワードを使用します。
JWT_SECRET =
Bitwardenや1passwordなどのオンラインパスワードジェネレーターを使用して、上記のパスワードを作成できます。
Supabase Webサイトを開き、JWT_SECRET
を入力します ANON_KEY
を生成します 。 JWT_SECRET
を貼り付けます 指定されたボックスで、ANON_KEY
を選択します 事前設定されたペイロードから ドロップダウンメニューをクリックして、 Generate JWT をクリックします トークンを生成するためのボタン。
このトークンをコピーして、ANON_KEY
の値として貼り付けます .env
内 ファイル。
同様に、SERVICE_KEY
を生成するために同じ手順を繰り返します。 事前設定されたペイロードを切り替えることによって Generate JWTを押します ボタン。
生成されたトークンをコピーして、SERVICE_KEY
の値として貼り付けます .env
内 ファイル。
次の変数を構成して、電子メールSMTP設定を構成します。チュートリアルにはAmazonのSESサービスを使用しています。
[email protected] SMTP_HOST =email-smtp.us-west-2.amazonaws.comSMTP_PORT =587SMTP_USER =SMTP_PASS = SMTP_SENDER_NAME =SupabaseAdmin
サイトのURLを構成します。
SITE_URL =https://supabase.example.com
パブリックRESTURLを構成します。
PUBLIC_REST_URL =https://supabase.example.com/rest/v1/
Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。
SMTP経由で送信される認証メールは、Supabaseで蔓延しているバグのため、リンク切れになります。この問題を修正するには、docker-compose.yml
を開きます ファイル。
$ nano docker-compose.yml
変数API_EXTERNAL_URL
を追加します GOTRUE_SITE_URL
のすぐ下 変数は次のようになります。
GOTRUE_SITE_URL:$ {SITE_URL} API_EXTERNAL_URL:$ {SITE_URL}
Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。このファイルは、Supabaseインストールをアップグレードするたびに上書きされます。うまくいけば、バグは次回修正されるでしょう。メールのバグが繰り返されないようにするには、この変数を手動で追加する必要があります。
volumes/api/kong.yml
を開きます 編集用のファイル。
$ nanovolumes / api / kong.yml
consumers
の下 セクションで、anon
を置き換えます ANON_KEY
を使用したユーザーのキー 以前に生成されました。
また、service_role
を置き換えます SERVICE_KEY
を使用したのキー 上で生成されました。
Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。
次のコマンドを使用してSupabaseを実行します。このプロセスには時間がかかります。
$ docker-compose -f docker-compose.yml -f ./dev/docker-compose.dev.yml up -d
実行中のコンテナのステータスを確認します。
$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESd25393873731 supabase / storage-api:v0.10.0 "/bin/sh-c\"。/stora…"約1分前アップ約1分5000/tcp supabase-storagee6df7dcdd45b supabase / gotrue:v2.5.21"gotrue"約1分前Up約1分supabase-authb3a758592d10supabase / postgres-meta:v0.29.0"postgres-meta"約1分前Up約1分0.0.0.0:5555-> 8080 / tcp、:::5555-> 8080 / tcp supabase-metacdb18c248f79 supabase / realtime:v0.21.0 "bash-c'./prod/rel…"約1分前Up約1分supabase-realtime71417337efaepostgrest/ postgrest:v9.0.0 "/ bin/postgrest"約1分前アップ約1分3000/tcp supabase-rest2d51af16bd1f kong:2.1"/docker-entrypoint。…"2分前アップ約1分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-kongd6490380e4e8 supabase / postgres:14.1.0"docker-entrypoint.s…"2分前UpAboutにいるute 0.0.0.0:5432->5432/tcp、:::5432-> 5432 / tcp supabase-db40a49d1482fa supabase / studio:latest"docker-entrypoint.s…"2分前アップ約1分0.0.0.0:3000-> 3000 / tcp、:::3000-> 3000 / tcp supabase-studio3cce50db9782 inbucket / inbucket:stable"/start-inbucket.sh…"2分前アップ約1分(正常)0.0.0.0:1100-> 1100 / tcp、:::1100-> 1100 / tcp、0.0.0.0:2500-> 2500 / tcp、:::2500-> 2500 / tcp、0.0.0.0:9000-> 9000 / tcp、:::9000-> 9000 / tcp supabase-mail
Let's Encryptを使用してSSL証明書をインストールするには、Certbotツールをインストールする必要があります。
そのためにSnapdパッケージインストーラーを使用します。ほとんどのDebianサーバーには同梱されていないため、Snapdインストーラーをインストールしてください。
$ sudo apt install snapd
Snapdのバージョンが最新であることを確認してください。
$ sudo snap install core &&sudo snap refresh core
Certbotをインストールします。
$ sudo snap install --classic certbot
次のコマンドを使用して、/usr/bin
へのシンボリックリンクを作成してCertbotコマンドを実行できるようにします。 ディレクトリ。
$ sudo ln -s / snap / bin / certbot / usr / bin / certbot
インストールを確認します。
$ certbot --versioncertbot 1.25.0
SSL証明書を生成します。
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d supabase.example.com
上記のコマンドは、証明書を/etc/letsencrypt/live/supabase.example.com
にダウンロードします。 サーバー上のディレクトリ。
Diffie-Hellmanグループを生成します 証明書。
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096
Let'sEncryptの自動更新用のチャレンジWebルートディレクトリを作成します。
$ sudo mkdir -p / var / lib /letsencrypt
Cronジョブを作成してSSLを更新します。証明書を確認し、必要に応じて更新するために毎日実行されます。そのためには、まず、ファイル/etc/cron.daily/certbot-renew
を作成します。 開いて編集します。
$ sudo nano /etc/cron.daily/certbot-renew
次のコードを貼り付けます。
#!/ bin / shcertbot renew --cert-name supabase.example.com --webroot -w / var / lib /letsencrypt / --post-hook "systemctl reload nginx"
Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。
タスクファイルの権限を変更して実行可能にします。
$ sudo chmod + x /etc/cron.daily/certbot-renew
Debianには古いバージョンのNginxが同梱されています。最新バージョンをインストールするには、公式のNginxリポジトリをダウンロードする必要があります。
公式のNginx署名キーをインポートします。
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \ | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg> / dev / null
Nginxの安定バージョンのリポジトリを追加します。
$ echo "deb [signed-by =/ usr / share / keyrings / nginx-archive-keyring.gpg arch =amd64] \ http://nginx.org/packages/debian` lsb_release -cs` nginx "\ || sudo tee /etc/apt/sources.list.d/nginx.list
Debianリポジトリを更新します。
$ sudo apt update
Nginxをインストールします。
$ sudo apt install nginx
インストールを確認します。必ずsudo
を使用してください DebianでNginxコマンドを実行するたび。そうしないと、機能しません。
$ sudo nginx -vnginxバージョン:nginx / 1.20.2
ファイル/etc/nginx/conf.d/supabase.conf
を作成して開きます 編集用。
$ sudo nano /etc/nginx/conf.d/supabase.conf
次のコードを貼り付けます。
map $ http_upgrade $connection_upgrade{デフォルトのアップグレード; '' close;} アップストリームsupabase{サーバーlocalhost:3000;}アップストリームkong {サーバーローカルホスト:8000;}#HTTPSserverを強制する{listen 80;聞く[::]:80; server_name supabase.example.com; return 301 https:// $ host $ request_uri;} server {listen 443 ssl http2;リッスン[::]:443 ssl http2; server_name supabase.example.com; access_log /var/log/nginx/supabase.access.log; error_log /var/log/nginx/supabase.error.log; gzipをオンにします。 #SSL ssl_certificate /etc/letsencrypt/live/supabase.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/supabase.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/supabase.example.com/chain.pem; ssl_session_timeout 5m; ssl_session_cache shared:MozSSL:10m; ssl_session_tickets off; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY -RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1; ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem;リゾルバ8.8.8.8; client_max_body_size 100m; #REST APIの場所〜^ / rest / v1 /(。*)$ {proxy_set_header Host $ host; proxy_pass http:// kong; proxy_redirect off; }#認証場所〜^ / auth / v1 /(。*)$ {proxy_set_header Host $ host; proxy_pass http:// kong; proxy_redirect off; }#リアルタイムの場所〜^ / realtime / v1 /(。*)$ {proxy_redirect off; proxy_pass http:// kong; proxy_http_version 1.1; proxy_set_headerアップグレード$http_upgrade; proxy_set_header接続$connection_upgrade; proxy_set_header Host $ host; }#スタジオの場所/ {proxy_set_header Host $ host; proxy_pass http:// supabase; proxy_redirect off; proxy_set_headerアップグレード$http_upgrade; }}
Ctrl + Xを押してファイルを保存します Yと入力します 終了したらプロンプトが表示されたら。
ファイル/etc/nginx/nginx.conf
を開きます 編集用。
$ sudo nano /etc/nginx/nginx.conf
include /etc/nginx/conf.d/*.conf;
の行の前に次の行を追加します 。
server_names_hash_bucket_size 64;
Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。
Nginx構成ファイルの構文を確認します。
$ sudo nginx -tnginx:構成ファイル/etc/nginx/nginx.conf構文はoknginx:構成ファイル/etc/nginx/nginx.confテストは成功しました
Nginxサービスを開始して、新しい構成を有効にします。
$ sudo systemctl start nginx
これで、URL https://supabase.example.com
を介してSupabaseにアクセスできます。 Webブラウザで。
新しいプロジェクトを作成することはできませんが、既存のプロジェクトを管理し、データベース、ストレージ、および認証を構成することはできます。
Supabaseはユーザー管理を提供しないため、Supabaseのインストールを保護する必要があります。これを行う最も簡単な方法は、Nginxサーバーを使用してHTTP認証を有効にすることです。
apache2-utils
をインストールします Nginxのパッケージ。
$ sudo apt install apache2-utils
ユーザーsupabase
のパスワードファイルを作成します 。任意のユーザー名を選択できます。新しいパスワードの入力を求められます。強力なパスワードを入力して、ファイルの設定を完了してください。
$ sudo htpasswd -c /etc/nginx/.htpasswd supabase新しいパスワード:新しいパスワードを再入力:ユーザーsupabaseのパスワードを追加
-c
フラグは、ユーティリティに新しいファイルを作成するように指示します。ファイルを省略する場合は、既存のファイルの場所を指定する必要があります。
/etc/nginx/conf.d/supabase.conf
を開きます 編集用。
$ sudo nano /etc/nginx/conf.d/supabase.conf
以下に示すように、ファイルの次のセクションで変更を加えます。
#REST APIの場所〜^ / rest / v1 /(。*)$ {auth_basic off; proxy_set_header Host $ host; proxy_pass http:// kong; proxy_redirect off; }#認証場所〜^ / auth / v1 /(。*)$ {auth_basic off; proxy_set_header Host $ host; proxy_pass http:// kong; proxy_redirect off; }#リアルタイムの場所〜^ / realtime / v1 /(。*)$ {auth_basic off; proxy_redirect off; proxy_pass http:// kong; proxy_http_version 1.1; proxy_set_headerアップグレード$http_upgrade; proxy_set_header接続$connection_upgrade; proxy_set_header Host $ host; }#スタジオの場所/ {auth_basic“ Supabase Studio Login”; auth_basic_user_file /etc/nginx/.htpasswd; proxy_set_header Host $ host; proxy_pass http:// supabase; proxy_redirect off; proxy_set_headerアップグレード$http_upgrade; }
Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。
構成を確認します。
$ sudo nginx -tnginx:構成ファイル/etc/nginx/nginx.conf構文はoknginx:構成ファイル/etc/nginx/nginx.confテストは成功しました
Nginxサービスを再起動します。
$ sudo systemctl restart nginx
次にSupabaseを開くと、次のログイン画面が表示されます。
Supabaseは継続的に開発中の製品であり、継続的に変更されます。セルフホストインスタンスとして使用する場合は、Supabaseのインストールを最新の状態に保つ必要があります。
Supabaseディレクトリに切り替えます。
$ cd〜/ supabase
最新のGithubリポジトリをプルします。
$ git pull
docker/.env
の変更を探します 、docker/volumes/api/kong.yml
再構成が必要なファイル。
既存のDockerコンテナをシャットダウンしてクリーンアップします。
$ docker-compose down --remove-orphans
最新の画像をプルします。
$ docker-compose pull
コンテナを再起動します。
$ docker-compose -f docker-compose.yml -f ./dev/docker-compose.dev.yml up -d
これで、Nginxサーバーをリバースプロキシとして使用してDebian11ベースのサーバーにSupabaseをインストールするチュートリアルは終了です。ご不明な点がございましたら、下のコメント欄に投稿してください。