vibe coding
Vibe Coding 部署篇:部署全流程(下)
Vibe Coding

部署篇:部署全流程(下)

你是不是也这样:让 AI 帮你把项目弄上线,它甩给你一串命令,你照着一条条回车。

最后网站真的打开了,你特别有成就感。

可你根本不知道刚才那几条命令都干了什么,也没人告诉你这一套以后要怎么维护。

而部署这件事,难的从来不是让它跑起来。

难的是哪天你要更新一版、要把数据备份出来、要查一个“网站突然打不开”的原因。

那天你才会发现,这一套东西你根本动不了。

而这时候再想换一种方式,等于把部署整个重做一遍。

一天一个 vibe coding 小技巧,今天讲:项目到底该怎么推上服务器,而且推上去之后,你自己还接得住。

本小节属于部署全流程总结篇的内容,我拆成上下两篇,这是下篇,还没看过上篇的建议回头先去看看。

上篇讲的是上线之前的顺序:手续什么时候交、地基什么时候拍板、代码上线前怎么体检。

今天讲后半段——项目真正搬上服务器那一刻,以及它开始对外之后。

先看整体。

后半段就三件事:选一条你自己接得住的路、把项目安全地接上外面、上线之后别让它失去照看。

这三件里,最容易翻车的是中间那件。

下面一件一件说。

一、第一步:选一条你自己接得住的路

部署说白了就一件事:把项目搬到服务器上,让它一直跑着,外面能访问。

而“搬”这件事,常见的有三条路。

第一条是原生安装。

就是在服务器的系统里,把要用的那几样东西一个一个直接装上去:在门口接住外面访问的 Web 服务器,一般是 Nginx;存数据的数据库;还有你后端那门语言的运行环境。

听着挺可怕,其实专业程序员装这些,干的也是复制、粘贴、回车,没有什么黑魔法。

第二条是 Docker。

它把这一整套东西连着你的代码一起打成一个包,这个包搬到哪台机器上都能起来。

你在开源项目里天天见到的那种“复制一条命令、回车,项目就跑起来了”,多半就是它。

第三条是可视化面板。

服务器本来是个只认命令的黑窗口,装上面板,它就变成一个你能看懂、也点得动的网页后台。

装环境、传代码、绑域名、备份,都从敲命令变成在浏览器里点。

但面板其实不是第三种技术。

原生和 Docker 是两种“装法”,面板是加在它们上面的一层“操作壳”。

你在面板里点“安装数据库”,它底下执行的还是原生那套安装命令;你在面板里点“添加容器”,它底下跑的还是 Docker。

它没发明新东西,它干的是把那些命令翻译成你看得懂的按钮,顺手帮你把配置文件写对。

所以这三条不是三选一,完全可能同时存在:你用面板管着服务器,里面跑的是 Docker。

想通这一层,你就不会觉得选面板是“选了个简化版、以后不正规”——你选的是同一套东西的一种看得见的操作方式。

那到底该选哪条?

我的推荐很明确:如果你没有技术背景,这个项目以后还要靠你自己扛,就走面板。

不是因为它简单,是因为它是三条路里,唯一一条让你自己看得见的路。

理由一句话就能说清:面板是“你自己接得住”的方式,原生和 Docker,是“出了事你接不住”的方式。

因为部署那一刻,三条路的难度差别其实不大,命令都是 AI 帮你敲的。

差别全在后面:等你要更新、要备份、要查故障的时候,原生对你来说就是一整套黑房子;Docker 更狠一点,是在这个黑房子里又套了一层黑盒子。

你两眼一抹黑,AI 又看不见你服务器现在的真实状态,最后就只能靠猜。

Docker 我得多说一句:它挺好,很多团队天天在用。

问题是它把简单放在了启动那一刻,把复杂留在了后面的维护里。

那条很短的启动命令背后,数据到底存在哪、对外开放了什么、更新失败了怎么退回去,都在里面。

所以这里有个不用懂技术也能用的判断标准:AI 让你跑一条 Docker 命令之前,先把这三句问回去。

