File size: 2,249 Bytes
46a8483 f4541b6 46a8483 f4541b6 46a8483 3ab7d3d f4541b6 7921239 f4541b6 3ab7d3d f4541b6 46a8483 f4541b6 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | # notes — Hugging Face Spaces (Docker SDK)
#
# 本 Space 在容器里跑一个带图形栈的自动化服务(Xvfb 虚拟帧缓冲),
# 需要桌面浏览器环境来保证外部站点的兼容性。
#
# 鉴权(在 Space > Settings 里配):
# Secrets: RELAY_KEYS, ADMIN_KEY
# Variables: HEADLESS=false / ADMIN_ENABLED=true
#
# ----
# 用 python:3.11-slim 作为基础镜像(已包含 Python 与最小系统库)
FROM python:3.11-slim
# HF Spaces 要求: 非 root 用户运行
ENV DEBIAN_FRONTEND=noninteractive \
PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
PIP_NO_CACHE_DIR=1 \
PIP_DISABLE_PIP_VERSION_CHECK=1 \
PLAYWRIGHT_BROWSERS_PATH=/ms-playwright
# 系统依赖: Xvfb(虚拟帧缓冲) + Chromium 运行需要的共享库。
# Playwright 的 --with-deps 在 HF 镜像源常超时, 这里手动列出。
RUN apt-get update && apt-get install -y --no-install-recommends \
xvfb \
xauth \
libnss3 libnspr4 libatk1.0-0 libatk-bridge2.0-0 libcups2 \
libdbus-1-3 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 \
libxfixes3 libxrandr2 libgbm1 libpango-1.0-0 libcairo2 \
libasound2 libatspi2.0-0 libxshmfence1 \
fonts-liberation fonts-noto-cjk \
curl ca-certificates \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
# 先装 Python 依赖(单独一层, 改代码时不必重装)
COPY requirements.txt .
RUN pip install -r requirements.txt
# 装 Playwright 的 Chromium(及其额外.webkit/firmware 系统库由 --with-deps 拉入)
RUN playwright install chromium
# 应用代码
COPY server.py config.py admin.html ./
# 非 root 用户
RUN useradd -m -u 1000 huggingface \
&& mkdir -p /ms-playwright /home/huggingface/.cache \
&& chown -R huggingface /ms-playwright /app /home/huggingface/.cache
# HF 自动注入 HF_SPACE=1; server.py / config.py 据此走容器化路径。
ENV HF_SPACE=1 \
PORT=7860 \
HOME=/home/huggingface
USER huggingface
EXPOSE 7860
# 关键: 用 xvfb-run 包住 uvicorn, 给有头浏览器提供虚拟显示。
# 监听 PORT(默认 7860), HF Space 默认探测该端口。
CMD ["sh", "-c", "xvfb-run -a --server-args='-screen 0 1280x900x24' uvicorn server:app --host 0.0.0.0 --port ${PORT:-7860} --proxy-headers --forwarded-allow-ips='*'"]
|