fix(ci): 部署链路重构为拉取式,修复工作流问题
Publish Mini Program Dev Version / publish (push) Canceled after 0s
Build and Deploy Server / build (push) Canceled after 0s

- deploy.sh: 目录级原子切换(current.new/current.old)替代 rm -rf 空窗式替换;
  健康检查改为轮询 /api/version HTTP 接口;失败自动回滚上一版本
- 新增 deploy-watch.sh: 服务器本地 systemd timer 轮询 /ci-artifacts 产物指纹,
  发现新版本自动部署——CI 与 AI 不再需要 SSH 到服务器执行任何命令
- server-deploy.yml: 部署包补入 web/ 后台静态资源;移除永不生效的前端构建死代码;
  通知文案如实改为'构建成功'(部署由服务器侧 watcher 完成)
- miniapp-preview.yml: 移除无意义的 --runInBand 测试参数
- 新增 PULL_DEPLOY.md 一次性安装文档(管理员手工执行)
This commit is contained in:
gouki
2026-08-09 00:10:45 +00:00
parent f90b7c7764
commit ec55a1d536
6 changed files with 453 additions and 43 deletions
+68
View File
@@ -0,0 +1,68 @@
# 拉取式部署配置(一次性)
> 安全原则:CI 只构建、不部署;任何 AI 与流水线都不允许 SSH 到服务器执行命令。
> 部署由服务器本地的 watcher 监听 CI 产物目录自动完成。本文档的所有命令由**管理员本人**在服务器上执行一次。
## 工作原理
```
push main → Gitea Actions 构建 → 产物写入 /ci-artifactsrunner 与宿主同机)
服务器本地 systemd timer 每分钟运行 deploy-watch.sh → 发现新 sha256 → 执行 deploy.sh
目录级原子切换 → docker restart → HTTP 健康检查 → 失败自动回滚
```
## 一次性安装(管理员手工执行)
```bash
# 1. 放置脚本
sudo mkdir -p /opt/lunar/scripts
sudo cp deploy.sh deploy-watch.sh /opt/lunar/scripts/ # 从仓库 .gitea/scripts/ 复制
sudo chmod +x /opt/lunar/scripts/*.sh
# 2. systemd timer(每分钟轮询)
sudo tee /etc/systemd/system/lunar-deploy-watch.service > /dev/null <<'EOF'
[Unit]
Description=Lunar pull-based deploy watcher
[Service]
Type=oneshot
ExecStart=/bin/bash /opt/lunar/scripts/deploy-watch.sh
EOF
sudo tee /etc/systemd/system/lunar-deploy-watch.timer > /dev/null <<'EOF'
[Unit]
Description=Run lunar deploy watcher every minute
[Timer]
OnBootSec=1min
OnUnitActiveSec=1min
[Install]
WantedBy=timers.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now lunar-deploy-watch.timer
```
## 验证
```bash
systemctl list-timers | grep lunar
tail -f /opt/lunar/deploy-watch.log
curl -s http://localhost:8080/api/version
```
## 生产容器必备环境变量
在 1Panel 容器配置中设置(切勿写入仓库):
- `DB_HOST` / `DB_PORT` / `DB_USER` / `DB_PASSWORD` / `DB_NAME`
- `JWT_SECRET`(必须为强随机值,禁止使用默认值)
- `SERVER_ENV=production`
- `MINI_APP_ID` / `MINI_APP_SECRET`(微信登录)
- `WECHAT_PAY_APIKEY`(支付回调验签,未配置时回调接口直接返回 503)
- `ADMIN_PASSWORD`(管理后台登录,未配置时后台登录禁用)
## 回滚
deploy.sh 健康检查失败会自动回滚;手工回滚使用 `/opt/lunar/backups/` 下的备份包重新执行 deploy.sh。