“这个容器的数据存在哪,删掉重建会不会丢?”

“它对外开了哪些端口,是只有本机能连,还是整个公网都能连?”

“如果这一版更新失败,我怎么退回上一版?”

这三个问题它答不清楚,就先别回车。

因为按下这个回车的时候你什么都不疼,疼的是你要更新、要备份、要救的那一天。

当然,面板也不是保险箱。

它一定要从官网下载,因为面板后台本身就是一个能操作整台服务器的高权限入口,所以还要设强密码、及时升级,来路不明的插件不要装。

实在拿不准,就把你的产品形态、还有“以后主要靠我自己维护、我不会读代码”这个前提告诉 AI,让它按“出了问题我能不能自己查、能不能自己备份和更新”这个标准给你一个唯一推荐,并说清另外两种为什么不适合你,先只要判断,别让它动你的服务器。

二、第二步:把项目接上外面,这一步最容易翻车

路选好了,接下来是真正把项目推上去、让外面能访问。

这一步的动作最多,翻车也最集中。

动手之前,先立一条规矩,三条路都适用:生产环境的数据库密码、各种密钥,只填在服务器上的配置里,绝不写死进代码,也不要直接发给 AI。

因为代码是会被上传、会被打包、也会跟着刚才说的那个 Docker 包到处走的。

密码一旦写在代码里,它就跟着代码一起跑,你根本不知道它最后会出现在哪儿。

规矩立完,第一个动作,是把域名接到你的程序上。

项目在服务器上跑起来之后,它一般待在一个自己的号码上,比如 3000、8080,这个号码有个名字,叫端口。

而用户在浏览器里输你的域名,敲的其实是 80 和 443 这两个标准端口。

中间这一段,得有人把请求接过来,再转进去。

干这件事的,就是刚才说的那个守在门口的 Web 服务器:它盯着 80 和 443,收到请求先看是访问哪个域名,再转给后面对应的那个程序。

这个动作叫反向代理。

你不用会自己配,但知道有这么一层,能解释你以后一定会遇到的两件事。

一件是,为什么一台服务器上能同时放好几个网站、各自绑不同的域名——因为前面这层是按域名分派的。

另一件是,为什么你的程序明明在跑,域名打开却是一页 502 错误——那是这层还活着,但它往后转的时候,后面那个程序已经不在了。

502 这个数字你记着,以后一看见它,你就知道该去查后面那个程序死没死,而不是去折腾域名和证书。

知道这一层的存在,你排查的时候才分得清是“门口的人不在”还是“屋里的人不在”,这是两种完全不同的修法。

也正因为有这一层,https 的证书通常装在它上面,而不是装在你的代码里。

而 http 和 https 的差别,不是多一个字母,是这一路上传的东西有没有被锁上。

没有证书,用户填的账号密码在路上是明文的;浏览器还会直接给你标一个“不安全”,很多人看到这行字就走了。

证书现在可以免费自动申请,但有一点你得知道:签发之前,它必须先确认这个域名真是你的。

确认的办法,就是它反过来访问一下你这个域名,看是不是真解析到了你这台机器上。

所以顺序是死的:先解析生效,再申请证书。

解析还没生效就急着申请,一定失败——而这时候很多人以为是命令敲错了,回头去反复折腾配置,越弄越乱。

还有一件必须记着:证书是有有效期的,免费的那种,也就是 Let’s Encrypt 签的,有效期 90 天。

90 天,比你想的短得多——它到期不会提前找你,只会在某天早上让所有用户看到一整页红色的安全警告,比网站直接挂了还难看。

所以申请的时候就把自动续期一起配好,然后自己在日历上按 90 天记一笔,到期前去确认一下它真的续上了。

自动续期这东西,配好了不代表跑得起来,我见过的失败几乎都是同一种:配了,但从来没人回去看它到底续没续。

到这儿,域名能打开了,地址栏也是 https 了。

但这只说明部署流程走通了,不代表你已经安全了。

就在此时此刻,公网上还有一批数据库,直接对着全世界敞着门。

有人扫到了,把数据清空,再留下一张勒索的纸条。

