78 lines
2.3 KiB
Bash
78 lines
2.3 KiB
Bash
#!/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"
|