# 使用 Python 3.12 官方轻量版 FROM python:3.12-slim # 设置环境变量 # PYTHONUNBUFFERED: 保证日志实时输出,不会被缓存 # PYTHONDONTWRITEBYTECODE: 不生成 .pyc 文件,保持镜像整洁 ENV PYTHONUNBUFFERED=1 \ PYTHONDONTWRITEBYTECODE=1 \ HOME=/home/user # 创建一个 UID 为 1000 的非 root 用户(Hugging Face 强制要求) RUN useradd -m -u 1000 user # 设置工作目录 WORKDIR $HOME/src # 将用户本地库路径加入环境变量 PATH ENV PATH="$HOME/.local/bin:$PATH" # 预先创建数据目录并设置所有权(由 root 执行,因为 WORKDIR 默认由 root 创建) # 同时也确保工作目录也归 user 所有 RUN mkdir -p $HOME/src/data/lmdb $HOME/src/cache && \ chown -R 1000:1000 $HOME/src # 切换到非 root 用户 USER user # 1. 先复制依赖文件(充分利用 Docker 缓存层) # --chown=user:user 确保复制进去的文件权限属于该用户 COPY --chown=user:user requirements.txt . # 安装依赖(--user 安装在用户目录下,配合上面的 PATH) RUN pip install --no-cache-dir --user -r requirements.txt # 2. 复制项目所有代码到工作目录 COPY --chown=user:user . . # Hugging Face Spaces 默认监听 7860 端口 EXPOSE 7860 # 设置 Cookie 刷新路径(持久化刷新后的 Cookie) ENV GEMINI_COOKIE_PATH="/home/user/src/cache" # 设置图片存储路径(持久化生成的图片) ENV GEMINI_IMAGE_STORE_PATH="/home/user/src/cache" # 反检测速率限制配置(重要:避免被 Google 封禁) # 安全值(推荐): # - max_concurrent: 1-5(模拟人类行为) # - requests_per_minute: 10-30 # - requests_per_hour: 100-300 # - requests_per_day: 1000-3000 ENV GEMINI_MAX_CONCURRENT_REQUESTS="3" ENV GEMINI_QUEUE_TIMEOUT="60.0" ENV GEMINI_MAX_QUEUE_SIZE="50" ENV GEMINI_REQUESTS_PER_MINUTE="20" ENV GEMINI_REQUESTS_PER_HOUR="200" ENV GEMINI_REQUESTS_PER_DAY="2000" ENV GEMINI_BURST_COOLDOWN="30.0" # 启动命令 # 确保 run.py 里的 uvicorn 监听的是 0.0.0.0 和 7860 端口 CMD ["python", "run.py"]