先交代下背景,我最早玩博客的时候,用的是某云厂商99块一年的“学生机”,1核2G,装个WordPress再加个宝塔面板,内存直接飙红,后来忍无可忍,转投了Vercel的怀抱——不是因为情怀,是因为穷,三年下来,我帮朋友和自己部署了十几个项目,踩过的坑能铺满一个足球场,今天不整虚的,全是干货。
第一坑:别在Vercel上部署动态后端,除非你想哭
我第一次用Vercel,兴冲冲地把一个带Node.js后端的全栈项目推上去,结果呢?部署是成功了,但一调用API就超时,日志里全是冷启动延迟,Vercel的Serverless Functions本质是“按需执行”,不适合长连接或重计算。解决方案:前端静态资源放Vercel,后端用Railway或者Fly.io,或者干脆用Cloudflare Workers做轻量中间层,如果你非要全栈,请用Next.js的API Routes,但记得把函数超时时间调到最大,并且做好缓存。
第二坑:域名解析别乱用A记录,CNAME才是亲儿子
很多人习惯在域名商那里加A记录指向76.21.21(Vercel的IP之一),以为这样就行,结果呢?一旦Vercel那边IP变动(他们确实会变),你的网站直接打不开。正确做法:在Vercel项目设置里添加你的域名,它会给你一个cname.vercel-dns.com,然后去域名商那里加CNAME记录,别嫌麻烦,一劳永逸,主域名(example.com)和www子域要分别添加,Vercel会自动帮你做301跳转,但前提是你得把两个都填好。
从零到一,我用Vercel白嫖了三年服务器,这些坑你别再踩了
第三坑:SSL证书别自己申请,Vercel自动配好但有一个“坑中坑”
Vercel默认给你配Let‘s Encrypt证书,有效期90天,但它是自动续期的,你啥都不用管——前提是域名解析必须正确指向Vercel,我遇到过最惨的一次:我为了加速,在Cloudflare那边开了“橙色云”代理,结果Vercel检测不到DNS记录,证书续期失败,网站直接红屏。解决方案:要么在Cloudflare把该域名的代理状态改为“灰色”(仅DNS),要么干脆把Cloudflare的SSL/TLS模式设为“Full (strict)”,如果你想省事,直接用Vercel自带的DNS,别套CDN,至少前期别套。
第四坑:预览部署和Production分支,搞混了你会怀疑人生
Vercel默认每次push到main分支都会触发生产部署,但如果你在GitHub上开了PR,它也会自动生成一个预览部署,问题来了:预览部署的域名是xxx.vercel.app,有时候你会不小心把测试数据写进生产环境。我建议:在Vercel项目设置的“Git”选项卡里,把“Production Branch”明确设为main,同时把“Preview Deployments”设为仅当PR被review后才触发,如果你用MongoDB或PostgreSQL,记得在环境变量里区分DEV和PROD的连接字符串,别问我怎么知道——我丢过一整张用户表。
第五坑:构建命令和输出目录,不是你想当然的那样
如果你是Vue或React项目,默认构建命令是npm run build,输出目录是dist,但如果你用的是Vite,输出目录是dist没问题;如果你用Next.js,输出目录是.next,但Vercel会自动识别,你不需要手动改,真正的坑在于:如果你用静态生成器(比如Astro或Eleventy),且输出目录里有开头的文件夹,Vercel可能会忽略它们。解决方案:在项目设置里找到“Output Directory”设置,明确填上dist或public,如果你的构建脚本里有rm -rf之类的命令,Vercel的沙箱环境默认不允许,记得改用rimraf。
第六坑:环境变量非要写在代码里,那你完蛋了
有一次我图省事,把API密钥直接写在了前端代码里,结果被爬虫抓了。Vercel的环境变量是在服务端注入的,但如果你在客户端组件里引用process.env.XXX,它会被打包进JS,正确做法是:在vercel.json里配置env,或者用NEXT_PUBLIC_前缀才暴露给浏览器,如果你用的是纯静态站,那更简单——所有敏感信息都放服务端函数里,前端只发请求。
长期维护的三个建议(血泪总结)
- 盯紧用量告警:Vercel的免费版每月有100GB带宽和100小时函数执行时间,听起来很多,但如果你被刷了流量,一天就没了,在“Usage”页面设置预算告警,超了会发邮件,别问我是怎么知道的。
- 定期看日志:Vercel自带日志功能,但只能保留一小时,如果你要排查问题,直接在本地跑
vercel logs --tail,或者用第三方服务如Logflare转发,别等到用户反馈了才去翻日志,那时候连日志都没了。 - 域名续费别用自动续费:至少提前一个月检查域名是否过期,我有次域名过期两天才发现,结果DNS全部失效,Vercel自动更新证书也失败了,恢复了整整一天才缓过来。
最后说句掏心窝的:Vercel这玩意儿,用好了是神器,用不好是血压计,别贪心,静态站+轻量API就够你玩了,如果你真要搞复杂的后端,老老实实去租个便宜云服务器,把Vercel当CDN用,这才是省钱又省心的正道,希望这篇废话能让你少踩几个坑,少熬几个夜。



发表评论