FROM python:3.11-slim # 安装 uv 和 Lightpanda 下载所需的基础工具。 RUN apt-get update && apt-get install -y curl ca-certificates tar gzip ffmpeg \ && curl -LsSf https://astral.sh/uv/install.sh | sh \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* ENV PATH="/root/.local/bin:$PATH" # Lightpanda 配置(browser_mcp_plugin 使用) ENV LIGHTPANDA_BINARY="/usr/local/bin/lightpanda" ENV LIGHTPANDA_AUTOSTART="true" ENV LIGHTPANDA_PORT="9222" # HuggingFace 缓存目录(CPU-only Space 部署) ENV HF_HOME="/app/data/huggingface" ENV HF_HUB_CACHE="/app/data/huggingface/cache" ENV HF_HUB_ENABLE_HF_TRANSFER="1" # CPU-only 环境约束 ENV CUDA_VISIBLE_DEVICES="" WORKDIR /app # 安装 Python 依赖。 COPY pyproject.toml uv.lock ./ RUN uv sync --frozen --no-dev # 安装 Lightpanda 浏览器二进制(nightly release)。 # 说明:官方不提供 Windows 二进制;Linux x86_64 与 glibc 兼容; # musl 系统(Alpine)需自行编译。 RUN curl -fL -o /usr/local/bin/lightpanda \ https://github.com/lightpanda-io/browser/releases/download/nightly/lightpanda-x86_64-linux \ && chmod +x /usr/local/bin/lightpanda \ && /usr/local/bin/lightpanda version || echo "lightpanda installed (version probe failed)" # 复制前端构建产物(线下已构建)。 COPY dist/frontend/ ./dist/frontend/ # 复制应用代码。 COPY app/ ./app COPY plugins/ ./plugins # 清理 Python 字节码缓存(避免镜像缓存导致 import 旧路径) RUN find /app -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true \ && find /app -name "*.pyc" -delete 2>/dev/null || true EXPOSE 7860 CMD ["uv", "run", "uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "7860", "--proxy-headers", "--forwarded-allow-ips", "*"]