更新
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
#!/usr/bin/env bash
|
||||
# 安装 Playwright Chromium(Linux 宝塔/无桌面服务器)
|
||||
# 用法: bash /www/wwwroot/douyin/backend/baota_playwright.sh
|
||||
set -euo pipefail
|
||||
|
||||
BACKEND="$(cd "$(dirname "$0")" && pwd)"
|
||||
ROOT="$(cd "$BACKEND/.." && pwd)"
|
||||
# shellcheck source=lib/resolve_python.sh
|
||||
source "$BACKEND/lib/resolve_python.sh"
|
||||
|
||||
PY="${KEFU_PYTHON:-}"
|
||||
if [ -z "$PY" ]; then
|
||||
PY="$(resolve_python "$BACKEND" "$ROOT")"
|
||||
fi
|
||||
|
||||
export PLAYWRIGHT_BROWSERS_PATH="${PLAYWRIGHT_BROWSERS_PATH:-$ROOT/playwright-browsers}"
|
||||
mkdir -p "$PLAYWRIGHT_BROWSERS_PATH"
|
||||
chown -R www:www "$PLAYWRIGHT_BROWSERS_PATH" 2>/dev/null || true
|
||||
|
||||
echo "========================================"
|
||||
echo " Playwright Chromium 安装"
|
||||
echo " Python: $PY"
|
||||
echo " 目录: $PLAYWRIGHT_BROWSERS_PATH"
|
||||
echo "========================================"
|
||||
|
||||
echo "[1/4] 安装系统依赖(需 root)..."
|
||||
if [ "$(uname -s)" = "Linux" ]; then
|
||||
if [ "$(id -u)" -eq 0 ]; then
|
||||
# 优先用 dnf(阿里云 Linux 3 / Anolis / RHEL 8+),回退到 yum
|
||||
DNF=""
|
||||
if command -v dnf &>/dev/null; then
|
||||
DNF="dnf"
|
||||
elif command -v yum &>/dev/null; then
|
||||
DNF="yum"
|
||||
fi
|
||||
|
||||
if [ -n "$DNF" ]; then
|
||||
# Chromium 运行库 + Xvfb 虚拟显示(无桌面服务器跑有头浏览器扫码登录必需)
|
||||
"$DNF" install -y atk at-spi2-atk cups-libs libdrm libXcomposite libXdamage \
|
||||
libXrandr mesa-libgbm pango alsa-lib nss nspr libxkbcommon \
|
||||
libXScrnSaver gtk3 xorg-x11-server-Xvfb 2>/dev/null || true
|
||||
elif command -v apt-get &>/dev/null; then
|
||||
apt-get update
|
||||
apt-get install -y libnss3 libnspr4 libatk1.0-0 libatk-bridge2.0-0 \
|
||||
libcups2 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 \
|
||||
libxfixes3 libxrandr2 libgbm1 libpango-1.0-0 libcairo2 libasound2 \
|
||||
libatspi2.0-0 libxshmfence1 xvfb 2>/dev/null || true
|
||||
fi
|
||||
"$PY" -m playwright install-deps chromium || true
|
||||
else
|
||||
echo " 非 root,跳过 install-deps / Xvfb(若启动失败请 sudo 执行本脚本)"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "[2/4] 安装 pyvirtualdisplay(自动拉起 Xvfb 虚拟显示)..."
|
||||
# requirements.txt 已含 pyvirtualdisplay;这里兜底确保 venv 内已安装
|
||||
"$PY" -m pip show pyvirtualdisplay &>/dev/null \
|
||||
|| "$PY" -m pip install "pyvirtualdisplay==3.0" || true
|
||||
|
||||
echo "[3/4] 下载 Chromium..."
|
||||
"$PY" -m playwright install chromium
|
||||
|
||||
echo "[4/4] 校验..."
|
||||
CHROME=$(find "$PLAYWRIGHT_BROWSERS_PATH" -name chrome -type f 2>/dev/null | head -1)
|
||||
if [ -n "$CHROME" ] && [ -x "$CHROME" ]; then
|
||||
echo "[OK] 浏览器: $CHROME"
|
||||
chmod +x "$CHROME" 2>/dev/null || true
|
||||
chown -R www:www "$PLAYWRIGHT_BROWSERS_PATH" 2>/dev/null || true
|
||||
else
|
||||
echo "[错误] 未找到 chrome 可执行文件,请检查网络或磁盘空间"
|
||||
ls -la "$PLAYWRIGHT_BROWSERS_PATH" 2>/dev/null || true
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo
|
||||
# 校验虚拟显示链路:无桌面 Linux 上扫码登录依赖 Xvfb + pyvirtualdisplay
|
||||
if [ "$(uname -s)" = "Linux" ] && [ -z "${DISPLAY:-}" ]; then
|
||||
XVFB_OK=0
|
||||
command -v Xvfb &>/dev/null && XVFB_OK=1
|
||||
PVD_OK=0
|
||||
"$PY" -c "import pyvirtualdisplay" &>/dev/null && PVD_OK=1
|
||||
if [ "$XVFB_OK" = "1" ] && [ "$PVD_OK" = "1" ]; then
|
||||
echo "[OK] Xvfb + pyvirtualdisplay 就绪,云端可直接点「登录」用手机扫码"
|
||||
else
|
||||
echo "[警告] 扫码登录所需的虚拟显示未就绪:"
|
||||
[ "$XVFB_OK" = "0" ] && echo " - 缺少 Xvfb,请 root 执行: dnf install -y xorg-x11-server-Xvfb"
|
||||
[ "$PVD_OK" = "0" ] && echo " - 缺少 pyvirtualdisplay,请执行: $PY -m pip install pyvirtualdisplay==3.0"
|
||||
echo " 或改用: xvfb-run -a bash $ROOT/start_web.sh 启动服务"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "请将以下写入 .env 或宝塔环境变量:"
|
||||
echo " PLAYWRIGHT_BROWSERS_PATH=$PLAYWRIGHT_BROWSERS_PATH"
|
||||
echo
|
||||
echo "安装完成,重启项目: bash $BACKEND/baota_start.sh"
|
||||
Reference in New Issue
Block a user