应用完成了。在我的电脑上运行得非常完美。我为了向朋友炫耀,复制地址栏中的 localhost:3000 发给他,朋友却回复:“打不开啊?”我鼓起勇气做了部署,结果这次原本在我电脑上运行正常的应用,在互联网上却开始报错。
在 Vibe coding 中,最容易让人受挫的环节就是这里:部署。本篇将解释部署究竟做了什么,以及“本地能运行、部署后却不行”这类问题最常见的三个原因。
localhost 的意思是“我的电脑”
localhost不是特殊地址,而是指向**“这台电脑”**的代词。开发时,AI 说“请在 localhost:3000 上确认”,意思是让你用自己电脑的浏览器,查看暂时运行在自己电脑上的应用。
所以,当你把localhost:3000发给朋友时,朋友的浏览器会在朋友的电脑里寻找应用。当然找不到,因为我的应用还从未离开过我的电脑。而且,关闭开发程序或合上笔记本的瞬间,我电脑上的应用也会停止。要成为其他人可以使用的服务,需要两样东西:一台 24 小时开机的电脑,以及任何人都能找到的地址。
部署就是搬家
部署就是解决这两个问题的工作。简单来说,部署就是把原本在我电脑上的应用搬到服务器。服务器听起来很了不起,但其实只是“24 小时开机并连接互联网的别人的电脑”。
Vibe coding 中常用的 Vercel、Netlify 等服务,会替你完成这次搬家。它们会做三件事。
- 租用服务器:提供数据中心里的电脑供你租用。
- 构建(build):把开发用代码转换、压缩成服务用版本,就像打包行李。
- 分配地址:提供像
내앱.vercel.app这样全世界任何人都能访问的地址。
这里的构建值得记住。开发模式比较宽松,通常会忽略一些问题;但构建是严格的检查员,会在部署前一次性指出开发时悄无声息的问题。“本地能运行、部署却失败”的情况,很大一部分就是卡在构建阶段。
本地能运行、部署后却不行的三大原因
如果部署成功后应用的行为异常,原因十有八九是下面三者之一。
**第 1 名:没有注册环境变量。在第 2 篇中,我们把 API key 放进.env文件,并使用.gitignore让 Git 不跟踪这个文件。结果.env没有被装进行李。**应用到达服务器后没有 key,因此 AI 调用和 DB 连接全部失败。在部署服务控制台的“Environment Variables”菜单中注册.env的内容,然后重新部署即可解决。这是本地能运行、部署后却不行时最先要检查的地方。
第 2 名:构建检查失败。这种情况下,部署本身会失败并输出红色日志。不必慌张,把部署服务显示的构建日志完整复制并粘贴给 AI:“它输出这段构建日志后失败了,帮我修好。”
**第 3 名:DB 不认识新客人。**根据 DB 服务的不同,通常会有“允许哪些来源连接”的设置。之前只有我的电脑连接,现在变成服务器连接,因此可能需要调整允许列表或连接地址设置。把症状(日志)交给 AI,也能快速缩小范围。
域名:把地址换成自己的名字
部署完成后,会生成类似내앱.vercel.app的地址。你可以直接使用,也可以绑定类似myapp.com的自有域名。域名需要从域名注册商处按年租用,连接过程就是在**电话簿(DNS)**中登记:“如果有人查找这个名字,就把他引导到那台服务器。”部署服务控制台会提供操作步骤,登记后,信息传播到全球电话簿可能需要几分钟到一天左右。刚完成连接后暂时打不开,也不用慌张。
部署后 3 分钟检查流程
按下部署按钮并不代表结束。每次只要检查这三项,就能提前发现大多数问题。
- 直接访问已部署的地址。使用真实地址,而不是开发时使用的 localhost。
- 把核心功能各点击一次,重点测试注册、保存、AI 调用等涉及后端和环境变量的功能。
- 如果看起来不对,就打开部署服务控制台中的**日志(Logs)**菜单,把红色行复制给 AI。第 1 篇提到的“服务器的惨叫”,就会在这里出现。
总结
localhost的意思是“我的电脑”,所以发给别人也打不开。- 部署就是把应用搬到一台 24 小时开机的服务器上,并获得一个公开地址;Vercel 等服务会替你完成这件事。
- 本地与部署环境的三大差异:未注册环境变量(第 1 名)、构建检查失败、DB 连接设置。只要记住
.env不会被装进行李,就解决了一半问题。 - 域名连接就是登记电话簿(DNS),因此传播可能需要一些时间。
- 部署后执行 3 分钟流程:访问真实地址 → 点击核心功能 → 检查日志。
下一篇讲错误消息:如何不害怕红色文字并读懂它,如何正确地把错误传达给 AI,以及当 AI 无法修复同一个 bug、一直原地打转时,如何脱身。

![[Vibe Coder #4] 部署到底是什么?为什么在我的电脑上能运行的应用,到了互联网却不行? 封面图](/assets/images/posts/e8334add-055c-4ffc-b750-c8dca5612573/deploy-localhost-to-world-1.jpg)