icon

Supabase Self-Hosted

自訂 Supabase 自架設部署模板 - 包含完整的後端服務堆疊(Auth、Database、Storage、Realtime 等)| 已更新至 2025.10 最新版本

template cover
部署次數7
發布者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 自架設部署指南

這是一個完整的 Supabase 後端服務堆疊,包含 Authentication、Database、Storage、Realtime 等所有核心功能。

⚡ 快速開始

預計部署時間: < 5 分鐘 + 10 分鐘安全配置

步驟 1: 一鍵部署

  1. 填寫 DASHBOARD_USERNAME (Supabase Studio 登入帳號)
  2. 填寫 DASHBOARD_PASSWORD (Supabase Studio 登入密碼,請使用強密碼)
  3. 填寫 PUBLIC_DOMAIN (選填,用於自訂網域綁定)
  4. 點擊「部署」按鈕
  5. 等待 3-5 分鐘完成初始部署

⚠️ 重要: 初始部署使用 demo 密鑰,不適合生產環境。請務必完成下方的「步驟 2: 安全配置」。

步驟 2: 部署後安全配置 (必須)

部署完成後,請立即更新以下安全密鑰:

環境變數完整列表

變數名稱類型必填/選填說明如何取得
基礎配置
POSTGRES_PASSWORDPASSWORD必填PostgreSQL 資料庫密碼openssl rand -base64 32
JWT 認證
JWT_SECRETPASSWORD必填JWT 簽章密鑰 (32字元)openssl rand -base64 32 | tr -dc 'A-Za-z0-9' | head -c32
ANON_KEYPASSWORD必填匿名存取金鑰 (前端)使用 JWT Generator 產生 anon 角色 JWT
SERVICE_ROLE_KEYPASSWORD必填服務角色金鑰 (後端)使用 JWT Generator 產生 service_role 角色 JWT
Realtime
SECRET_KEY_BASEPASSWORD必填Realtime 加密密鑰 (64字元)openssl rand -base64 64
資料庫加密
VAULT_ENC_KEYPASSWORD必填Vault 加密金鑰 (32字元)openssl rand -base64 48 | tr -dc 'A-Za-z0-9' | head -c32
PG_META_CRYPTO_KEYPASSWORD必填Meta 加密金鑰 (32字元)可與 VAULT_ENC_KEY 相同
連接池
POOLER_TENANT_IDSTRING必填連接池租戶 ID (UUID)python3 -c "import uuid; print(str(uuid.uuid4()))"
SMTP (選填)
SMTP_HOSTSTRING選填SMTP 伺服器例: smtp.gmail.com
SMTP_PORTSTRING選填SMTP 埠號587 (TLS) / 465 (SSL)
SMTP_USERSTRING選填SMTP 帳號您的 email
SMTP_PASSPASSWORD選填SMTP 密碼Gmail 需使用應用程式密碼
SMTP_ADMIN_EMAILSTRING選填管理員 email接收通知用
SMTP_SENDER_NAMESTRING選填寄件者名稱例: Supabase

2.1 產生密鑰

在本機終端執行以下指令產生密鑰:

# 1. PostgreSQL 密碼 (任意強密碼)
openssl rand -base64 32

# 2. JWT Secret (恰好 32 字元,英數字)
# ⚠️ 不要超過 40 字元,否則可能導致 Realtime health check 失敗
openssl rand -base64 32 | tr -dc 'A-Za-z0-9' | head -c32

# 3. Secret Key Base (至少 64 字元)
openssl rand -base64 64

# 4. 加密金鑰 (恰好 32 字元,英數字,用於 VAULT_ENC_KEY 和 PG_META_CRYPTO_KEY)
openssl rand -base64 48 | tr -dc 'A-Za-z0-9' | head -c32

# 5. Pooler Tenant ID (UUID 格式)
python3 -c "import uuid; print(str(uuid.uuid4()))"

2.2 產生 JWT Keys

使用 Supabase JWT Generator

  1. 輸入您的 JWT_SECRET (步驟 2.1 產生的 32 字元密鑰)
  2. 分別產生 anonservice_role 金鑰
  3. 複製產生的 JWT (將在步驟 2.3 使用)

