#!/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" </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"