92 lines
3.0 KiB
Bash
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 "=========================================="
|