Dish_Recognition/dish_server/deploy_tpweb.sh

78 lines
2.3 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# 在云服务器执行:
# cd /home/cpsb/project/dish_server && bash deploy_tpweb.sh
#
# 正确结构:
# 磁盘: /data/tpweb/BASE/REQ/xxx.jpg
# 访问: https://cpsb.ruimeida.cc/tpweb/BASE/REQ/xxx.jpg
# 错误结构(多一层 media):
# /data/tpweb/media/BASE/... ← 会导致 HTTPS 404/500
set -euo pipefail
APP_DIR="/home/cpsb/project/dish_server"
MEDIA_DIR="/data/tpweb"
PUBLIC_BASE="https://cpsb.ruimeida.cc/tpweb"
cd "$APP_DIR"
echo "[1/6] 准备目录 $MEDIA_DIR"
sudo mkdir -p "$MEDIA_DIR"
if id -u cpsb >/dev/null 2>&1; then
sudo chown -R cpsb:cpsb "$MEDIA_DIR"
fi
sudo chmod 755 "$MEDIA_DIR"
echo "[2/6] 若存在错误子目录 $MEDIA_DIR/media,迁移到上一级"
if [ -d "$MEDIA_DIR/media" ]; then
echo " 发现 $MEDIA_DIR/media ,开始迁移..."
# 把 media 下的基地目录挪到 /data/tpweb/
shopt -s dotglob nullglob
for item in "$MEDIA_DIR/media"/*; do
name="$(basename "$item")"
if [ -e "$MEDIA_DIR/$name" ]; then
echo " 合并: $item -> $MEDIA_DIR/$name"
cp -a "$item"/. "$MEDIA_DIR/$name"/ 2>/dev/null || true
else
echo " 移动: $item -> $MEDIA_DIR/$name"
mv "$item" "$MEDIA_DIR/$name"
fi
done
rmdir "$MEDIA_DIR/media" 2>/dev/null || mv "$MEDIA_DIR/media" "$MEDIA_DIR/media.bak.$(date +%s)"
echo " 迁移完成"
fi
echo "[3/6] 写入 .env(DISH_MEDIA_ROOT=$MEDIA_DIR,不要带 /media)"
cat > "$APP_DIR/.env" <<EOF
DISH_API_HOST=0.0.0.0
DISH_API_PORT=9100
DISH_MEDIA_ROOT=$MEDIA_DIR
DISH_MEDIA_PUBLIC_BASE=$PUBLIC_BASE
EOF
cat "$APP_DIR/.env"
echo "[4/6] 停止旧进程"
pkill -f "$APP_DIR/main.py" 2>/dev/null || true
pkill -f "python.*main.py" 2>/dev/null || true
fuser -k 9100/tcp 2>/dev/null || true
sleep 1
echo "[5/6] 启动"
if [ -x "$APP_DIR/.venv/bin/python" ]; then
PY="$APP_DIR/.venv/bin/python"
elif command -v python3 >/dev/null 2>&1; then
PY=python3
else
PY=python
fi
nohup "$PY" "$APP_DIR/main.py" > /tmp/dish_server.log 2>&1 &
sleep 2
echo "[6/6] 探活"
curl -sS "http://127.0.0.1:9100/api/health" || true
echo
echo "---- 期望 ----"
echo " media_root = $MEDIA_DIR"
echo " public_base = $PUBLIC_BASE"
echo " 目录示例: ls $MEDIA_DIR (应直接看到 BASE_*/TEST,而不是 media/)"
echo "日志: /tmp/dish_server.log"