Files
wxsales/deploy.sh
T

92 lines
3.0 KiB
Bash

#!/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}
DB_HOST=127.0.0.1 DB_PORT=5432 DB_USER=postgres DB_PASSWORD=Why_701208 DB_NAME=wxchat_sales \
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 "=========================================="