背景
我在国内有一台后端服务器,想用海外免费的云服务(Cloudflare、Supabase、Vercel 等)来降低成本并规避自建数据库的风险。必要时走代理,整体做到接近零成本。
本文分析这套方案的可行性,并给出最优架构。
结论先行
完全可行。 核心思路是:国内服务器做桥接层,所有海外服务在服务端调用(不受 GFW 影响),静态资源通过国内服务器反代加速。数据库用托管服务替代自建,消除运维风险。
一、各个服务的网络可达性
这是最关键的问题。直接测一遍:
| 服务 | 从国内服务器访问 | 从国内浏览器访问 | 说明 |
|---|---|---|---|
| Supabase (API/DB) | ✅ 可达 | ⚠️ 较慢 | REST API/PostgreSQL 直连,延迟约 100-200ms |
| Cloudflare R2 | ✅ 可达 | ⚠️ 较慢 | S3 兼容 API,服务端调用无问题 |
| Cloudflare Workers | ✅ 可达 | ⚠️ 较慢 | 服务端 HTTP 调用完全正常 |
| Cloudflare Pages | ✅ 可达 | ⚠️ 较慢 | 同上 |
| Resend | ✅ 可达 | ✅ 正常 | 邮件 API,调用链路短 |
| Vercel | ✅ 可达 | ❌ 被墙 | 需国内服务器反代 |
| Netlify | ✅ 可达 | ❌ 被墙 | 同上 |
| Auth0 / Clerk | ✅ 可达 | ⚠️ 较慢 | API 调用正常,前端 SDK 体验一般 |
| Sentry | ✅ 可达 | ⚠️ 较慢 | 后端上报没问题 |
| GitHub | ⚠️ 不稳定 | ⚠️ 不稳定 | DNS 污染,建议 hosts 或代理 |
| Google Colab | ❌ 被墙 | ❌ 被墙 | 需要全局代理 |
规律:
- 服务端(你的服务器 → 海外 API):几乎全部可达,无需代理
- 浏览器端(用户浏览器 → 海外服务):部分被墙或极慢
这意味着:服务端可以直接调用所有海外 API,不需要额外代理。
二、架构方案
┌──────────────────────────┐
│ 国内用户浏览器 │
└─────────┬────────────────┘
│
▼
┌──────────────────────────────┐
│ 国内服务器(你的) │
│ │
│ nginx/caddy 反向代理 │
│ API 聚合层 │
│ 静态资源缓存 │
└────┬──────┬────────┬─────────┘
│ │ │
┌──────────┘ │ └──────────┐
▼ ▼ ▼
┌─────────────────┐ ┌──────────────┐ ┌──────────────────┐
│ Vercel/Pages │ │ Supabase │ │ Cloudflare R2 │
│ (前端/静态) │ │ (数据库) │ │ (文件存储) │
└─────────────────┘ └──────────────┘ └──────────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌──────────────┐ ┌──────────────────┐
│ Workers │ │ Resend │ │ Sentry │
│ (定时/边缘逻辑) │ │ (邮件) │ │ (错误监控) │
└─────────────────┘ └──────────────┘ └──────────────────┘
核心原则
- 前端托管在 Vercel / Cloudflare Pages — 免费、自动 CDN
- 国内服务器只做反向代理和 API 聚合 — 国内用户浏览器访问国内服务器,国内服务器转发到海外服务
- 数据库用 Supabase — 不再自建 MySQL/PostgreSQL,消除数据丢失风险
- 服务端直连海外 API — 从国内服务器到海外服务不需要代理
三、详细选型
3.1 前端托管
| 方案 | 优势 | 劣势 |
|---|---|---|
| 国内服务器直接托管 | 延迟最低 | 浪费服务器性能,没有 CDN |
| Vercel + 国内服务器反代 | 全球 CDN + 国内加速 | 多一层转发 |
| Cloudflare Pages + Workers 反代 | 统一生态 | 免费计划国内节点有限 |
推荐:Vercel(前端)+ 国内服务器(反代)
国内用户 → 国内服务器 nginx → Vercel。海外用户直连 Vercel CDN。
3.2 数据库
| 方案 | 月费 | 风险 |
|---|---|---|
| 自建 MySQL/PostgreSQL | 0 元(用服务器资源) | 磁盘故障、数据丢失、需手动备份 |
| Supabase 免费版 | 0 元 | 500MB 上限,自动备份 |
| Neon 免费版 | 0 元 | 0.5GB 上限,Serverless |
| Turso 免费版 | 0 元 | 500MB,边缘 SQLite |
推荐:Supabase
- 托管 PostgreSQL,自动备份 + 点时间恢复
- 500MB 对个人博客/小项目完全够用
- REST API + JS SDK 开箱即用
- 自带 Auth,省一个服务
3.3 对象存储
| 方案 | 免费额度 | 出站费 |
|---|---|---|
| Cloudflare R2 | 10GB | 0 元(无出站费) |
| AWS S3 | 5GB | 有 |
| 阿里云 OSS | 5GB | 有 |
推荐:Cloudflare R2
唯一天花板级的免费策略:不收出站带宽费。图片/文件通过国内服务器转发给用户。
3.4 其他服务
| 需求 | 选型 | 费用 |
|---|---|---|
| 邮件发送 | Resend | 100 封/天,免费 |
| 错误监控 | Sentry | 5000 事件/月,免费 |
| 定时任务 | Workers Cron | 10 万请求/天,免费 |
| AI 推理 | Workers AI / 通义千问 | 免费 / 按量计费 |
| 数据分析 | Plausible 自建 | 免费 |
四、成本核算
假设一个日活 1000 的个人项目:
| 项目 | 费用 |
|---|---|
| 国内 ECS(2C4G,已有) | 0 元(沉没成本) |
| Supabase 免费版 | 0 元 |
| Vercel 免费版 | 0 元 |
| Cloudflare R2 免费版 | 0 元 |
| Resend 免费版 | 0 元 |
| Workers 免费版 | 0 元 |
| Sentry 免费版 | 0 元 |
| 合计 | 0 元 / 月 |
五、数据库风险控制
自建数据库的主要风险:
| 风险 | Supabase 如何解决 |
|---|---|
| 磁盘故障 | 自动跨可用区冗余 |
| 数据误删 | 点时间恢复(PITR) |
| 安全漏洞 | 自动打补丁 |
| 性能瓶颈 | 自动扩展 |
| 备份丢失 | 每日自动备份 |
| DDoS 攻击 | 内置防护 |
| SSL 证书 | 自动管理 |
对比自建: 以上每一项你都得自己操心。对于个人项目来说,花时间维护数据库不值得。
六、代理方案
从国内服务器到海外服务通常不需要代理,但如果遇到个别服务被墙(如某些 API 端点),可以:
# 在服务器上配正向代理
server {
listen 1080;
resolver 8.8.8.8;
proxy_pass $scheme://$host$request_uri;
}
或者更简单的方式:用 Cloudflare Workers 做中转代理。
七、实际部署拓扑
用户访问
│
├─ 国内用户 → myblog.com (DNS 解析到国内服务器 IP)
│ │
│ ├─ /static/* → 本地 nginx 直接返回
│ ├─ /api/* → 本地 API 聚合层
│ │ ├─ Supabase (数据库)
│ │ ├─ Workers (逻辑)
│ │ └─ Resend (邮件)
│ └─ /* → 反向代理到 Vercel
│
└─ 海外用户 → myblog.com (DNS 解析到 Vercel CDN)
│
└─ Vercel Edge Network
八、总结
| 维度 | 结论 |
|---|---|
| 可行性 | ✅ 完全可行 |
| 成本 | 0 元/月(假设已有国内服务器) |
| 数据库风险 | 几乎为零(托管服务替代自建) |
| 访问速度 | 国内用户通过国内服务器转发,延迟可控 |
| 维护工作量 | 极低,所有服务都有免费 SLA |
| 扩展性 | 好,Supabase 可随时升级付费版 |
这套方案唯一的硬成本是你的国内服务器。如果连服务器都不想维护,可以全部走 Cloudflare Workers + Pages + R2 + Supabase 的全栈海外方案——但国内用户访问速度会下降。
有舍有得,这套混合架构是当前成本、速度、风险三者最优解。