每次一有想在主页上加点什么的念头就去 build,结果中间好像偶尔会有人访问。
于是 Search Console 上的分数开始一点点往下掉。
觉得这样不行,就开始思考要怎么做无停机部署。

1. 两个项目文件夹 + 两个终端
答案出乎意料地简单:开两个终端。
在一个终端里 build,另一个终端里让服务器跑着。
问题是,在同一个项目里开两个终端会产生冲突。
即使一个已经在正常运行,只要在另一个终端里开始 build,就会重新生成 .next 文件夹,从而引发内部错误,最终导致主页中断。

所以需要再多一个和现有项目一模一样的文件夹。
因为我把图片也都存成了本地文件,所以把名为 blogCopy 的复制项目改成去读取原始文件夹。
接下来只要稍微改一下 Caddy 就行了。
2. Caddy 官方文档
ChatGPT 和 Claude 好像都不太懂,不停地一起说些奇怪的方案,最后只好去看官方文档。
官方文档里的示例如下:
example.com {
reverse_proxy node1:80 node2:80 node3:80 {
health_uri /healthz
lb_try_duration 5s
}
}但这个是把请求平均分配到三个节点上的,需要用别的方式。
AI 一直执着于下面这种写法,但一放进去 reverse proxy 就直接挂了。
example.com {
reverse_proxy localhost:3000 localhost:3001 {
health_uri /health
health_interval 5s
health_timeout 2s
health_status 200
}
}这个写法的问题之一,是没有定义到底哪个端口是主端口。
而且因为 Caddy 每 5 秒检查一次端口,所以启动后 5 秒之内是没法正常连到正确端口上的。
所以干脆改成手动指定。
example.com {
reverse_proxy localhost:3000 localhost:3001 {
lb_policy first
fail_duration 20s
max_fails 2
}
}就改成通过读取用户访问失败来切换端口的方式。
这样一来就运作得很好。
3. 后记
现在总算可以尽情(?)build 了。
以前一边 build 一边报错的时候,总觉得是不是把服务器停太久了,心里挺忐忑的。
以后应该不会再有这种事了。
每天都在学习,但要学的东西还在不断冒出来,真是神奇。







댓글을 불러오는 중...