icon

Supabase

開源的 Firebase 替代方案。我們使用企業級開源工具來建構 Firebase 的功能。

template cover
部署次數1790
發布者yuaanlin
建立於2024-04-03
模板內的服務
service icon
service icon
service icon
service icon
service icon
service icon
service icon
service icon
service icon
service icon
service icon
service icon
標籤
CMSDatabaseToolAPI

Supabase Zeabur 自架版

這是 Supabase 在 Zeabur 上的自架版範例。 你可以使用這個模板在 Zeabur 上部署 Supabase 實例。

服務

此 Supabase 實例包含 Kong(API 閘道)、Studio(Supabase Studio)、PostgreSQL(資料庫)、Meta(Postgres Meta)、REST(PostgREST)、Auth(GoTrue)、Supavisor(連線池)、Realtime(資料庫變更訂閱)、Storage(儲存 API)、MinIO(物件儲存)、ImgProxy(圖片處理)和 Functions(Edge Functions)。

詳細架構資訊請參考官方 Supabase 架構文件

因平台限制而未包含的服務:

  • Vector(日誌聚合):需要 Kubernetes RBAC ClusterRole 權限來收集 pod 日誌,基於安全考量 Zeabur 不提供此權限。
  • Analytics(Logflare):依賴 Vector 進行日誌收集。沒有 Vector,Analytics 沒有資料來源,因此未包含。

注意: 沒有 Analytics,Supabase Studio 的日誌功能將無法使用。其他所有 Studio 功能(資料庫、認證、儲存管理等)都可以正常運作。

如果你需要額外的 Supabase 服務,歡迎根據上游 docker-compose.yaml 檔案實作,並將你的變更提交到我們的 Discord 伺服器。這適用於我們的貢獻獎勵計畫

開始使用

訪問儀表板

部署完成後,你的 Supabase Studio 儀表板將可在你配置的網域上使用。

查詢登入憑證:

  1. 前往 Zeabur 專案中的 Kong 服務
  2. 點擊 Instructions(說明) 標籤
  3. 你會看到:
    • Supabase Username:你的儀表板使用者名稱(來自 DASHBOARD_USERNAME 變數)
    • Supabase Password:自動生成的安全密碼

重要安全密鑰

以下密鑰在 Kong 服務 的環境變數中公開:

密鑰位置說明
JWT_SECRETKong 服務用於簽署 JWT 令牌的密鑰
ANON_KEYKong 服務匿名訪問的公開 API 密鑰
SERVICE_ROLE_KEYKong 服務具有完整訪問權限的管理員 API 密鑰

⚠️ 重要:預設密鑰僅供示範使用。在正式環境使用前,你必須生成新的密鑰。

如何生成安全密鑰:

  1. 訪問 Supabase JWT 生成器
  2. 使用你的自訂 JWT_SECRET 生成新的密鑰:
    • 生成 anon 密鑰 → 作為 ANON_KEY 使用
    • 生成 service_role 密鑰(網站上顯示為 SERVICE_KEY)→ 作為 SERVICE_ROLE_KEY 使用
  3. 在 Kong 服務中更新環境變數
  4. 重啟所有服務以套用變更:
    • 進入你的 專案設定一般設定
    • 向下捲動到 批次動作
    • 點擊 全部重啟 以重啟所有服務

保護你的服務

雖然我們提供了一些範例密鑰以便快速開始,但你絕對不應該使用我們提供的預設值來部署 Supabase。請依照本節中的所有步驟確保你有安全的設定,然後重啟所有服務以套用變更。

官方指南

配置

新增 Google OAuth 支援

auth 服務中新增以下環境變數:

  • GOTRUE_EXTERNAL_GOOGLE_ENABLED=true
  • GOTRUE_EXTERNAL_GOOGLE_CLIENT_ID=xxxxxxxx
  • GOTRUE_EXTERNAL_GOOGLE_SECRET=yyyyyyyy
  • GOTRUE_EXTERNAL_GOOGLE_REDIRECT_URI=https://supabase.zeabur.app/auth/v1/callback

supabase.zeabur.app 更新為你的公開網域,例如:supabase.example.com

你可以在 Google Cloud Console 中找到客戶端 ID 和密鑰。

然後,重啟你的 auth 服務。

新增 Apple OAuth 支援

auth 服務中新增以下環境變數:

  • GOTRUE_EXTERNAL_APPLE_ENABLED=true
  • GOTRUE_EXTERNAL_APPLE_CLIENT_ID=xxxxxxxx
  • GOTRUE_EXTERNAL_APPLE_SECRET=yyyyyyyy
  • GOTRUE_EXTERNAL_APPLE_REDIRECT_URI=https://supabase.zeabur.app/auth/v1/callback

supabase.zeabur.app 更新為你的公開網域,例如:supabase.example.com

你可以在 Apple Developer Console 中找到客戶端 ID 和密鑰。

然後,重啟你的 auth 服務。

配置 SMTP 電子郵件服務(Resend 整合)

要在 Supabase 中啟用電子郵件功能(使用者驗證、密碼重設等),請使用 Resend 作為電子郵件服務提供商配置 SMTP 設定。