而这些机器的主人,多半也以为自己只是“部署上线了”。

这里得先分清两层安全。

一层在代码里:谁能调你的接口、能不能改到别人的数据。

另一层在服务器上:谁能登录这台机器、哪些服务能被互联网直接连上、敏感文件能不能被人用一个网址下载走、软件有没有还停在有已知漏洞的老版本。

这两层谁也替不了谁:代码写得再严,服务器的登录口和数据库直接对公网敞着,照样出事。

而服务器这一层最常见的问题,其实就是门开得太多。

一台服务器上同时跑着好几个服务,每个服务对外都占着一个端口。

而一个普通网站对公网通常只需要开放刚才说的 80 和 443,其他的没必要对全世界开着。

数据库就是最典型的那道不该开的门——它通常没有必要让整个互联网都能直接连上。

而这里有个几乎人人都踩的坑:一个端口到底开没开,不是一个地方说了算,是四道闸门串在一起。

第一道,你的程序自己在听哪儿。

它可以只听“本机”,也可以听“所有人”。

这两种状态在配置里就是两串数字:127.0.0.1 是只听本机,0.0.0.0 是谁都能连。

只听本机,就等于只允许这台服务器上的其他程序连它,外面根本碰不到——数据库最理想的状态就是这个。

这一道最容易被忽略,但它是最有效的一道,因为它从源头上就不接外面的电话。

第二道,服务器系统里的防火墙。

第三道,云厂商控制台上的安全组,也就是在你这台机器之外的一道网络闸门。

很多人只在服务器里关了防火墙,忘了控制台上那层还开着;也有人反过来,在控制台关了,机器里却是敞的。

第四道,如果你用 Docker,它对外发布端口的方式,可能会绕过你在系统防火墙里设的规则。

就是那种一看就懂的写法:3306 冒号 3306,左边这个就是对外开放的口子。

这一条最阴——你在服务器里看到规则明明是拦着的,外面却能直接连上你的数据库。

这四道的关系是:只要有一道是通的,这扇门就等于开着。

所以“我的数据库到底有没有暴露”这个问题,不能只看一处。

你可以把这句话直接发给 AI:

“请按四层挨个检查我的数据库有没有暴露:程序监听的是 127.0.0.1 还是 0.0.0.0、系统防火墙规则、云厂商安全组、Docker 有没有把端口发布出去。只检查、只报告,先不要改任何配置。”

而它报完,你还能自己验一遍,办法特别土:关掉家里的 wifi,用手机流量,去连你服务器上那个数据库端口。

从外面能连上,说明这扇门就是开着的,别再自我安慰。

这一步之所以要自己做一次,是因为 AI 是站在你服务器里面看的,而攻击你的人站在外面。里面看着好好的,外面能进来,这种事天天发生。

这几道门具体怎么查,三种部署方式还各有重点:原生要看权限是不是给得太大,Docker 要看你用的那个包是从哪儿下来的、有没有给它没必要的高权限,面板要看后台自己有没有守住。

而这一步在顺序上有一条必须记住:生产环境第一轮只让 AI 只读检查,别上来就改。

让它把发现的问题列成清单,你确认,然后一次只改一项,每改完一项重新验证一次。

尤其是改登录方式和防火墙之前,先确认你还有别的救援入口,手里这条连接别断——不然改错一下,你自己也进不去了。

但这些检查只是把不该开的门关上、把能被攻击的面缩小。

它挡不住有人拿大流量硬冲你,那种得靠云厂商和专业防护。

三、第三步:上线之后,别让它失去照看

门也关好了,项目正式对外了。

这时候最容易发生的一件事,是你从此再没打开过服务器。

上线之后有四条底线,你至少得守住。

第一,你得知道它还活着。

要有基础的监控和告警,网站挂了主动给你发消息,而不是等用户找上门。

硬盘尤其要盯:日志没人管就会一直往里写,硬盘一满,网站说挂就挂。

第二,出了事你能救回来。

查问题靠日志,把日志下载下来发给 AI 分析,别把生产服务器直接交给它、让它一边查一边改。

