文件
chengduzhongchuliang/ops

推送自动部署

服务器每 60 秒检查两个仓库的 master,发现新提交后自动发布。其他分支不发布。

  • 后端:wikiboss/chengduzhongchuliang → /www/wwwroot/grain.gynhc.com
  • 大屏:wikiboss/zhongculiang 的 HTML、css、js、assets 源文件 → 后端 public/screen

前端直接发布静态源文件,不依赖提交者是否更新 dist。后端发布 application、public、extend、addons;public/screen 由前端仓库独立管理。数据库配置、站点配置、上传文件、环境变量、runtime、vendor 和框架不覆盖。SQL 文件不会自动导入,数据库结构变更需要单独迁移。

私有前端仓库通过专用的只读 Deploy Key 拉取(SSH 2222 端口),密钥和已核对的服务器公钥仅保存在服务器状态目录,不提交到仓库。后台配置中的 key 和 known_hosts 指定对应文件;公开后端仓库使用 HTTPS 拉取。

脚本使用独立 Git 缓存,不重置网站目录内原有 Git 工作区。变更先备份,PHP 语法检查通过后逐文件替换,接口和页面检查失败会恢复本轮文件,下一轮会重试。前后端分别记录部署结果。

服务器文件:

  • 程序:/opt/grain-auto-deploy/auto_deploy.py
  • 配置:/etc/grain-auto-deploy.json
  • 版本及文件清单:/var/lib/grain-auto-deploy/backend.json、frontend.json
  • 备份:/var/lib/grain-auto-deploy/backups/
  • 日志:/var/log/grain-auto-deploy.log,以及 journalctl -u grain-auto-deploy.service

运维命令:

systemctl list-timers grain-auto-deploy.timer
systemctl start grain-auto-deploy.service
systemctl stop grain-auto-deploy.timer   # 暂停后续自动发布
systemctl start grain-auto-deploy.timer  # 恢复
tail -n 60 /var/log/grain-auto-deploy.log

首次安装需将程序、service、timer 文件安装到上述位置,写入部署配置并运行 systemctl daemon-reload 和 systemctl enable --now grain-auto-deploy.timer。程序以网站用户 www 运行,仅开放站点、状态、备份和日志的写权限,Git 工作区及线上配置额外设为只读。配置文件由 root:www 持有,权限 0640;程序及 systemd 单元仅 root 可修改。普通业务推送不会替换正在执行的部署程序。

验证:python3 -m unittest discover -s ops -p test_auto_deploy.py。