指南

M4 Mac mini · Coolify · Supabase · Next.js

Mac mini M4 自架 App Server 架構指南

Mac mini M4 自架 Coolify、Next.js、Claude Code、自架 Supabase,並比較 pfSense 反向代理與 Cloudflare Tunnel 的部署決策指南。

用 Mac mini 跑 Coolify、部署 Next.js、搭配 Claude Code 開發,並自架 Supabase。核心決策是:用 Linux VM 承載服務,用 Cloudflare Tunnel 對外,用 pfSense 管內網安全。

閱讀時間
6 分
更新日期
開啟原始報告

01章節Recommended

不要把 macOS 當 production host

終端機
$ architecture --target production-lite

✓ Mac mini M4
  └─ Ubuntu 24.04 LTS ARM64 VM
      ├─ Docker Engine
      ├─ Coolify
      ├─ Next.js standalone container
      ├─ Supabase self-host stack
      └─ cloudflared tunnel

! Do not expose:
  - Postgres 5432
  - Supabase Studio
  - Coolify admin
  - service_role key

✓ Recommended edge:
  Cloudflare Tunnel + Access
  pfSense for VLAN / firewall

Mac mini M4 可以跑這套架構,但服務層應該放在 Ubuntu VM 裡。macOS 保留作為硬體宿主與開發環境,不直接承擔 production Docker workload。

text
Mac mini M4
└── Ubuntu 24.04 LTS ARM64 VM
    ├── Docker Engine
    ├── Coolify
    ├── Next.js app
    ├── Supabase self-host
    └── cloudflared / reverse proxy

Core Decision

對外入口

第一階段用 Cloudflare Tunnel。它不需要開 80/443 inbound,也不需要固定 IP,適合家用或工作室網路。

Security

內網治理

pfSense 負責 VLAN、防火牆、固定 IP、server-to-LAN 限制,不一定要做 public reverse proxy。

Runtime

Next.js

使用 standalone Docker output,透過 Coolify 從 GitHub 自動 build / deploy。

Database

Supabase

自架後你要自己負責 Postgres、備份、還原、升級、監控與安全設定。

02章節

推薦架構

把 public edge、app runtime、database、admin surface 分層。不要把所有東西直接暴露在 WAN。

  1. Cloudflare

    DNS · WAF · Access · Tunnel

  2. cloudflared

    Outbound-only connection from Ubuntu VM

  3. Coolify Proxy

    Route app / API / admin services

  4. Next.js

    Standalone production container

  5. Supabase

    Kong · Auth · Storage · Postgres

Public

app.domain.com

Next.js app。這是唯一真正面向使用者的前端入口。

API

api.domain.com

Supabase API / Kong。前端只使用 publishable key,不使用 service_role。

Protected

studio / coolify

Supabase Studio 與 Coolify Admin 應加 Cloudflare Access、VPN 或 IP allowlist。

03章節

Mac mini M4 資源配置

M4 性能不是主要問題。真正的限制是 RAM、SSD、備份、網路穩定性、斷電處理。

項目最低可跑建議配置判斷
RAM16GB24GB / 32GB+16GB 可跑,但 Supabase + Coolify + build 會緊。
VM CPU2 cores4–6 coresNext.js build 與 Supabase container 會吃 CPU。
VM RAM8GB12–20GBSupabase 自架不適合極限壓 RAM。
Disk80GB150–300GB SSDPostgres、Storage、Docker images、backup 都會成長。
OSUbuntu ARM64Ubuntu 24.04 LTS ARM64Coolify 應跑在 Linux VM,不建議直接用 macOS Docker Desktop。

04章節

pfSense vs Cloudflare Tunnel

不是二選一。最實際是 Cloudflare Tunnel 對外,pfSense 管內網。

Cloudflare Tunnel

Best for first stage

適合沒有固定 IP、CGNAT、想快速上線、想避免開 inbound port 的情境。

  • 不需要公開 80/443 inbound

  • Origin IP 不直接暴露

  • 可用 Cloudflare Access 保護管理介面

  • 適合小型 SaaS、demo、內部工具、AI app prototype

pfSense Reverse Proxy

For controlled edge

