不要把 macOS 當 production host
Mac mini M4 可以跑這套架構,但服務層應該放在 Ubuntu VM 裡。macOS 保留作為硬體宿主與開發環境,不直接承擔 production Docker workload。
對外入口
第一階段用 Cloudflare Tunnel。它不需要開 80/443 inbound,也不需要固定 IP,適合家用或工作室網路。
內網治理
pfSense 負責 VLAN、防火牆、固定 IP、server-to-LAN 限制,不一定要做 public reverse proxy。
Next.js
使用 standalone Docker output,透過 Coolify 從 GitHub 自動 build / deploy。
Supabase
自架後你要自己負責 Postgres、備份、還原、升級、監控與安全設定。
推薦架構
把 public edge、app runtime、database、admin surface 分層。不要把所有東西直接暴露在 WAN。
app.domain.com
Next.js app。這是唯一真正面向使用者的前端入口。
api.domain.com
Supabase API / Kong。前端只使用 publishable key,不使用 service_role。
studio / coolify
Supabase Studio 與 Coolify Admin 應加 Cloudflare Access、VPN 或 IP allowlist。
Mac mini M4 資源配置
M4 性能不是主要問題。真正的限制是 RAM、SSD、備份、網路穩定性、斷電處理。
| 項目 | 最低可跑 | 建議配置 | 判斷 |
|---|---|---|---|
| RAM | 16GB | 24GB / 32GB+ | 16GB 可跑,但 Supabase + Coolify + build 會緊。 |
| VM CPU | 2 cores | 4–6 cores | Next.js build 與 Supabase container 會吃 CPU。 |
| VM RAM | 8GB | 12–20GB | Supabase 自架不適合極限壓 RAM。 |
| Disk | 80GB | 150–300GB SSD | Postgres、Storage、Docker images、backup 都會成長。 |
| OS | Ubuntu ARM64 | Ubuntu 24.04 LTS ARM64 | Coolify 應跑在 Linux VM,不建議直接用 macOS Docker Desktop。 |
pfSense vs Cloudflare Tunnel
不是二選一。最實際是 Cloudflare Tunnel 對外,pfSense 管內網。
Cloudflare Tunnel
適合沒有固定 IP、CGNAT、想快速上線、想避免開 inbound port 的情境。
- 不需要公開 80/443 inbound
- Origin IP 不直接暴露
- 可用 Cloudflare Access 保護管理介面
- 適合小型 SaaS、demo、內部工具、AI app prototype
- 依賴 Cloudflare 帳號、Tunnel、DNS 與 Access 設定
- Debug 會多一層代理路徑
pfSense Reverse Proxy
適合你有固定 public IP,且願意自己維護 HAProxy、ACME、NAT、Firewall rules。
- 入口流量完全由你控制
- 可整合 VLAN、內網分區、防火牆策略
- 不依賴 Cloudflare Tunnel
- 適合更長期、可控的 network edge
- 需要開 inbound port
- 需要自行處理 WAF、rate limit、掃描、防護
Domain 規劃
每個面向用獨立 hostname,權限與防護才清楚。
| Hostname | 用途 | 公開程度 | 防護 |
|---|---|---|---|
| app.domain.com | Next.js Web App | 公開 | Cloudflare WAF / cache rules / rate limits |
| api.domain.com | Supabase API / Kong | 公開但受控 | RLS、JWT、CORS、API rules |
| studio.domain.com | Supabase Studio | 不公開 | Cloudflare Access / VPN / IP allowlist |
| coolify.domain.com | Coolify Admin | 不公開 | Cloudflare Access / VPN / IP allowlist |
Claude Code 工作流
Claude Code 放在開發端,不直接碰 production server。所有變更透過 Git、PR、commit、Coolify deploy。
本機開發
Claude Code 修改 Next.js、SQL migration、Dockerfile、README、CLAUDE.md。
Git Review
所有變更 commit 到 GitHub。schema change 必須以 SQL migration 呈現。
Coolify Deploy
Coolify 從 GitHub build / deploy Next.js container,不讓 AI 直接 SSH 改 production。
Supabase 自架注意事項
自架 Supabase 的代價不是安裝,而是維運。尤其是 Postgres、backup、restore、RLS。
Production 基本要求
- 所有 table 啟用 RLS
- service_role 僅 server-side 使用
- 自訂 SMTP
- Auth redirect URL 正確設定
- 每日備份,且離機保存
- 還原流程要實測
不能公開的東西
- Postgres 5432
- Supabase Studio
- Coolify Admin
- service_role key
- .env.example 預設密碼
- Docker socket
最小可行部署 Checklist
照這個順序做,先跑穩,再擴充。
最終建議
這是目前最適合你的成本、風險、維護負擔平衡點。