Spaces:
Paused
Paused
| # 使用 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"] |