DevOps
DevOps(开发 Development 与运维 Operations 的结合)
核心:CI/CD 流水线(Pipeline)
缘起
我发现一个有意思的事情
照我们现在的部署方式 好像只需要把变动的文件传上去 补一下依赖 重启一下就能更新到最新状态? 而不需要重新打包做一堆繁琐的工作 那这样的话 是不是意味着 我本地写完项目 git push 然后服务器写一个检测到变化就git pull的脚本 可以实现本地改完 直接push 线上就改了 而无需手动打包运维?
你发现了一个非常本质且核心的运维思路!你所描述的“本地写完 git push,服务器收到通知就 git pull 并自动重启”——这就是现代软件工程里大名鼎鼎的 CI/CD(持续集成 / 持续部署) 或者称之为自动化部署的最初级形态!
针对你提到的这个想法,在这个项目里,需要分后端和前端两部分来看:
1. 对于后端(Python FastAPI)—— 完全可行,和你猜的一模一样
Python 是解释型语言,没有“编译打包”这个概念。所以你本地写完 routers/match.py,直接 Git 传上去。服务器上只要 git pull 把最新的 .py 覆盖掉,然后宝塔的 Python 管理器(或者使用 PM2/Supervisor)执行一个 Restart 重启指令,瞬间就全服更新了。你确实不需要做任何繁琐的工作!
2. 对于前端(Next.js)—— 差了一小步
如果你留意我们 readme.md 的第三节【前端部署】:
1. 在你的**电脑本地**,在 `frontend` 目录下运行 `npm run build`,完成 Next.js 的生产编译。
2. 将打包的文件 `.next` 上传至服务器...
因为前端用了 TypeScript 和 React,浏览器看不懂它们,它必须经过打包压缩成纯粹的 HTML/JS/CSS(即生成的 .next 隐形文件夹)。
如果你只在服务器 git pull 更新了 page.tsx 代码并重启 PM2,页面是不会变的,因为线上跑的是 .next 里面的编译产物,甚至会因为代码不同步崩掉。除非你在服务器上跑的是类似于本地的 npm run dev,但这极为消耗服务器性能,绝对不能在生产环境用。
如何完美实现你的“终极偷懒”推测?
你的思路完全没问题,只需要在这个自动化脚本里加半行打包命令而已!
你可以在宝塔面板里安装一个叫 【WebHook】(免费插件)。把它配上你的 Github / Gitee 仓库,一旦你本地按下了 git push,Github 就会悄悄向服务器发送一个更新信号,触发服务器自动执行一段 Bash 脚本。这段脚本的内容大概是这样的:
# 1. 拉取你刚 push 的最新代码
git pull origin main
# 2. 【后端】:更新可能有变动的依赖,重启进程
cd api
pip install -r requirements.txt
# 假设你的项目在pm2叫 api-server,重启它
pm2 restart api-server
# 3. 【前端】:安装依赖,并在服务器端进行“打包”,随后重启
cd ../frontend
npm install
npm run build # 核心点:让服务器帮你干打包的苦力活!
pm2 restart next-server
这样带来的改变是什么?
以前:本地改前端 -> 本地慢慢打包(卡电脑) -> 用 FTP 把 几十MB 的文件传到云服务器 -> 重启。
现在:本地爽快地敲代码 -> git add . -> git commit -> git push -> 关电脑,去喝咖啡。
服务器会乖乖地自己拉代码、自己把 .tsx 打包成压缩包,自己重启。这就是所谓的**流水线(Pipeline)**部署。你的直觉非常准,很多项目组花几十万搭 DevOps 就是为了全自动化实现你脑子里的这个流程!
组内导航:⬅️ 产品经理(PM) | 🏠 00-DevOps与运维 | ➡️ 从手动部署到自动呼吸:一场改变世界的运维革命
💬 评论