ECS部署的“本地好了,线上还是旧的”困局

本地改了合规拦截逻辑,测试通过,部署到线上发现还是旧的——排查了两小时,发现代码没push。更惨的是,改了ECS上的文件忘了同步回Git,下次部署直接冲突。

核心问题:本地和线上不一致

这是个人项目部署中最常见的问题。表现为:

 
现象根本原因
合规拦截本地1次、线上2次 修复代码没commit/push,ECS仍是旧代码
RF v2.2已训练,线上像旧模型 GitHub有代码,ECS没pull + 没--build
改了ECS上的文件,本地没有 在服务器上手改文件,没同步回Git

正确部署流程

text
本地改完代码 → git push → ECS上git pull → docker compose up --build -d --force-recreate

关键点: 不要只用docker compose restart——它不会更新镜像里的代码和前端打包。

如果git pull冲突了

bash
# 报错:Your local changes would be overwritten by merge
# 原因:之前在ECS上手改了文件

# 如果GitHub已是正确版本,直接丢弃本地改动
git checkout -- docker-compose.yml
git checkout -- Dockerfile
git checkout -- vite.config.ts
git pull

两个常见的错误习惯

  • 习惯一:在ECS上用vim改文件 → 改完没同步回Git,下次pull直接冲突。正确做法:本地改、本地测、push、ECS pull。

  • 习惯二:只重启容器不重新构建docker compose restart不会更新镜像。如果改了代码,需要用up --build

GitHub在ECS上pull失败

text
Failed to connect to github.com port 443: Connection timed out

解决方案:

  • 换镜像源再pull

  • 或本地git archive打包上传到ECS

踩坑总结

代码的唯一来源应该是Git仓库。 ECS上的任何改动都应该先回到本地,走完整的push-pull-build流程。在ECS上手改文件,迟早会出问题。

posted @ 2026-06-26 17:00  竹雨禅月  阅读(9)  评论(0)    收藏  举报