2.3 更新 Kong 服務環境變數

前往 Zeabur Dashboard → 選擇 Kong 服務環境變數 → 更新以下變數:

# 資料庫
POSTGRES_PASSWORD=[步驟 2.1 產生的 PostgreSQL 密碼]

# JWT 認證
JWT_SECRET=[步驟 2.1 產生的 32 字元密鑰]
ANON_KEY=[步驟 2.2 產生的 anon JWT]
SERVICE_ROLE_KEY=[步驟 2.2 產生的 service_role JWT]

# Realtime
SECRET_KEY_BASE=[步驟 2.1 產生的 64 字元密鑰]

# 資料庫加密
VAULT_ENC_KEY=[步驟 2.1 產生的 32 字元加密金鑰]
PG_META_CRYPTO_KEY=[步驟 2.1 產生的 32 字元加密金鑰 (可與 VAULT_ENC_KEY 相同)]

# 連接池
POOLER_TENANT_ID=[步驟 2.1 產生的 UUID]

# SMTP (選填,如不需要 email 功能可不填)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your-email@gmail.com
SMTP_PASS=your-app-password
SMTP_ADMIN_EMAIL=admin@your-domain.com
SMTP_SENDER_NAME=Supabase

2.4 重啟服務

更新環境變數後,重啟 Kong 服務以套用新配置。

步驟 3: 首次登入

  1. 訪問 Kong 服務的公開網域 (或您綁定的 PUBLIC_DOMAIN)
  2. 使用 DASHBOARD_USERNAMEDASHBOARD_PASSWORD 登入 Supabase Studio
  3. 開始建立您的資料庫 schema 和 API

📊 服務說明

此模板包含 12 個服務:

  • PostgreSQL - 核心資料庫
  • Kong - API Gateway (統一入口,需配置環境變數)
  • Studio - Web 管理介面
  • GoTrue - 使用者認證服務
  • PostgREST - 自動 REST API
  • Realtime - WebSocket 即時訂閱
  • Storage - 檔案儲存服務
  • Functions - Serverless 函數執行環境
  • Meta - 資料庫管理工具
  • Supavisor - 連接池管理
  • MinIO - S3 相容儲存後端
  • ImgProxy - 圖片處理服務

🔒 安全性注意事項

⚠️ 重要

  1. 切勿在生產環境使用 demo 密鑰 - 部署後務必完成「步驟 2: 安全配置」
  2. JWT Keys 格式正確 - 必須使用 Supabase JWT Generator 產生
  3. 密鑰長度要求嚴格
    • JWT_SECRET: 32 字元 (不超過 40)
    • SECRET_KEY_BASE: 至少 64 字元
    • VAULT_ENC_KEY: 恰好 32 字元 (純英數字)
    • PG_META_CRYPTO_KEY: 恰好 32 字元 (純英數字)
  4. 妥善保管密鑰 - 不要分享或提交到版本控制

🔧 資料庫連接

完成安全配置後,您可以使用以下方式連接資料庫:

Pooled Connection (推薦)

postgres://postgres:[POSTGRES_PASSWORD]@[POOLER_HOST]:6543/postgres

Direct Connection

postgres://postgres:[POSTGRES_PASSWORD]@[POSTGRES_HOST]:5432/postgres

📚 相關資源

❓ 故障排除

服務啟動失敗

  1. 確認已完成「步驟 2: 安全配置」
  2. 檢查密鑰長度是否正確
  3. 確認 JWT_SECRET 和 JWT Keys 一致
  4. 查看服務日誌找出錯誤訊息

無法登入 Studio

  1. 確認 DASHBOARD_USERNAME 和 DASHBOARD_PASSWORD 正確
  2. 確認已更新 Kong 服務環境變數
  3. 重啟 Kong 服務

API 無法訪問

  1. 確認 Kong 服務的 ANON_KEY 和 SERVICE_ROLE_KEY 已更新
  2. 檢查 JWT_SECRET 是否與 JWT Generator 中使用的一致
  3. 使用瀏覽器開發者工具檢查 API 回應錯誤訊息

需要協助? 請造訪 Supabase Discord 社群