web2api / docker /entrypoint.sh
ohmyapi's picture
feat: align hosted Space deployment with latest upstream
77169b4
#!/usr/bin/env bash
set -euo pipefail
DATA_DIR="${WEB2API_DATA_DIR:-/data}"
CONFIG_PATH="${WEB2API_CONFIG_PATH:-${DATA_DIR}/config.yaml}"
DB_PATH="${WEB2API_DB_PATH:-${DATA_DIR}/db.sqlite3}"
XVFB_ARGS="${XVFB_SCREEN_ARGS:--screen 0 1600x900x24}"
DISPLAY_NUM="${XVFB_DISPLAY_NUM:-99}"
DISPLAY_VALUE=":${DISPLAY_NUM}"
mkdir -p "${DATA_DIR}"
export HOME="${DATA_DIR}"
export WEB2API_CONFIG_PATH="${CONFIG_PATH}"
export WEB2API_DB_PATH="${DB_PATH}"
export PYTHONUNBUFFERED=1
# 清理残留的浏览器 profile,避免 Singleton* 锁导致 Chromium 认为 profile 正在被使用。
rm -rf "${HOME}/fp-data"
if [[ ! -f "${CONFIG_PATH}" ]]; then
cp /app/docker/config.container.yaml "${CONFIG_PATH}"
fi
mkdir -p "${HOME}/fp-data"
if [[ $# -gt 0 ]]; then
exec "$@"
fi
cleanup() {
if [[ -n "${XVFB_PID:-}" ]]; then
kill "${XVFB_PID}" >/dev/null 2>&1 || true
fi
}
trap cleanup EXIT INT TERM
mkdir -p /tmp/.X11-unix
rm -f "/tmp/.X${DISPLAY_NUM}-lock"
Xvfb "${DISPLAY_VALUE}" ${XVFB_ARGS} -nolisten tcp -ac &
XVFB_PID=$!
for _ in $(seq 1 100); do
if [[ -S "/tmp/.X11-unix/X${DISPLAY_NUM}" ]]; then
break
fi
sleep 0.1
done
if [[ ! -S "/tmp/.X11-unix/X${DISPLAY_NUM}" ]]; then
echo "Xvfb failed to create display ${DISPLAY_VALUE}" >&2
exit 1
fi
export DISPLAY="${DISPLAY_VALUE}"
exec python -u /app/main.py