跳到主要内容

谈谈部署中断问题

前端更新部署中断(用户访问中断/白屏/404)

docker如何解决“部署中断”​

  • 使用docker rm -f 会导致线上服务挂掉

  • 虽然 docker rm -f 到 docker run 成功的中间过程可能只有几秒钟,但这几秒钟内:

    1. 服务完全中断: 用户访问你的域名会看到 502 Bad Gateway 或 连接被拒绝。
    2. 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

bash
ln -sfn /releases/v1 /app/current