步驟 1:Resend 設定(電子郵件服務提供商)

網域驗證:

  1. 在 Resend 中驗證你的網域(例如:mail.yourdomain.com
  2. 依照 Resend 提供的設定 DNS 記錄(TXT、CNAME、SPF、MX)
  3. 確保驗證狀態顯示「已驗證」

寄件者電子郵件設定:

  1. 配置寄件者電子郵件地址:noreply@mail.yourdomain.com
  2. 從儀表板取得你的 Resend API 金鑰

步驟 2:Supabase Auth SMTP 配置

auth 服務中新增以下環境變數:

  • GOTRUE_SMTP_HOST=smtp.resend.com - SMTP 伺服器主機
  • GOTRUE_SMTP_PORT=587 - 使用 STARTTLS 埠號
  • GOTRUE_SMTP_USER=resend(或留空)- Resend 不驗證使用者名稱,只驗證 API 金鑰
  • GOTRUE_SMTP_PASS=re_xxx - 你的 Resend API 金鑰
  • GOTRUE_SMTP_ADMIN_EMAIL=noreply@mail.yourdomain.com - 管理員寄件者電子郵件
  • GOTRUE_SMTP_SENDER_NAME=Your App Name - 電子郵件的顯示名稱
  • GOTRUE_SITE_URL=https://yourdomain.zeabur.app - 決定電子郵件中驗證連結的網域

步驟 3:Zeabur 環境配置

  1. 前往你的 Zeabur 專案
  2. 前往 Service > Auth > Variables
  3. 新增上述所有 SMTP 變數
  4. 重啟 auth 服務以套用變更

步驟 4:測試電子郵件功能

手動測試:

curl -X POST "https://yourdomain.zeabur.app/auth/v1/signup" \
  -H "Content-Type: application/json" \
  -H "apikey: YOUR_ANON_KEY" \
  -d '{
    "email": "test@example.com",
    "password": "yourpassword"
  }'

預期結果:

  • 驗證電子郵件成功傳送
  • 電子郵件送達收件者(最初請檢查垃圾郵件資料夾)
  • Supabase Auth 自動處理註冊驗證和密碼重設電子郵件

疑難排解注意事項

  • SPF/DKIM 問題: 確保所有 DNS 設定符合 Resend 的要求,以防止電子郵件被拒絕
  • 重新導向 URI 不符: 確保 GOTRUE_SITE_URL 符合你實際部署的網域
  • 電子郵件送達: 初始電子郵件可能會進入垃圾郵件;適當的 DNS 配置可提高送達率
  • API 金鑰安全性: 將 Resend API 金鑰安全地儲存在環境變數中,切勿在程式碼中

其他功能(可選)

對於進階電子郵件自訂,你可以配置:

  • 自訂電子郵件範本
  • 傳遞報告 webhook
  • BIMI(訊息識別品牌指標)設定
  • 速率限制和頻率控制

進階 Auth 配置(可選)

auth 服務中新增這些環境變數以啟用進階功能:

自訂存取令牌掛鉤:

  • GOTRUE_HOOK_CUSTOM_ACCESS_TOKEN_ENABLED=true
  • GOTRUE_HOOK_CUSTOM_ACCESS_TOKEN_URI=pg-functions://postgres/public/custom_access_token_hook
  • GOTRUE_HOOK_CUSTOM_ACCESS_TOKEN_SECRETS=<your-base64-secret>

MFA 驗證掛鉤:

  • GOTRUE_HOOK_MFA_VERIFICATION_ATTEMPT_ENABLED=true
  • GOTRUE_HOOK_MFA_VERIFICATION_ATTEMPT_URI=pg-functions://postgres/public/mfa_verification_attempt

密碼驗證掛鉤:

  • GOTRUE_HOOK_PASSWORD_VERIFICATION_ATTEMPT_ENABLED=true
  • GOTRUE_HOOK_PASSWORD_VERIFICATION_ATTEMPT_URI=pg-functions://postgres/public/password_verification_attempt

自訂 SMS 掛鉤:

  • GOTRUE_HOOK_SEND_SMS_ENABLED=true
  • GOTRUE_HOOK_SEND_SMS_URI=pg-functions://postgres/public/custom_sms_hook
  • GOTRUE_HOOK_SEND_SMS_SECRETS=v1,whsec_<your-secret>

自訂電子郵件掛鉤:

  • GOTRUE_HOOK_SEND_EMAIL_ENABLED=true
  • GOTRUE_HOOK_SEND_EMAIL_URI=http://host.docker.internal:54321/functions/v1/email_sender
  • GOTRUE_HOOK_SEND_EMAIL_SECRETS=v1,whsec_<your-secret>

其他選項:

  • GOTRUE_EXTERNAL_SKIP_NONCE_CHECK=true(用於行動裝置 Google 登入)
  • GOTRUE_MAILER_SECURE_EMAIL_CHANGE_ENABLED=true
  • GOTRUE_SMTP_MAX_FREQUENCY=1s

Studio SQL 助手: 新增至 studio 服務:

  • OPENAI_API_KEY=your-openai-api-key