logo
icon

Supabase Self-Hosted

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

template cover
部署次數53
發布者terry90918
建立於2025-11-13
模板內的服務
service icon
service icon
service icon
service icon
service icon
service icon
service icon
service icon
service icon
service icon
service icon
service icon
標籤
databasebackendsupabasepostgresqlauthstoragerealtime

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