localhost:3000 为什么在朋友的电脑上打不开?
localhost 是一个被特别约定的域名,含义只有一个:"现在这台电脑自己"。它的实际 IP 地址是 127.0.0.1,但每次都输入太麻烦,所以全世界约定用这一个名字来代替。朋友在自己的浏览器里输入 localhost:3000,指向的只是他自己电脑的 3000 端口。此时既没有服务器,也没有域名、DNS 和 HTTPS——填补这段空白的整个过程,就是部署。
部署为什么曾是个难题?
早期的部署就是用 FTP 复制文件。看似简单,事故却从未间断:漏掉一个文件,网站就带着半截更新继续运行;两个队友往同一台服务器上传,互相覆盖对方的工作;我的电脑装的是 Node 18,服务器上却是 14,"在我电脑上明明能跑"反复上演。
三个问题的解法各自出现。没有记录导致的问题,2005 年由 Git 用提交和分支解决;环境不一致导致的问题,2013 年由 Docker 解决——像预制菜套盒一样,把代码和运行环境打包进同一个箱子;依赖人手导致的问题交给了 CI/CD,推送一次,测试、构建、部署就沿着流水线自动流转。一天部署数百次的时代由此开启。
Nginx 是如何成为 Web 服务器标准的?
Apache 曾占据全球 70% 以上的 Web 服务器。但 Apache 为每个访问者创建一个进程,一万人同时在线就意味着一万个进程,内存撑不住。这就是 C10K 问题。2004 年,俄罗斯开发者 Igor Sysoev 开发的 Nginx 用事件驱动架构正面突破:少量进程轮流处理海量请求,如今市场份额位居第一。它还兼任反向代理——像医院的咨询台,静态文件自己处理,需要执行代码的请求转给后面的 WAS。
Vercel 替你做了什么,又拿走了什么?
租服务器、装 Nginx、配 Docker、搭 CI/CD、签发 SSL 证书,全部自己来要花好几天。Vercel 用"连接一个 GitHub 仓库"替代了这一切:每次推送自动重新部署,绑定自定义域名后 HTTPS 也自动生效。
代价是控制权。平台越方便,越难触碰精细的服务器设置。原型用 Vercel 或 Railway 起步,需求变复杂后再迁到几乎一切皆可配置的 AWS——这条常见路径的原因就在这里。
非开发者为什么要懂这张地图?
不懂也能用。但懂了之后,出问题时能感觉到是哪个环节坏了。对 AI 说"帮我部署"的人,和问"构建阶段好像没有识别到环境变量""我要把域名接到 Vercel,CNAME 该怎么设"的人,得到的结果必然不同。非开发者氛围编程的水平,正是由提问的具体程度区分的。这也是 SH Consulting 的 AX 培训中,部署与写代码占同等分量的原因。