GNU/Linux >> Linux の 問題 >  >> Debian

Debian11にDockerを使用してSupabaseをインストールする方法

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 

    これらのパッケージの一部は、システムにすでにインストールされている可能性があります。

ステップ1-ファイアウォールを構成する

最初のステップは、ファイアウォールを構成することです。 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)
ステップ2-Gitをインストールする

Gitをインストールします。

 $ sudo apt install git 

インストールを確認します。

 $git--versiongitバージョン2.30.2
ステップ3-Dockerをインストールする

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)

この変更を有効にするには、サーバーからログアウトして同じユーザーとして再度ログインする必要があります。

ステップ4-DockerComposeをインストールします

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 
ステップ5-Supabaseをダウンロードして構成する

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を使用したユーザーのキー 以前に生成されました。

<前>消費者: - ユーザ名:アノンkeyauth_credentials: - キー:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GEは

また、service_roleを置き換えます SERVICE_KEYを使用したのキー 上で生成されました。

<前> - ユーザ名:service_role keyauth_credentials: - キー:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJzZXJ2aWNlX3JvbGUiLAogICAgImlzcyI6ICJzdXBhYmFzZS1kZW1vIiwKICAgICJpYXQiOiAxNjQxNzY5MjAwLAogICAgImV4cCI6IDE3OTk1MzU2MDAKfQ.DaYlNEoUrrEn2Ig7tqibS-PHK5vgusbcbo7X36XVt4Q

Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。

ステップ6-Supabaseをインストールします

次のコマンドを使用して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 
ステップ7-SSLをインストールする

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 
ステップ8-Nginxをインストールして構成する

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 
ステップ9-Supabaseにアクセス

これで、URL https://supabase.example.comを介してSupabaseにアクセスできます。 Webブラウザで。

新しいプロジェクトを作成することはできませんが、既存のプロジェクトを管理し、データベース、ストレージ、および認証を構成することはできます。

ステップ10-HTTP認証を有効にする

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を開くと、次のログイン画面が表示されます。

ステップ11-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をインストールするチュートリアルは終了です。ご不明な点がございましたら、下のコメント欄に投稿してください。


Debian
  1. Debian10BusterにDockerをインストールする方法

  2. Debian9にDockerをインストールして使用する方法

  3. DockerをDebian/Ubuntuにインストールする方法

  1. Debian9にTomcat8.5をインストールする方法

  2. Debian9にMongoDBをインストールする方法

  3. Debian9にNginxをインストールする方法

  1. Debian9にApacheをインストールする方法

  2. Debian9にJenkinsをインストールする方法

  3. Debian9にWebminをインストールする方法