“能退回去”这件事,得提前留好落点:每次上线之前,让 AI 给这一版代码打一个标记存住,标清这是哪一版。

这个标记在 Git 里叫 tag,你不用会用,只要每次上线前说一句:“上线前给当前版本打一个 tag,写清日期和这一版做了什么。”

这样新版翻车,你不是靠回忆去一处处改代码,而是直接把那个标好的版本再推一遍。

而没有这个标记的时候,回退是什么样?

是你一边被用户催,一边让 AI 猜刚才改了哪些文件,然后在正式环境上现改现试。

那不叫回退,那是又一次抢修,而且是在最慌的时候干最危险的活。

还有一件特别容易漏的:谁保证你的程序一直活着。

很多人上线,是在服务器上敲一条命令把项目跑起来的,终端一关,进程就跟着没了。

也有人跑着一直好好的,服务器重启了一次——厂商维护、或者自己升配——之后网站再没起来。

这两件事看着不一样,其实是同一个问题:没人负责看着这个进程。

所以你要把服务交给系统或者面板去托管,让它满足两件事:进程意外退出了能自动拉起来,机器重启了能自动跟着启动。

Linux 上干这件事的东西叫 systemd,面板里一般就叫“守护进程”或者“开机自启”,你只要认得这两个词,就知道该让 AI 配哪儿。

配完一定要真的重启一次服务器去验证,别只听 AI 说“已经配好了”。

第三,数据要定期备份。

备份不能和原数据放在同一块硬盘上,而且一定要真的试一次恢复——文件在,不代表它真能恢复。

至于多久备一次、要不要做得更重,别凭感觉定,先回答两个问题。

一个是:这个项目最多能接受丢多少数据。

丢一天的还能忍,那一天一次就够;一小时都不能丢,那就得更勤,甚至做实时同步。

另一个是:它最多能停多久。

允许停半天,你临时手动恢复来得及;只能停十分钟,那你得提前把恢复步骤写成一份照着就能做的清单。

这两个问题在专业里是有名字的:能接受丢多少数据叫 RPO,能接受停多久叫 RTO。

名字你不用记,但这两个数你必须自己有答案,因为所有备份方案,本质上都是在拿钱和麻烦,去换这两个数字。

数字定了,方案自己就出来了;不先问这两句,你要么备得根本不够,要么花了钱最后还是救不回来。

第四,账单要有闸门。

密钥被盗刷、流量被人恶意打,都是在你看不见的地方一点点累积,等你收到账单就晚了。

所以消费预警和用量提醒,上线后顺手就打开。

这四条不用每次都靠你临时想起来,让 AI 按你项目的真实情况,把它们整理成一张长期照着做的维护清单:

“按我这个项目的真实情况,把上线后要长期做的事整理成一张清单,分成每天看一眼、每周做一次、每月做一次、还有到期前必须处理的,每条写清楚在哪儿做、怎么算做完了。”

最后那一类你千万别漏:证书、域名、服务器续费,全在里面,它们都是到期那天才找你。

清单上哪句你没看懂,就让它用大白话重讲一遍,别装懂。

四、最后

上线这后半段,决定成败的不是你会不会敲命令,而是三件事:路你接不接得住、门有没有关上、跑起来之后有没有人看着。

这三件都不需要你会写代码。

做到了,哪天你要更新、要备份、要查一个打不开的原因,你不会再两眼一抹黑——这套东西是你自己挑的,你知道它长什么样。

最后说句实在的。

上线之前,AI 是你的加速器;上线之后,你才是这个项目唯一的责任人。

你可以不懂技术,但服务器不认这个,用户也不认——网站挂了,没人关心是谁写的代码。

所以今天讲的这些,没有一条是让你去当运维。

是让你在把项目交出去、给真实的人用之前,手里至少有三样东西:一条你自己看得懂的路,一份关好门的确认,一张有人在看着它的清单。

有这三样,你这个项目才算真的活着,而不是先跑着,等哪天悄悄死掉。

该内容为@openbeetles原创内容,未经授权,禁止转载,违者必究!