--- tags: - backend - baas - supabase - pocketbase - appwrite - firebase aliases: - BaaS 比較 - 後端即服務選擇 created: 2024-12-22 updated: 2024-12-22 --- # Supabase 替代品完整指南:5 個值得考慮的開源後端方案 ![baas-comparison-cover](https://hackmd.io/_uploads/HkOETcvmWl.jpg) ## 當 Supabase 不是唯一選擇 Supabase 確實很棒。PostgreSQL 的強大、即時訂閱的便利、還有那個漂亮的管理介面,讓它成為很多開發者的首選。但實際使用一段時間後,你可能會遇到一些問題: - 免費額度用完後,費用跳升明顯 - 專案閒置會被暫停(雖然可以理解,但還是麻煩) - 自託管的文件不夠完整,設定起來比想像中複雜 - 某些地區的連線延遲讓即時功能打了折扣 這不是說 Supabase 不好,而是不同專案有不同需求。有時候你需要的是更輕量的方案,有時候是完全的資料掌控權,有時候單純是預算考量。 這篇文章整理了目前主流的替代方案,包含各自的優缺點和適用場景,幫你在下一個專案做出更適合的選擇。 --- ## 快速比較表 在深入介紹之前,先看整體比較: | 平台 | 開源 | 自託管難度 | 資料庫類型 | 最適合場景 | |------|------|-----------|-----------|-----------| | **Supabase** | ✅ | 中高 | PostgreSQL | 需要複雜 SQL 查詢的中大型專案 | | **PocketBase** | ✅ | 極低 | SQLite | 個人專案、快速原型 | | **Appwrite** | ✅ | 低 | MariaDB | 團隊協作、完整功能需求 | | **Firebase** | ❌ | N/A | NoSQL | Google 生態整合、成熟企業專案 | | **Nhost** | ✅ | 中 | PostgreSQL + Hasura | GraphQL 優先的專案 | --- ## 1. PocketBase:單檔案的極簡後端 ### 定位 一個 Go 語言編寫的後端服務,打包成單一執行檔。下載、執行、完成。 ### 核心優勢 **部署極簡**:整個後端就是一個檔案,不需要 Docker、不需要資料庫安裝、不需要任何依賴。放到任何 Linux 主機上就能跑。 **永久免費**:沒有額度限制,因為你自己託管。伺服器成本就是你唯一的成本。 **內建完整功能**: - SQLite 資料庫(支援即時訂閱) - 使用者認證(包含 OAuth2) - 檔案儲存 - Admin 管理介面 - REST API 自動生成 **可擴充性**:可以用 JavaScript Hooks 或直接用 Go 擴充功能。 ### 主要限制 - SQLite 的並發處理能力有限,不適合高流量場景 - 沒有原生的 Serverless Functions - 社群相對較小,遇到問題可能找不到現成解法 - 不支援水平擴展(單機限制) ### 適用場景 ``` ✅ 個人部落格後端 ✅ 小型 SaaS 的 MVP ✅ 內部工具 ✅ 學習後端開發 ✅ 需要完全掌控資料的專案 ❌ 高併發應用 ❌ 需要複雜查詢的資料分析 ❌ 多區域部署需求 ``` ### 快速體驗 ```bash # 下載 wget https://github.com/pocketbase/pocketbase/releases/download/v0.28.4/pocketbase_0.28.4_linux_amd64.zip unzip pocketbase_*.zip # 啟動 ./pocketbase serve # 開啟 http://127.0.0.1:8090/_/ 設定管理員帳號 ``` --- ## 2. Appwrite:功能完整的開源 BaaS ### 定位 功能最接近 Firebase 的開源替代品,提供完整的後端服務套件。 ### 核心優勢 **功能完整度高**: - 資料庫(類 NoSQL 操作,底層是 MariaDB) - 認證(支援 30+ OAuth 提供者) - 儲存(含圖片處理) - Functions(支援多種語言) - 即時訂閱 - 推播通知 **開發體驗**:SDK 覆蓋全面,文件清楚,Console 介面直觀。 **自託管友好**:Docker Compose 一鍵部署,文件完整。 **活躍的社群**:Discord 社群活躍,核心團隊回應快。 ### 主要限制 - 資源佔用較大(Docker 容器多) - 查詢能力不如原生 SQL 靈活 - 部分進階功能仍在開發中 - 雲端版本的定價不算便宜 ### 適用場景 ``` ✅ 需要完整 BaaS 功能的專案 ✅ 團隊協作開發 ✅ 從 Firebase 遷移 ✅ 需要 Serverless Functions ❌ 需要複雜 SQL 查詢 ❌ 資源有限的伺服器 ❌ 極簡需求的小專案 ``` ### 快速體驗 ```bash # Docker 部署 docker run -it --rm \ --volume /var/run/docker.sock:/var/run/docker.sock \ --volume "$(pwd)"/appwrite:/usr/src/code/appwrite:rw \ --entrypoint="install" \ appwrite/appwrite:1.5.7 # 完成後開啟 http://localhost/ ``` --- ## 3. Firebase:成熟穩定的商業方案 ### 定位 Google 的 BaaS 服務,市場上最成熟的解決方案之一。 ### 核心優勢 **成熟穩定**:經過多年發展,功能穩定,文件完整,社群資源豐富。 **Google 生態整合**:與 Google Cloud、Google Analytics、Google Ads 無縫整合。 **全球基礎設施**:多區域部署,低延遲。 **完整功能**: - Firestore(NoSQL 資料庫) - Authentication - Cloud Storage - Cloud Functions - Hosting - Cloud Messaging ### 主要限制 - **非開源**:無法自託管,資料在 Google 手中 - **廠商鎖定**:資料結構和 API 都是專有的,遷移成本高 - **成本不可預測**:流量計費模式可能導致帳單爆炸 - **NoSQL 限制**:複雜查詢需要繞路處理 ### 適用場景 ``` ✅ 企業專案,預算充足 ✅ 需要 Google 生態整合 ✅ 團隊熟悉 Firebase ✅ 全球用戶分佈 ❌ 需要資料自主權 ❌ 預算敏感的專案 ❌ 需要複雜關聯查詢 ``` ### 定價提醒 Firebase 的免費額度看起來很慷慨,但要注意: - Firestore 讀取按次計費,高頻讀取很快超標 - Cloud Functions 的冷啟動時間影響用戶體驗 - 超出免費額度後的單價不低 --- ## 4. Nhost:GraphQL 優先的 Hasura 整合方案 ### 定位 在 Hasura GraphQL Engine 之上包裝認證、儲存、Serverless Functions 的完整方案。 ### 核心優勢 **GraphQL 原生**:Hasura 自動根據資料庫 schema 生成 GraphQL API,包含訂閱功能。 **PostgreSQL**:享受完整的 SQL 能力,複雜查詢沒問題。 **開源**:可以自託管,資料完全掌控。 **完整功能**: - 認證(含 OAuth2、Magic Link) - 儲存 - Serverless Functions - 即時訂閱 ### 主要限制 - Hasura 有學習曲線 - 自託管的元件較多,維護複雜度高 - 社群規模相對較小 - 雲端版本定價不算親民 ### 適用場景 ``` ✅ 團隊熟悉 GraphQL ✅ 需要複雜關聯查詢 ✅ 前端使用 Apollo、urql 等 GraphQL 客戶端 ✅ 需要即時資料同步 ❌ 團隊不熟悉 GraphQL ❌ 簡單 CRUD 需求(殺雞用牛刀) ❌ 資源有限的環境 ``` --- ## 5. 其他值得關注的選項 ### Directus **定位**:Headless CMS,但可作為通用後端使用。 **適合**:內容管理為主的專案、需要非技術人員操作後台的場景。 **特點**: - 視覺化的資料庫管理 - 自動生成 REST 和 GraphQL API - 角色權限管理完整 - 可連接現有資料庫 ### Convex **定位**:新一代的反應式後端,強調開發體驗。 **適合**:需要即時功能、願意嘗試新技術的團隊。 **特點**: - TypeScript 原生 - 自動快取和即時同步 - Serverless 架構 - 目前只有雲端版本 ### Turso(LibSQL) **定位**:SQLite 的分散式版本。 **適合**:需要 SQLite 的簡單性,但又要多區域部署的場景。 **特點**: - 邊緣部署 - SQLite 相容 - 低延遲 --- ## 如何選擇? 根據你的需求,可以用這個決策流程: ```mermaid flowchart TD A[需要後端服務] --> B{資料主權重要嗎?} B -->|非常重要| C{團隊規模?} B -->|可接受雲端| D{預算充足嗎?} C -->|個人/小團隊| E[PocketBase] C -->|中大型團隊| F{需要 GraphQL?} F -->|是| G[Nhost] F -->|否| H[Appwrite] D -->|是| I{已在 Google 生態?} D -->|預算敏感| J[Supabase / Appwrite 雲端] I -->|是| K[Firebase] I -->|否| L[Supabase] ``` ### 簡單版建議 | 你的情況 | 推薦選擇 | |---------|---------| | 個人專案,想快速上線 | PocketBase | | 小團隊,需要完整功能 | Appwrite 或 Supabase | | 企業專案,預算充足 | Firebase 或 Supabase Pro | | 前端團隊,熟悉 GraphQL | Nhost | | 需要複雜 SQL 查詢 | Supabase 或 Nhost | | 內容管理為主 | Directus | --- ## 遷移考量 如果你正在考慮從某個平台遷移,這裡是一些重點: ### 從 Firebase 遷移 - Firestore 的資料結構需要重新設計(NoSQL → SQL) - Authentication 的 UID 需要處理 - Cloud Functions 需要重寫 - 建議:先在新平台建立 MVP,確認可行後再完整遷移 ### 從 Supabase 遷移 - PostgreSQL 資料可以直接 dump/restore - RLS(Row Level Security)規則需要用新平台的方式重寫 - 即時訂閱的實作方式可能不同 ### 通用建議 1. 先評估資料量和複雜度 2. 建立詳細的遷移計畫 3. 考慮過渡期的雙寫策略 4. 預留足夠的測試時間 --- ## 結語 沒有完美的後端方案,只有最適合當前需求的選擇。 Supabase 依然是很棒的選項,特別是需要 PostgreSQL 強大查詢能力的場景。但了解替代品能讓你在不同專案中做出更好的決策。 如果你是個人開發者,想要最快上手、最低維護成本的方案,PocketBase 值得一試。如果你需要完整的 BaaS 功能又想保持開源,Appwrite 是穩健的選擇。 下一篇文章會深入介紹 PocketBase 的實際操作,從安裝到部署一個完整的應用。如果你對這個輕量級方案有興趣,可以繼續閱讀 [[Blog-PocketBase入門到實作完整教學]]。 --- ## 參考資源 - [PocketBase 官方網站](https://pocketbase.io/) - [Appwrite 官方文件](https://appwrite.io/docs) - [Supabase vs Appwrite 比較](https://appwrite.io/blog/post/appwrite-compared-to-supabase) - [開源 BaaS 列表](https://github.com/PARC6502/awesome-baas)