从上个月开始,我正式启动了自己的出海工具站项目,到现在已经一个月了。
这段时间,除了开发产品,我也踩了一些基础设施方面的坑。对于独立开发者来说,如何用尽可能低的成本部署网站、选择合适的 Serverless 平台,以及避免突然出现的高额账单,都是值得提前考虑的问题。
这篇文章结合我自己的技术选型和一些实际观察,聊聊 VPS 与 Serverless 的区别、Vercel 和 Cloudflare 的选择,以及独立开发者可以免费使用的一些基础设施。
一、VPS vs Serverless:个人项目应该怎么选?
说到部署项目,很多开发者可能会想到购买服务器、安装宝塔、配置 Nginx、管理进程等一系列操作。
这是一种成熟且灵活的部署方式,也就是使用 VPS 自己管理服务器。不过,对于刚起步的独立项目来说,这种方案需要投入一定的时间和精力来维护基础设施。
如果项目还处于验证阶段,访问量不大,也没有复杂的后台任务,那么可以优先考虑 Vercel、Cloudflare Workers 这类 Serverless 平台。
先来看看两种方案的主要区别。
| 维度 | VPS | Serverless |
|---|---|---|
| 运维负担 | 自己安装环境、配置 Nginx、管理进程和安全补丁 | 平台托管大部分基础设施,开发者主要关注代码 |
| 扩容方式 | 手动升级配置、增加机器或配置负载均衡 | 根据平台能力自动扩缩容,通常无需自行管理服务器 |
| 计费方式 | 通常按月或按年付费,闲置时也会产生费用 | 根据请求量、计算资源和其他资源用量计费,低流量时成本可能很低 |
| 冷启动 | 常驻进程通常没有冷启动问题 | 部分运行环境可能存在冷启动,具体取决于平台和运行时 |
| 状态与磁盘 | 可以自行管理本地文件、数据库、Redis 等 | 通常需要使用对象存储、KV 或外部数据库保存持久化数据 |
| 运行时长 | 适合常驻进程和长时间运行的任务,具体取决于服务器配置 | 通常存在执行时长或 CPU 时间限制,需要关注具体平台的规则 |
| 语言与运行时 | 自由度较高,可以自行安装所需环境和依赖 | 需要遵循平台支持的运行时、API 和部署规范 |
| 网络能力 | 可根据需求配置固定 IP、SSH、数据库连接等 | 网络能力受平台限制,固定出口 IP 等功能可能需要额外配置或付费 |
| 成本变化 | 低流量时需要承担固定成本,流量较大时可能更划算 | 低流量时成本较低,但请求量、计算量或带宽增长后,费用也可能增加 |
对于刚起步的独立开发者,我更倾向于先使用 Serverless。
原因很简单:开发时间本身就是成本。与其一开始就花时间维护服务器,不如先把产品做出来,验证需求,等到业务规模和运行需求更加明确后,再决定是否迁移。
当然,Serverless 也有适用边界。如果你的项目需要持续运行的 Worker、长时间处理音视频、执行密集计算,或者依赖特定的系统级能力,那么 VPS、容器服务或专门的任务处理平台可能更合适。
二、使用 Serverless,需要注意什么?
虽然 Serverless 能够简化部署流程,但不同平台提供的运行环境存在明显差异。
以 Vercel 和 Cloudflare Workers 为例:
- Vercel 的 Node.js Functions 提供 Node.js 运行环境,但仍然受到函数执行时长、内存、CPU 和平台配置等限制。
- Cloudflare Workers 基于 V8 isolates 运行,提供自己的 Runtime API,并通过兼容层支持部分 Node.js API。
这意味着,一些在本地 Node.js 环境中运行正常的代码,迁移到 Cloudflare Workers 后可能无法直接使用。
例如,依赖特定 Node.js 内置模块、原生二进制扩展、子进程或本地文件系统的代码,都需要提前确认兼容性。
如果你准备使用 Cloudflare Workers,建议重点了解以下官方文档:
- Node.js compatibility:了解支持的 Node.js API。
- Compatibility flags:了解
nodejs_compat等兼容性配置。 - Workers Runtime APIs:了解 Workers 自身提供的 API。
- Durable Objects:了解有状态服务和协调逻辑的实现方式。
这些内容不需要一开始全部记住。我更推荐的做法是:在项目的 AGENTS.md 中明确说明部署平台、运行时环境、兼容性限制和开发规范,让 AI 编码工具在生成代码时能够参考这些约束。
例如,可以在项目规范中写明:
- 项目部署在 Cloudflare Workers,运行时使用 Workers Runtime。
- 优先使用平台原生 API 和已确认兼容的依赖。
- 引入 Node.js API、原生模块或文件系统操作前,必须检查运行时兼容性。
- 涉及长时间任务时,先确认 CPU 时间、执行时长和资源限制。
- 修改部署配置后,需要进行构建验证和实际运行测试。
这类约束能够减少 AI 编码过程中引入不兼容 API 的概率,也能降低后续排查问题的成本。
三、Serverless 天价账单:如何避免?
最近刷到一个关于云服务高额账单的帖子:
另外,还有一些经验丰富的开发者分享过相关的风险和避坑经验,感兴趣的话可以看看:
在 Vibe Coding 越来越普及的今天,我觉得有一个问题尤其值得注意:AI 可能会生成存在缺陷的轮询、重试或递归调用逻辑,导致请求持续执行,进而消耗大量计算资源和 API 额度。
例如:
setInterval不断轮询接口,却没有设置合理的停止条件。- 请求失败后立即重试,没有退避机制或最大重试次数。
- 组件重复挂载,导致多个轮询任务同时运行。
- Webhook 处理失败后反复触发重试,产生重复任务。
- 后台任务执行时间过长,或者重复处理相同的数据。
- 前端轮询频率过高,用户离开页面后任务仍然持续执行。
这些问题不一定会导致高额账单,但如果叠加高频请求、大量用户访问或昂贵的计算资源,就可能造成明显的成本增长。
因此,我建议在开发和上线前做好以下几件事。
1. 让 AI 检查潜在的资源消耗问题
除了功能实现,也要检查轮询、重试、递归调用、后台任务和重复请求等逻辑。尤其需要关注退出条件、最大重试次数、请求去重和任务清理机制。
2. 设置账单告警
为云平台、数据库、对象存储和第三方 AI API 分别设置用量监控与预算告警。不同平台的告警能力有所区别,部分告警只能通知你,无法自动停止资源消耗,因此不能完全依赖告警来控制成本。
3. 定期检查资源使用情况
不要只关注网站访问量,还要观察 CPU 时间、函数调用次数、网络传输量、数据库查询量和存储操作次数。发现异常增长时,及时定位对应的接口或任务。
4. 提前规划迁移方案
如果项目流量增长后,Serverless 的成本明显高于 VPS,或者运行环境逐渐超出平台限制,可以考虑迁移到 VPS 或容器平台。
现在有 AI 辅助,梳理部署配置、改造代码和编写迁移脚本的效率确实更高了。不过,迁移仍然需要认真测试,特别是数据库连接、文件存储、定时任务、环境变量和回调地址等环节。
低成本部署的核心,是让基础设施成本与项目当前的规模相匹配,同时确保资源使用可观测、可控制。
四、Vercel vs Cloudflare:我为什么更倾向于 Cloudflare?
很多开发者创建新项目时,会直接选择 Next.js 模板,再顺势使用 Vercel 部署。这条路线很方便,特别是对于刚接触全栈开发的人来说。
不过,我个人对 Next.js 的开发体验和 Vercel 的平台绑定方式有一些不同的看法。
如果你对这个话题感兴趣,可以阅读下面这篇文章我觉得写得很好:
我自己的技术选型是基于 Vite 的 TanStack Start。目前 TanStack Start 已经进入 1.0 阶段,我更喜欢它的开发体验。
我相信使用用Next.js开发一个比较大的项目,都会感受到多卡多吃内存。不管你电脑多好,都会把内存吃空。这个问题被社区反复提及过,到现在也没改好。听说16.3版本有一些改进,但我已经不愿意再尝试了。
接下来,我们对比一下 Vercel Hobby 和 Cloudflare 的免费额度。
需要说明的是,以下数据参考了相关平台的免费套餐规则,主要用于展示资源类型和大致量级。具体额度、计费方式和功能限制可能随平台政策调整,正式部署前请以官方最新文档为准。
4.1 Vercel Hobby 免费套餐
| 资源 | 免费额度参考 |
|---|---|
| Fast Data Transfer(CDN 流量) | 100 GB/月 |
| Fast Origin Transfer(回源流量) | 10 GB/月 |
| Function Invocations(函数调用) | 1,000,000 次/月 |
| Active CPU(函数实际 CPU 时间) | 4 小时/月 |
| Provisioned Memory(预分配内存) | 360 GB·小时/月 |
| 图像优化转换 | 5,000 次/月 |
| 图像缓存读取/写入 | 300K / 100K 次/月 |
| 构建时长 | 单次部署最长 45 分钟,每天最多 100 次部署 |
| 函数规格 | 最高 2 GB 内存 / 1 vCPU,最长执行时间可能达到 300 秒,具体取决于配置 |
Vercel 的优势是与 Next.js 等框架集成紧密,部署流程简单,预览环境和开发工作流也比较成熟。
但对于独立开发者来说,除了免费额度,还需要关注实际的 CPU 消耗、带宽、图像优化和其他付费资源。即使函数调用次数没有超出限制,也不代表其他资源一定不会产生额外费用。
官方文档:Vercel Pricing
4.2 Cloudflare 免费套餐
| 资源 | 免费额度参考 |
|---|---|
| Workers 请求 | 100,000 次/天,按 30 天估算约 300 万次/月 |
| CPU 时间 | 每次调用 10 ms |
| 静态资源(Workers Assets)请求 | 免费且不限量,具体适用规则以官方文档为准 |
| KV | 读取 100,000 次/天;写入、删除和列举合计额度按官方规则执行;1 GB 存储 |
| D1 数据库 | 每日读取和写入行数有额度限制,存储容量按套餐规则计算 |
| Durable Objects | 请求量和计算资源有免费额度,具体取决于使用的存储方案 |
| R2 对象存储 | 10 GB 存储;A 类操作 100 万次/月;B 类操作 1,000 万次/月;符合条件的出站流量免费 |
| Hyperdrive | 查询量有免费额度 |
| Queues | 消息操作量有免费额度 |
Cloudflare 的优势在于产品覆盖面广,除了 Workers,还提供对象存储、数据库、缓存、队列等基础设施。
例如,R2 很适合存储音频、图片和视频等文件。对于需要处理媒体资源的工具站来说,免收符合规则的互联网出站流量费用,可以帮助降低一部分存储和分发成本。
这里也要特别提醒:Cloudflare 的不同产品有各自的计费规则。Workers 的免费额度不能直接理解为所有资源都免费,CPU 时间、数据库操作、存储容量和请求量都需要分别核对。
官方文档:
五、除了部署,还有哪些免费基础设施?
除了云平台本身,还有一些适合独立开发者的基础设施,可以帮助我们以较低的成本搭建完整的产品开发与运营流程。
| 工具 | 主要用途 |
|---|---|
| Sentry | 错误监控、异常追踪和性能分析 |
| Google Analytics 4 | 网站流量、用户行为和转化分析 |
| Microsoft Clarity | 用户行为回放、热力图和交互分析 |
这些服务都有免费使用方案或免费额度,具体限制需要查看各自的官方说明。
对于刚上线的独立工具站,我认为最值得优先接入的基础设施包括:
- 错误监控:及时发现线上异常,避免用户遇到问题后才开始排查。
- 网站分析:了解访问量、流量来源、用户行为和核心功能的使用情况。
- 账单监控:观察云资源和第三方 API 的实际消耗,避免成本异常增长。
- 自动化部署:通过 GitHub 和 CI/CD 流程减少手动发布的工作量。
这些工具不一定需要一次性全部配置完成,可以先接入最影响稳定性和产品决策的部分,再根据业务发展逐步完善。
六、最后:我整理了一个自己的 SaaS 启动模板
每次启动新项目时,身份认证、基础配置、错误监控、数据分析和部署流程等基础工作往往会重复出现。
因此,我把自己常用的一些基础设施和技术选型整理成了一个项目启动模板,希望减少后续新项目的重复劳动。
GitHub 仓库:LLmoskk/saas-starter
这个模板主要基于我个人喜欢的技术栈,适合作为新项目的起点。你也可以根据自己的需求,让 AI 帮助接入其他服务或调整项目结构。
对开发者来说,我觉得每个人都要沉淀自己的合适的模板,尽早把重复性的基础工作标准化,可以把更多精力留给产品本身。

