文件
phonerail/rack/deploy/deploy.sh
T
zhou yang和Claude Opus 5.5 26c04ce878 机架管理前后端(rack/):FastAPI + SQLite + Vue3,经统一门户上线
- 后端 prrack:MQTT(phonerail-backend @ 127.0.0.1:1884)↔ 遥测入库 / 事件增量同步 / WebSocket 推送;
  命令白名单 + 重传同 seq;审计记门户 X-Auth-User(只绑 127.0.0.1,main.py 拒绝非回环)。
- 自动恢复:只看电流(平线 / 过低,服务器够不到手机 adb),先长按电源再断电重启,
  每小时限次后停手;默认逐台关闭。adb 探活接口 recovery.Prober 预留。
- 前端:总览 / 板子页(五路操作、电流电压曲线)/ 事件 / 操作记录 / 自动恢复;手机宽度可用。
- 部署 deploy/deploy.sh:服务器 Python 3.8 上先跑测试再替换;systemd phonerail-rack,每日备份。
- 门户应用 id 16、key rack(phonerail 已被需求文档站占用),授权 admin + staff。

测试 26 例(本机 3.14 / 服务器 3.8 均过)。线上板 b81f3fc9c8bc 在线,WS 经门户 101 + 1 条/s 遥测。

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-27 12:33:28 +08:00

41 行
1.9 KiB
Bash
原始文件 Blame 文件历史

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
#!/usr/bin/env bash
# 本机 Git Bash 里跑:构建前端 → 传后端与 dist → 装依赖 → 服务器上跑测试 → 重启服务。
# bash rack/deploy/deploy.sh (默认走 home.example;内网通时 HOST=10.5.5.13)
set -euo pipefail
HOST=${HOST:-home.example}
R=/root/phonerail-rack
cd "$(dirname "$0")/.."
(cd frontend && pnpm build)
ssh "$HOST" "mkdir -p $R/backend $R/frontend $R/data $R/deploy"
tar --exclude='__pycache__' --exclude='.pytest_cache' --exclude='*.db*' -C backend -cf - . \
| ssh "$HOST" "rm -rf $R/backend.new && mkdir $R/backend.new && tar -xf - -C $R/backend.new"
tar -C frontend -cf - dist | ssh "$HOST" "rm -rf $R/frontend/dist.new && mkdir -p $R/frontend/dist.new && tar -xf - -C $R/frontend/dist.new --strip-components=1"
tar -C deploy -cf - . | ssh "$HOST" "tar -xf - -C $R/deploy"
ssh "$HOST" bash -s <<REMOTE
set -euo pipefail
cd $R
[ -x venv/bin/python ] || python3 -m venv venv
venv/bin/pip install -q -U pip 2>/dev/null
venv/bin/pip install -q -r backend.new/requirements.txt pytest httpx 2>&1 | grep -v InsecureRequestWarning || true
# 先在新代码上跑测试(Python 3.8 + 锁定版本),不过就不换上去
(cd backend.new && ../venv/bin/python -m pytest -q tests 2>&1 | tail -3)
rm -rf backend.old && [ -d backend ] && mv backend backend.old || true
mv backend.new backend
rm -rf frontend/dist.old && [ -d frontend/dist ] && mv frontend/dist frontend/dist.old || true
mv frontend/dist.new frontend/dist
chmod +x deploy/backup.sh
cp deploy/phonerail-rack.service /etc/systemd/system/phonerail-rack.service
echo '40 3 * * * root /root/phonerail-rack/deploy/backup.sh' > /etc/cron.d/phonerail-rack-backup
touch /var/log/phonerail-rack.log
systemctl daemon-reload
systemctl enable -q phonerail-rack
systemctl restart phonerail-rack
sleep 3
systemctl is-active phonerail-rack
curl -s http://127.0.0.1:7764/api/health; echo
ss -tlnp | grep 7764
REMOTE