51 lines
2.0 KiB
Bash
Executable File
51 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# 暴力同步:先完全删除服务端【代码】再重新上传,确保不留旧源码/旧 __pycache__(杜绝 404/旧逻辑)
|
|
# 保留服务端【运行时数据/配置/依赖】:opc.db*、uploads/、.venv、.env、.python-version、nginx 备份
|
|
set -euo pipefail
|
|
|
|
REMOTE_HOST="${1:-TenXun-Ubuntu}"
|
|
REMOTE_DIR="/root/server"
|
|
|
|
SRC="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/server/"
|
|
|
|
if [[ ! -d "$SRC" ]]; then
|
|
echo "错误:找不到源目录 $SRC" >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "========== 步骤1/2:删除服务端旧代码(保留数据/配置/依赖) =========="
|
|
ssh -o BatchMode=yes "$REMOTE_HOST" "
|
|
set -e
|
|
cd $REMOTE_DIR
|
|
# 删除代码文件与目录(这些会重新上传)
|
|
rm -rf app
|
|
rm -f main.py pyproject.toml uv.lock README.md SpXvScDiDT.txt
|
|
# 彻底清理所有 python 编译缓存与字节码(-prune 避免 find 递归进被删目录报错)
|
|
find . -type d -name '__pycache__' -prune -exec rm -rf {} + 2>/dev/null || true
|
|
find . -name '*.pyc' -delete 2>/dev/null || true
|
|
find . -name '*.pyo' -delete 2>/dev/null || true
|
|
# 连带清 .venv 里的编译缓存(避免旧字节码污染)
|
|
find .venv -type d -name '__pycache__' -prune -exec rm -rf {} + 2>/dev/null || true
|
|
echo ' 已删除旧代码 + 全部 __pycache__/pyc(保留 opc.db / uploads / .venv 依赖 / .env 等)'
|
|
"
|
|
|
|
echo "========== 步骤2/2:上传本地最新代码 =========="
|
|
rsync -avz --progress --compress \
|
|
--exclude='.venv/' \
|
|
--exclude='__pycache__/' \
|
|
--exclude='*.pyc' \
|
|
--exclude='*.pyo' \
|
|
--exclude='opc.db' \
|
|
--exclude='opc.db-wal' \
|
|
--exclude='opc.db-shm' \
|
|
--exclude='uploads/' \
|
|
"$SRC" "${REMOTE_HOST}:${REMOTE_DIR}/"
|
|
|
|
echo "========== 完成 =========="
|
|
echo "请在服务端重启后端(先彻底清缓存再加载新代码):
|
|
pkill -f 'uvicorn|main.py' || true
|
|
find $REMOTE_DIR -type d -name '__pycache__' -prune -exec rm -rf {} + 2>/dev/null || true
|
|
find $REMOTE_DIR -name '*.pyc' -delete 2>/dev/null || true
|
|
cd $REMOTE_DIR && nohup uv run main.py > /root/server.log 2>&1 &
|
|
"
|