#!/bin/bash set -eu # ============================================ # 微信销售管理系统 - 一键远程部署 # 用法: bash deploy.sh # ============================================ REMOTE_HOST="154.8.162.18" REMOTE_USER="root" REMOTE_PATH="/opt/wxsales" REMOTE_DEMO="${REMOTE_PATH}/demo" echo "==========================================" echo " 微信销售管理系统 - 远程部署" echo "==========================================" echo " 目标: ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH}" echo "" # 1. Git 提交推送 echo "[1/5] Git 提交推送..." cd "$(dirname "$0")" if [ -n "$(git status --porcelain)" ]; then git add -A git commit -m "deploy: $(date '+%Y-%m-%d %H:%M') 部署更新" git push origin main echo " ✓ 代码已推送" else echo " - 无本地改动,跳过提交" fi # 2. 同步代码到远程 echo "" echo "[2/5] 同步代码到远程服务器..." ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "mkdir -p ${REMOTE_PATH}" rsync -avz --delete --exclude='db/data' --exclude='db/socket' --exclude='__pycache__' \ --exclude='.git' --exclude='web.log' --exclude='.run.pid' \ "$(dirname "$0")/demo/" "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DEMO}/" echo " ✓ 代码已同步" # 3. 远程执行数据库迁移 + 重启服务 echo "" echo "[3/5] 远程数据库迁移..." ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} bash ${REMOTE_DEMO}/deploy_remote.sh echo " ✓ 数据库迁移完成" # 4. 重启 Web 服务 echo "" echo "[4/5] 重启 Web 服务..." ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} " # 停止旧进程 if lsof -ti:8770 >/dev/null 2>&1; then kill \$(lsof -ti:8770) 2>/dev/null || true sleep 1 fi # 启动新进程 cd ${REMOTE_DEMO} nohup /usr/bin/python3 -m uvicorn web.server:app --host 127.0.0.1 --port 8770 \ > ${REMOTE_DEMO}/web.log 2>&1 & sleep 2 if curl -s http://127.0.0.1:8770/api/dashboard >/dev/null 2>&1; then echo ' ✓ Web 服务启动成功' else echo ' ✗ Web 服务启动失败' cat ${REMOTE_DEMO}/web.log | tail -20 exit 1 fi " # 5. 验证 echo "" echo "[5/5] 验证..." if curl -s --max-time 10 http://sale.all8ai.top/api/products | grep -q '"id"' 2>/dev/null; then echo " ✓ 域名访问正常: http://sale.all8ai.top" else echo " ⚠ 域名访问异常,请检查 Nginx 配置" fi PRODUCT_COUNT=$(ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} \ "curl -s http://127.0.0.1:8770/api/products | python3 -c 'import sys,json; print(len(json.load(sys.stdin)))'" 2>/dev/null || echo "?") echo " ✓ 产品数量: ${PRODUCT_COUNT}" echo "" echo "==========================================" echo " ✓ 部署完成!" echo "==========================================" echo " 访问地址: http://sale.all8ai.top" echo " API 文档: http://sale.all8ai.top/docs" echo "=========================================="