105 lines
3.3 KiB
Bash
105 lines
3.3 KiB
Bash
#!/usr/bin/env bash
|
||
# 使用宝塔「Python环境管理」安装的 Python 完成项目配置
|
||
# 用法: bash /www/wwwroot/douyin/backend/baota_use_panel_python.sh
|
||
set -euo pipefail
|
||
|
||
BACKEND="$(cd "$(dirname "$0")" && pwd)"
|
||
ROOT="$(cd "$BACKEND/.." && pwd)"
|
||
|
||
echo "========================================"
|
||
echo " 宝塔 Python 环境配置"
|
||
echo "========================================"
|
||
echo
|
||
|
||
# 扫描宝塔 Python(环境管理 / Python项目)
|
||
PY=""
|
||
for base in \
|
||
/home/www/server/pyporject_evn/versions \
|
||
/www/server/pyporject_evn/versions \
|
||
/www/server/panel/pyenv/versions; do
|
||
[ -d "$base" ] || continue
|
||
for ver_dir in $(ls -d "$base"/* 2>/dev/null | sort -V -r); do
|
||
for name in python3 python; do
|
||
candidate="$ver_dir/bin/$name"
|
||
[ -x "$candidate" ] || continue
|
||
ver="$("$candidate" -V 2>&1 | awk '{print $2}')"
|
||
echo "[发现] $candidate ($ver)"
|
||
if ! "$candidate" -c "import sys; sys.exit(0 if sys.version_info>=(3,10) else 1)" 2>/dev/null; then
|
||
echo " 跳过: 版本低于 3.10"
|
||
continue
|
||
fi
|
||
if ! "$candidate" -c "import ssl" 2>/dev/null; then
|
||
echo " 跳过: 无 SSL(需在宝塔重装 Python 前先 yum install openssl-devel)"
|
||
continue
|
||
fi
|
||
PY="$candidate"
|
||
echo " -> 选用"
|
||
break 3
|
||
done
|
||
done
|
||
done
|
||
|
||
if [ -z "$PY" ]; then
|
||
echo
|
||
echo "[错误] 未找到可用的宝塔 Python 3.10+(需带 SSL)。"
|
||
echo
|
||
echo "请在宝塔面板操作:"
|
||
echo " 1) 软件商店 -> Python项目管理器 -> 环境管理"
|
||
echo " 2) SSH 先执行: yum install -y openssl openssl-devel"
|
||
echo " 3) 环境管理 -> 安装 Python 3.11"
|
||
echo " 4) 重新运行本脚本"
|
||
echo
|
||
echo "若已安装但仍无 SSL,卸载该版本后重装。"
|
||
exit 1
|
||
fi
|
||
|
||
echo
|
||
echo "[OK] 使用宝塔 Python: $PY"
|
||
"$PY" -c "import ssl; print('[OK] OpenSSL:', ssl.OPENSSL_VERSION)"
|
||
echo
|
||
|
||
export KEFU_PYTHON="$PY"
|
||
export PLAYWRIGHT_BROWSERS_PATH="${PLAYWRIGHT_BROWSERS_PATH:-$ROOT/playwright-browsers}"
|
||
|
||
echo "[1/4] 安装 Python 依赖..."
|
||
"$PY" -m pip install -U pip
|
||
"$PY" -m pip install -r "$BACKEND/requirements.txt"
|
||
echo
|
||
|
||
echo "[2/4] 创建项目 venv(可选,便于宝塔启动)..."
|
||
"$PY" -m venv "$BACKEND/.venv" --clear
|
||
"$BACKEND/.venv/bin/python" -m pip install -U pip -q
|
||
"$BACKEND/.venv/bin/pip" install -r "$BACKEND/requirements.txt"
|
||
chmod -R 755 "$BACKEND/.venv"
|
||
chown -R www:www "$BACKEND/.venv" 2>/dev/null || true
|
||
echo " venv: $BACKEND/.venv"
|
||
echo
|
||
|
||
echo "[3/4] Playwright Chromium..."
|
||
KEFU_PYTHON="$BACKEND/.venv/bin/python" bash "$BACKEND/baota_playwright.sh"
|
||
echo
|
||
|
||
echo "[4/4] 前端与 IM 依赖..."
|
||
if command -v npm &>/dev/null; then
|
||
cd "$BACKEND/rpa_engine/douyin_im/static" && npm install --no-fund --no-audit
|
||
cd "$ROOT/frontend" && npm install --no-fund --no-audit && npm run build
|
||
else
|
||
echo "[警告] 未安装 Node.js,请宝塔安装 Node 18+ 后手动 npm install"
|
||
fi
|
||
|
||
chown -R www:www "$ROOT" 2>/dev/null || true
|
||
|
||
echo
|
||
echo "========================================"
|
||
echo " 配置完成"
|
||
echo
|
||
echo " 宝塔 Python项目 设置:"
|
||
echo " 项目路径: $BACKEND"
|
||
echo " Python环境: 选环境管理里的 3.11"
|
||
echo " 启动命令: bash $BACKEND/baota_start.sh"
|
||
echo " 依赖包: $BACKEND/requirements.txt"
|
||
echo
|
||
echo " .env 添加:"
|
||
echo " PLAYWRIGHT_BROWSERS_PATH=$PLAYWRIGHT_BROWSERS_PATH"
|
||
echo "========================================"
|