谈谈部署中断问题
前端更新部署中断(用户访问中断/白屏/404)
docker如何解决“部署中断”
-
使用
docker rm -f会导致线上服务挂掉 -
虽然
docker rm -f到docker run成功的中间过程可能只有几秒钟,但这几秒钟内:- 服务完全中断: 用户访问你的域名会看到
502 Bad Gateway或连接被拒绝。 - Nuxt 初始化时间: Nuxt (Node.js) 启动后还需要几秒钟来初始化。这意味着实际的中断时间是:删除时间 + 创建时间 + 程序启动时间
- 服务完全中断: 用户访问你的域名会看到
双容器切换
- 双容器切换,A容器8081 A副本8082,更新时进行A副本进行构建 构建完成后执行A副本 然后检查127.0.0.1:8082/healthy 存活则在负载均衡那写upstream为A副本8082 进行reload sleep个30秒然后A容器8081 rm
- 滚动更新 就是搞多副本更新A再更B,更到最后切网关
K8s 滚动更新
- 会先启一个新 Pod,等新 Pod 准备好了(Ready),再删一个旧 Pod,用户完全无感知
nginx软链接版本部署
目录结构示例:
/var/www/app/releases/20260305_120301/(每次部署一个新目录)/var/www/app/current -> releases/20260305_120301(线上永远指向 current)
使用软链接切换版本
-
Nginx 的目录只保持为
/app/current -
但你只需要把它“指向”不同版本即可完成版本切换。
-
新版本上线时 不需要修改 Nginx 配置
-
不需要覆盖旧文件
-
只需要修改软链接指向即可完成发布
-
/app/current → 指向一个真正的文件夹,比如:/releases/v1
Nginx 访问
/app/current,实际访问的是/releases/v1
ln -sfn /releases/v1 /app/current