適合你有固定 public IP,且願意自己維護 HAProxy、ACME、NAT、Firewall rules。

  • 入口流量完全由你控制

  • 可整合 VLAN、內網分區、防火牆策略

  • 不依賴 Cloudflare Tunnel

  • 適合更長期、可控的 network edge

05章節

Domain 規劃

每個面向用獨立 hostname,權限與防護才清楚。

Hostname用途公開程度防護
app.domain.comNext.js Web App公開Cloudflare WAF / cache rules / rate limits
api.domain.comSupabase API / Kong公開但受控RLS、JWT、CORS、API rules
studio.domain.comSupabase Studio不公開Cloudflare Access / VPN / IP allowlist
coolify.domain.comCoolify Admin不公開Cloudflare Access / VPN / IP allowlist

06章節

Claude Code 工作流

Claude Code 放在開發端,不直接碰 production server。所有變更透過 Git、PR、commit、Coolify deploy。

  1. 本機開發

    Claude Code 修改 Next.js、SQL migration、Dockerfile、README、CLAUDE.md。

  2. Git Review

    所有變更 commit 到 GitHub。schema change 必須以 SQL migration 呈現。

  3. Coolify Deploy

    Coolify 從 GitHub build / deploy Next.js container,不讓 AI 直接 SSH 改 production。

markdown
# CLAUDE.md 建議規則
- Framework: Next.js App Router + TypeScript
- Styling: Tailwind CSS
- Backend: Self-hosted Supabase
- Do not expose service_role key to client code
- Use server actions or route handlers for privileged operations
- All schema changes must be written as SQL migrations
- Do not modify production secrets
- Do not run destructive database commands without explicit review

07章節

Supabase 自架注意事項

自架 Supabase 的代價不是安裝,而是維運。尤其是 Postgres、backup、restore、RLS。

Production 基本要求

Must have

  • 所有 table 啟用 RLS

  • service_role 僅 server-side 使用

  • 自訂 SMTP

  • Auth redirect URL 正確設定

  • 每日備份,且離機保存

  • 還原流程要實測

08章節

最小可行部署 Checklist

照這個順序做,先跑穩,再擴充。

  • 未完成:

    Mac mini 安裝 Ubuntu ARM64 VM:VM 固定 CPU、RAM、Disk,不把 production service 直接跑在 macOS。

  • 未完成:

    VM 固定 LAN IP:用 pfSense DHCP static lease 或直接固定 IP。

  • 未完成:

    安裝 Docker Engine + Compose:不要用 snap 版 Docker。

  • 未完成:

    安裝 Coolify:用來部署 Next.js app 與管理服務容器。

  • 未完成:

    建立 Cloudflare Tunnel:將 app、api、studio、coolify 對應到不同 hostname。

  • 未完成:

    部署 Supabase self-host stack:修改所有 secrets、JWT、dashboard password、Postgres password。

  • 未完成:

    部署 Next.js app:使用 standalone output 與 Dockerfile,透過 Coolify 從 GitHub 部署。

  • 未完成:

    保護管理介面:studio.domain.com 與 coolify.domain.com 加 Cloudflare Access / VPN / allowlist。

  • 未完成:

    設定備份與還原演練:Postgres backup 不只要產生檔案,還要確認能 restore。

  • 未完成:

    加監控:監控 uptime、disk、memory、container restart、backup status。

09章節

最終建議

這是目前最適合你的成本、風險、維護負擔平衡點。

Cloudflare Tunnel 對外,pfSense 管內網,Coolify 管部署,Supabase 獨立維運。

text
Cloudflare
├── app.domain.com       → Tunnel → Coolify → Next.js
├── api.domain.com       → Tunnel → Supabase Kong/API
├── studio.domain.com    → Cloudflare Access → Supabase Studio
└── coolify.domain.com   → Cloudflare Access → Coolify

pfSense
├── Server VLAN
├── Admin device allowlist
├── Block inbound WAN
├── Allow outbound cloudflared
└── Restrict server-to-LAN traffic

Mac mini M4
└── Ubuntu VM
    ├── Coolify
    ├── Next.js container
    ├── Supabase compose stack
    ├── backup script
    └── monitoring

Static HTML architecture guide · Mac mini M4 self-host stack · Generated for direct local use.