#!/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 </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