G_AI / Dockerfile
superxu520's picture
feat: 实现反检测速率限制器,模拟人类行为模式避免被 Google 封禁
4e293c6
# 使用 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"]