!11-serverless-deploy-cicd_index.png (../../public/images/Advanced/11-serverless-deploy-cicd_index.png)
第十一章:无服务器部署与 CI/CD 自动化
序言
你准备上线了,听说要买服务器,但你囊中羞涩,而且不想折腾 Linux 运维。
零成本部署
老师傅给你推荐了一套经典的零成本起步方案:Vercel (前端+后端运行环境) + Supabase (云数据库)。
为什么推荐 Vercel 作为前端部署平台?因为它连接 GitHub 后自动部署,全球 CDN 加速,免费额度够用,是 AI 时代 MVP 的最佳选择。后端方面,你可以选择标准 PostgreSQL 的托管服务(如 Neon、Railway),也可以选择 Supabase 这种 BaaS(覆盖数据库、Auth、Storage、Realtime 等功能)。架构是用户 → Vercel(前端)→ PostgreSQL/Supabase(后端),服务都能免费起步,按需付费。扩展路径清晰:MVP 用免费额度,增长后升级 Pro 版本,或者考虑自建服务器。这样的组合让 AI 开发的 MVP 能以最快速度上线验证。
- Vercel:这是 Next.js 的官方部署平台,体验极佳。它提供 Serverless (无服务器) 环境。注意,Serverless 不是说没有服务器,而是你不需要管理服务器。你只管写代码,服务器的扩容、维护全交给 Vercel,有请求时它自动唤醒,没请求时它自动休眠,对个人开发者有免费额度。
Serverless 概念
Serverless不是真的没有服务器,而是你不需要管理服务器。平台自动处理服务器配置、扩展、维护。你只需要关注代码,剩下的交给平台。【详见11.1节】 会深入讲解 Serverless 的原理、优缺点、适用场景。
- Supabase:Vercel 不提供数据库,所以我们需要 Supabase。它本质上就是一个云端的 PostgreSQL。 老师傅悄悄提醒你,最好不要被它深度捆绑。意思是:尽量使用 Prisma 通过标准的连接字符串去连它,而不是大量使用 Supabase 独有的 JS SDK。这样哪天 Supabase 收费贵了,你可以把
DATABASE_URL一改,无缝迁移到阿里云或其他云数据库,这叫保持架构的独立性。
CI/CD 自动化
老师傅还提到了一个听起来很高级的词:CI/CD(持续集成/持续部署)。 虽然听起来复杂,但在现在的开发流程里,它就意味着**“自动化”**。
以前,部署网站需要:手动打包 -> 传到服务器 -> SSH 登录服务器 -> 重启服务。 现在,流程变成了:
- 你在本地运行
git push把代码推送到 GitHub。 - GitHub 自动通知 Vercel:“嘿,有新代码了!”
- Vercel 收到信号,自动拉取最新代码,下载依赖,运行构建,发布上线。
你不需要懂复杂的运维命令,保存即发布。
部署踩坑
你学会了将 GitHub 项目绑定到 Vercel。第一次构建,红色的 Failed 给了你当头一棒。
坑一:Node.js 版本不一致 Vercel 默认的 Node 版本可能比较老,而你的 Next.js 项目可能需要更新的版本。你需要在 Vercel 的 Settings -> Build & Development Settings 里把 Node.js Version 调整为和你本地一致的版本。
坑二:环境变量失踪 修正版本后,构建成功了(Succeeded),但你访问网页,发现全是报错。 你猛然想起第六章学过的知识:.env 文件被 .gitignore 拦在门外了! GitHub 上根本没有你的数据库密码和 API Key,Vercel 自然也拿不到。 你需要在 Vercel 的 Settings -> Environment Variables 页面,把本地 .env 里的内容一条条复制填进去。这意味着你需要将本地开发环境中的配置信息,手动同步到云端生产环境中。
配置好变量后,你满怀期待地打开网站,结果页面显示 500 Server Error。 查看日志,报错显示:Table "User" does not exist。
你恍然大悟:代码传上去了,但数据库表还没传上去! Supabase 给你的只是一个空的数据库。你本地的表结构(Schema)还在你本地的电脑里。 老师傅教了你一个远程同步命令:在本地终端运行: npx prisma db push 这会将你本地 schema.prisma 定义的结构,推送到线上的 Supabase 数据库中。 (注意:此时你的本地 .env 必须临时指向 Supabase 的地址,或者利用 --url 参数指定地址。)
最后,为了防止上线后报错,老师傅让你检查 Vercel 的 构建命令Build Command。虽然默认是 next build,但对于 Prisma 项目,最好修改为:npx prisma generate && next build。这呼应了第七章的伏笔:每次构建前,必须先运行 generate,确保云端的代码能认识最新的数据库结构。
部署时如果遇到构建失败,别慌。老师傅告诉你,把完整的报错信息发给 AI,它会帮你诊断问题。如果某个平台反复出问题,可以考虑换一个平台(比如从 Vercel 换到国内的腾讯云 EdgeOne),或者考虑后续章节要讲的自建服务器部署。
终于,一切配置妥当。Vercel 给你生成了一个 https://your-project.vercel.app 的链接。 你激动地点开,网页在公网上跑起来了!你终于获得了那个可以发给朋友的链接。
平台自动优化
部署成功后,老师傅告诉你一个好消息:这些平台已经帮你做了很多性能优化。
比如图片会自动压缩成更高效的格式,代码会自动分割成小块按需加载,静态资源会被分发到全球的加速节点。你不需要自己配置这些,平台默认就帮你做好了。
当然,如果你的产品用户量很大,这些默认优化可能不够。那时候你再考虑更深入的优化策略。但在早期阶段,平台的默认设置已经足够好了。
部署决策路线图
阶段一:MVP 验证期(< 1000 用户)。用 Serverless(Vercel + Supabase)。零成本起步,快速验证。这时候自建服务器是过度设计。
阶段二:增长期(1000 - 10000 用户)。评估混合架构。如果成本增长过快,考虑部分服务迁移到自建服务器。但如果增长率稳定,继续用 Serverless 也划算。
阶段三:企业期(> 10000 用户)。合规要求或性能优化时自建。比如需要数据本地化(GDPR)、需要极致性能优化、需要长期成本优化。
过早优化是万恶之源。不要在阶段一就担心阶段三的问题。
免费额度陷阱
老师傅最后提醒你一个实战中的坑:"免费额度不等于真免费"。
很多云服务都提供慷慨的免费额度,但这往往是个"甜蜜的陷阱"。比如某些数据库服务,免费额度只够小规模测试用,一旦用户量上来、数据量增加,费用会指数级增长。
更危险的是,很多平台不会在你接近免费限额时主动提醒你。等你发现账单时,可能已经悄悄积累了几百块甚至更多。
老师傅给你几个实用建议:
第一,选平台时看清楚计费规则。不要只看"免费额度"这几个字,要搞清楚:免费额度具体是多少?超出后怎么收费?有没有费用封顶?
第二,设置账单告警。大部分平台都支持设置消费阈值,比如"当月费用超过10美元时发邮件提醒我"。这能避免意外收到天价账单。
第三,定期查看用量。养成习惯,每隔一两周登录平台看看当前用量,做到心中有数。
第四,记住免费额度的定位。免费额度是用来体验和测试的,不是用来长期跑生产业务的。如果你的产品真的有用户了,要为可能的付费做好准备。
CI/CD 让部署变成了"保存即发布"。老师傅告诉你,这种"代码变更时自动触发操作"的理念,和我们在开发时提到的 Hooks 是完全一致的。在本地,Hooks 自动运行测试和格式化;在云端,CI/CD 自动运行构建和部署。它们构成了完整的自动化闭环。我们会在后续章节中讲解 Hooks 的相关内容。
成本优化
产品上线一段时间后,你打开账单一看,数字让你心跳加速。老师傅告诉你,这时候需要建立成本优化意识。
关于部署决策,老师傅说要分阶段考虑。MVP阶段(<1000用户)用Serverless零成本起步,不要过早优化。增长期(1000-10000用户)评估混合架构,如果成本增长过快再考虑自建。企业期(>10000用户)才需要为合规或性能优化自建服务器。过早优化是万恶之源,不要在阶段一就担心阶段三的问题。
AI模型成本也值得优化。简单任务用便宜的国产模型(如GLM、DeepSeek),复杂推理用Claude。某AI应用通过智能路由(70% GLM + 30% Claude),API成本降低了80%。关键是匹配任务复杂度和模型能力,不要用大炮打蚊子。
老师傅还提醒你注意免费额度陷阱:很多平台的免费额度只够测试用,一旦有真实用户,费用会指数级增长。记得设置账单告警(比如"超过10美元发邮件提醒"),定期查看用量,做到心中有数。免费额度是用来体验的,不是用来长期跑生产业务的。
至于运维监控、日志分析等SRE相关的技术实践,我们会在后续云服务器运维中详细讲解。
小节导航
- 11.1 Serverless详解 🔴 - 理解无服务器架构的原理与应用
- 11.2 Vercel部署架构选择 🟡 - 选择合适的 Vercel 部署模式
- 11.3 CDN概念 🔴 - 内容分发网络的原理与应用
- 11.4 Vercel部署实战 🔴 - 从零部署 Next.js 项目
- 11.5 构建优化排查 🟡 - 解决构建失败和性能问题
- 11.6 EdgeOne部署实战 🔴 - 腾讯云 EdgeOne 平台部署
- 11.7 CI/CD配置 🔴 - 配置持续集成和持续部署
- 11.8 Hooks与CI-CD理念 🟡 - 自动化代码变更时触发操作
- 11.9 无头模式 🟢 - 理解无头浏览器和服务端渲染
- 11.10 部署踩坑与解决 🔴 - 常见部署问题和解决方案
- 11.11 部署决策框架 🔴 - 如何选择合适的部署方案
- 11.12 SRE入门意识 🟢 - 站点可靠性工程基础
- 11.13 成本优化策略 🟡 - 优化部署和使用成本
- 11.14 可观测性与日志 🟡 - 监控、日志和追踪