Spaces:
Runtime error
Runtime error
Upload 7 files
Browse files- .env.docker +150 -0
- Dockerfile +116 -0
- README-Docker.md +456 -0
- README.md +46 -348
- SCRIPT_INJECTION_DOCKER.md +209 -0
- docker-compose.yml +56 -0
- update.sh +30 -0
.env.docker
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Docker 环境配置文件示例
|
| 2 |
+
# 复制此文件为 .env 并根据需要修改配置
|
| 3 |
+
|
| 4 |
+
# =============================================================================
|
| 5 |
+
# Docker 主机端口配置
|
| 6 |
+
# =============================================================================
|
| 7 |
+
|
| 8 |
+
# 主机上映射的端口 (外部访问端口)
|
| 9 |
+
HOST_FASTAPI_PORT=2048
|
| 10 |
+
HOST_STREAM_PORT=3120
|
| 11 |
+
|
| 12 |
+
# =============================================================================
|
| 13 |
+
# 容器内服务端口配置
|
| 14 |
+
# =============================================================================
|
| 15 |
+
|
| 16 |
+
# FastAPI 服务端口 (容器内)
|
| 17 |
+
PORT=8000
|
| 18 |
+
DEFAULT_FASTAPI_PORT=2048
|
| 19 |
+
DEFAULT_CAMOUFOX_PORT=9222
|
| 20 |
+
|
| 21 |
+
# 流式代理服务配置
|
| 22 |
+
STREAM_PORT=3120
|
| 23 |
+
|
| 24 |
+
# =============================================================================
|
| 25 |
+
# 代理配置
|
| 26 |
+
# =============================================================================
|
| 27 |
+
|
| 28 |
+
# HTTP/HTTPS 代理设置
|
| 29 |
+
# HTTP_PROXY=http://host.docker.internal:7890
|
| 30 |
+
# HTTPS_PROXY=http://host.docker.internal:7890
|
| 31 |
+
|
| 32 |
+
# 统一代理配置 (优先级高于 HTTP_PROXY/HTTPS_PROXY)
|
| 33 |
+
# UNIFIED_PROXY_CONFIG=http://host.docker.internal:7890
|
| 34 |
+
|
| 35 |
+
# 代理绕过列表 (用分号分隔)
|
| 36 |
+
# NO_PROXY=localhost;127.0.0.1;*.local
|
| 37 |
+
|
| 38 |
+
# =============================================================================
|
| 39 |
+
# 日志配置
|
| 40 |
+
# =============================================================================
|
| 41 |
+
|
| 42 |
+
# 服务器日志级别 (DEBUG, INFO, WARNING, ERROR, CRITICAL)
|
| 43 |
+
SERVER_LOG_LEVEL=INFO
|
| 44 |
+
|
| 45 |
+
# 是否重定向 print 输出到日志
|
| 46 |
+
SERVER_REDIRECT_PRINT=false
|
| 47 |
+
|
| 48 |
+
# 启用调试日志
|
| 49 |
+
DEBUG_LOGS_ENABLED=false
|
| 50 |
+
|
| 51 |
+
# 启用跟踪日志
|
| 52 |
+
TRACE_LOGS_ENABLED=false
|
| 53 |
+
|
| 54 |
+
# =============================================================================
|
| 55 |
+
# 认证配置
|
| 56 |
+
# =============================================================================
|
| 57 |
+
|
| 58 |
+
# 自动保存认证信息
|
| 59 |
+
AUTO_SAVE_AUTH=false
|
| 60 |
+
|
| 61 |
+
# 认证保存超时时间 (秒)
|
| 62 |
+
AUTH_SAVE_TIMEOUT=30
|
| 63 |
+
|
| 64 |
+
# 自动确认登录
|
| 65 |
+
AUTO_CONFIRM_LOGIN=true
|
| 66 |
+
|
| 67 |
+
# =============================================================================
|
| 68 |
+
# 浏览器配置
|
| 69 |
+
# =============================================================================
|
| 70 |
+
|
| 71 |
+
# 启动模式 (normal, headless, virtual_display, direct_debug_no_browser)
|
| 72 |
+
LAUNCH_MODE=headless
|
| 73 |
+
|
| 74 |
+
# =============================================================================
|
| 75 |
+
# API 默认参数配置
|
| 76 |
+
# =============================================================================
|
| 77 |
+
|
| 78 |
+
# 默认温度值 (0.0-2.0)
|
| 79 |
+
DEFAULT_TEMPERATURE=1.0
|
| 80 |
+
|
| 81 |
+
# 默认最大输出令牌数
|
| 82 |
+
DEFAULT_MAX_OUTPUT_TOKENS=65536
|
| 83 |
+
|
| 84 |
+
# 默认 Top-P 值 (0.0-1.0)
|
| 85 |
+
DEFAULT_TOP_P=0.95
|
| 86 |
+
|
| 87 |
+
# 默认停止序列 (JSON 数组格式)
|
| 88 |
+
DEFAULT_STOP_SEQUENCES=["用户:"]
|
| 89 |
+
|
| 90 |
+
# =============================================================================
|
| 91 |
+
# 超时配置 (毫秒)
|
| 92 |
+
# =============================================================================
|
| 93 |
+
|
| 94 |
+
# 响应完成总超时时间
|
| 95 |
+
RESPONSE_COMPLETION_TIMEOUT=300000
|
| 96 |
+
|
| 97 |
+
# 轮询间隔
|
| 98 |
+
POLLING_INTERVAL=300
|
| 99 |
+
POLLING_INTERVAL_STREAM=180
|
| 100 |
+
|
| 101 |
+
# 静默超时
|
| 102 |
+
SILENCE_TIMEOUT_MS=60000
|
| 103 |
+
|
| 104 |
+
# =============================================================================
|
| 105 |
+
# 脚本注入配置
|
| 106 |
+
# =============================================================================
|
| 107 |
+
|
| 108 |
+
# 是否启用油猴脚本注入功能
|
| 109 |
+
ENABLE_SCRIPT_INJECTION=false
|
| 110 |
+
|
| 111 |
+
# 油猴脚本文件路径(相对于容器内 /app 目录)
|
| 112 |
+
USERSCRIPT_PATH=browser_utils/more_modles.js
|
| 113 |
+
|
| 114 |
+
# 注意:MODEL_CONFIG_PATH 已废弃
|
| 115 |
+
# 模型数据现在直接从 USERSCRIPT_PATH 指定的油猴脚本中解析
|
| 116 |
+
|
| 117 |
+
# =============================================================================
|
| 118 |
+
# Docker 特定配置
|
| 119 |
+
# =============================================================================
|
| 120 |
+
|
| 121 |
+
# 容器内存限制
|
| 122 |
+
# 默认不限制。如需限制容器资源,请在你的 .env 文件中取消注释并设置以下值。
|
| 123 |
+
# 例如: DOCKER_MEMORY_LIMIT=1g或DOCKER_MEMORY_LIMIT=1024m
|
| 124 |
+
# 注意:DOCKER_MEMORY_LIMIT和DOCKER_MEMSWAP_LIMIT相同时,不会使用SWAP
|
| 125 |
+
# DOCKER_MEMORY_LIMIT=
|
| 126 |
+
# DOCKER_MEMSWAP_LIMIT=
|
| 127 |
+
|
| 128 |
+
# 容器重启策略相关
|
| 129 |
+
# 这些配置项在 docker-compose.yml 中使用
|
| 130 |
+
|
| 131 |
+
# 健康检查间隔 (秒)
|
| 132 |
+
HEALTHCHECK_INTERVAL=30
|
| 133 |
+
|
| 134 |
+
# 健康检查超时 (秒)
|
| 135 |
+
HEALTHCHECK_TIMEOUT=10
|
| 136 |
+
|
| 137 |
+
# 健康检查重试次数
|
| 138 |
+
HEALTHCHECK_RETRIES=3
|
| 139 |
+
|
| 140 |
+
# =============================================================================
|
| 141 |
+
# 网络配置说明
|
| 142 |
+
# =============================================================================
|
| 143 |
+
|
| 144 |
+
# 在 Docker 环境中访问主机服务,请使用:
|
| 145 |
+
# - Linux: host.docker.internal
|
| 146 |
+
# - macOS: host.docker.internal
|
| 147 |
+
# - Windows: host.docker.internal
|
| 148 |
+
#
|
| 149 |
+
# 例如,如果主机上有代理服务运行在 7890 端口:
|
| 150 |
+
# HTTP_PROXY=http://host.docker.internal:7890
|
Dockerfile
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Dockerfile
|
| 2 |
+
|
| 3 |
+
#ARG PROXY_ADDR="http://host.docker.internal:7890" Linxux 下使用 host.docker.internal 可能会有问题,建议使用实际的代理地址
|
| 4 |
+
FROM python:3.10-slim-bookworm AS builder
|
| 5 |
+
|
| 6 |
+
ARG DEBIAN_FRONTEND=noninteractive
|
| 7 |
+
ARG PROXY_ADDR
|
| 8 |
+
|
| 9 |
+
RUN if [ -n "$PROXY_ADDR" ]; then \
|
| 10 |
+
printf 'Acquire::http::Proxy "%s";\nAcquire::https::Proxy "%s";\n' "$PROXY_ADDR" "$PROXY_ADDR" > /etc/apt/apt.conf.d/99proxy; \
|
| 11 |
+
fi && \
|
| 12 |
+
apt-get update && \
|
| 13 |
+
apt-get install -y --no-install-recommends curl \
|
| 14 |
+
&& apt-get clean && rm -rf /var/lib/apt/lists/* && \
|
| 15 |
+
if [ -n "$PROXY_ADDR" ]; then rm -f /etc/apt/apt.conf.d/99proxy; fi
|
| 16 |
+
|
| 17 |
+
ENV HTTP_PROXY=${PROXY_ADDR}
|
| 18 |
+
ENV HTTPS_PROXY=${PROXY_ADDR}
|
| 19 |
+
|
| 20 |
+
ENV POETRY_HOME="/opt/poetry"
|
| 21 |
+
ENV POETRY_VERSION=1.8.3
|
| 22 |
+
RUN curl -sSL https://install.python-poetry.org | python3 - --version ${POETRY_VERSION}
|
| 23 |
+
ENV PATH="${POETRY_HOME}/bin:${PATH}"
|
| 24 |
+
|
| 25 |
+
WORKDIR /app_builder
|
| 26 |
+
COPY pyproject.toml poetry.lock ./
|
| 27 |
+
RUN poetry config virtualenvs.create false --local && \
|
| 28 |
+
poetry install --no-root --no-dev --no-interaction --no-ansi
|
| 29 |
+
|
| 30 |
+
FROM python:3.10-slim-bookworm
|
| 31 |
+
|
| 32 |
+
ARG DEBIAN_FRONTEND=noninteractive
|
| 33 |
+
ARG PROXY_ADDR
|
| 34 |
+
|
| 35 |
+
ENV HTTP_PROXY=${PROXY_ADDR}
|
| 36 |
+
ENV HTTPS_PROXY=${PROXY_ADDR}
|
| 37 |
+
|
| 38 |
+
# 步骤 1: 安装所有系统依赖。
|
| 39 |
+
# Playwright 的依赖也在这里一并安装。
|
| 40 |
+
RUN \
|
| 41 |
+
if [ -n "$PROXY_ADDR" ]; then \
|
| 42 |
+
printf 'Acquire::http::Proxy "%s";\nAcquire::https::Proxy "%s";\n' "$PROXY_ADDR" "$PROXY_ADDR" > /etc/apt/apt.conf.d/99proxy; \
|
| 43 |
+
fi && \
|
| 44 |
+
apt-get update && \
|
| 45 |
+
apt-get install -y --no-install-recommends \
|
| 46 |
+
libatk1.0-0 libatk-bridge2.0-0 libcups2 libdbus-1-3 libdrm2 libgbm1 libgtk-3-0 libnspr4 libnss3 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxdamage1 libxext6 libxfixes3 libxrandr2 libxrender1 libxtst6 ca-certificates fonts-liberation libasound2 libpangocairo-1.0-0 libpango-1.0-0 libu2f-udev \
|
| 47 |
+
supervisor curl \
|
| 48 |
+
&& \
|
| 49 |
+
# 清理工作
|
| 50 |
+
apt-get clean && \
|
| 51 |
+
rm -rf /var/lib/apt/lists/* && \
|
| 52 |
+
if [ -n "$PROXY_ADDR" ]; then rm -f /etc/apt/apt.conf.d/99proxy; fi
|
| 53 |
+
|
| 54 |
+
RUN groupadd -r appgroup && useradd -r -g appgroup -s /bin/bash -d /app appuser
|
| 55 |
+
|
| 56 |
+
WORKDIR /app
|
| 57 |
+
|
| 58 |
+
# 步骤 2: 复制 Python 包和可执行文件。
|
| 59 |
+
# 这是关键的顺序调整:在使用 playwright 之前先把它复制进来。
|
| 60 |
+
COPY --from=builder /usr/local/lib/python3.10/site-packages/ /usr/local/lib/python3.10/site-packages/
|
| 61 |
+
COPY --from=builder /usr/local/bin/ /usr/local/bin/
|
| 62 |
+
COPY --from=builder /opt/poetry/bin/poetry /usr/local/bin/poetry
|
| 63 |
+
|
| 64 |
+
# 复制应用代码
|
| 65 |
+
COPY . .
|
| 66 |
+
|
| 67 |
+
# 步骤 3: 现在 Python 模块已存在,可以安全地运行这些命令。
|
| 68 |
+
# 注意:我们不再需要 `playwright install-deps`,因为依赖已在上面的 apt-get 中安装。
|
| 69 |
+
RUN camoufox fetch && \
|
| 70 |
+
python -m playwright install firefox
|
| 71 |
+
|
| 72 |
+
# 创建目录和设置权限
|
| 73 |
+
RUN mkdir -p /app/logs && \
|
| 74 |
+
mkdir -p /app/auth_profiles/active && \
|
| 75 |
+
mkdir -p /app/auth_profiles/saved && \
|
| 76 |
+
mkdir -p /app/certs && \
|
| 77 |
+
mkdir -p /app/browser_utils/custom_scripts && \
|
| 78 |
+
mkdir -p /home/appuser/.cache/ms-playwright && \
|
| 79 |
+
mkdir -p /home/appuser/.mozilla && \
|
| 80 |
+
chown -R appuser:appgroup /app && \
|
| 81 |
+
chown -R appuser:appgroup /home/appuser
|
| 82 |
+
|
| 83 |
+
COPY supervisord.conf /etc/supervisor/conf.d/app.conf
|
| 84 |
+
|
| 85 |
+
# 修复 camoufox 缓存逻辑
|
| 86 |
+
RUN mkdir -p /var/cache/camoufox && \
|
| 87 |
+
if [ -d /root/.cache/camoufox ]; then cp -a /root/.cache/camoufox/* /var/cache/camoufox/; fi && \
|
| 88 |
+
mkdir -p /app/.cache && \
|
| 89 |
+
ln -s /var/cache/camoufox /app/.cache/camoufox
|
| 90 |
+
|
| 91 |
+
RUN python update_browserforge_data.py
|
| 92 |
+
|
| 93 |
+
# 清理代理环境变量
|
| 94 |
+
ENV HTTP_PROXY=""
|
| 95 |
+
ENV HTTPS_PROXY=""
|
| 96 |
+
|
| 97 |
+
EXPOSE 2048
|
| 98 |
+
EXPOSE 3120
|
| 99 |
+
|
| 100 |
+
USER appuser
|
| 101 |
+
ENV HOME=/app
|
| 102 |
+
ENV PLAYWRIGHT_BROWSERS_PATH=/home/appuser/.cache/ms-playwright
|
| 103 |
+
|
| 104 |
+
ENV PYTHONUNBUFFERED=1
|
| 105 |
+
|
| 106 |
+
ENV PORT=8000
|
| 107 |
+
ENV DEFAULT_FASTAPI_PORT=2048
|
| 108 |
+
ENV DEFAULT_CAMOUFOX_PORT=9222
|
| 109 |
+
ENV STREAM_PORT=3120
|
| 110 |
+
ENV SERVER_LOG_LEVEL=INFO
|
| 111 |
+
ENV DEBUG_LOGS_ENABLED=false
|
| 112 |
+
ENV AUTO_CONFIRM_LOGIN=true
|
| 113 |
+
ENV SERVER_PORT=2048
|
| 114 |
+
ENV INTERNAL_CAMOUFOX_PROXY=""
|
| 115 |
+
|
| 116 |
+
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/app.conf"]
|
README-Docker.md
ADDED
|
@@ -0,0 +1,456 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Docker 部署指南 (AI Studio Proxy API)
|
| 2 |
+
|
| 3 |
+
> 📁 **注意**: 所有 Docker 相关文件现在都位于 `docker/` 目录中,保持项目根目录的整洁。
|
| 4 |
+
|
| 5 |
+
本文档提供了使用 Docker 构建和运行 AI Studio Proxy API 项目的完整指南,包括 Poetry 依赖管理、`.env` 配置管理和脚本注入功能。
|
| 6 |
+
|
| 7 |
+
## 🐳 概述
|
| 8 |
+
|
| 9 |
+
Docker 部署提供了以下优势:
|
| 10 |
+
- ✅ **环境隔离**: 容器化部署,避免环境冲突
|
| 11 |
+
- ✅ **Poetry 依赖管理**: 使用现代化的 Python 依赖管理工具
|
| 12 |
+
- ✅ **统一配置**: 基于 `.env` 文件的配置管理
|
| 13 |
+
- ✅ **版本更新无忧**: `bash update.sh` 即可完成更新
|
| 14 |
+
- ✅ **跨平台支持**: 支持 x86_64 和 ARM64 架构
|
| 15 |
+
- ✅ **配置持久化**: 认证文件和日志持久化存储
|
| 16 |
+
- ✅ **多阶段构建**: 优化镜像大小和构建速度
|
| 17 |
+
|
| 18 |
+
## 先决条件
|
| 19 |
+
|
| 20 |
+
* **Docker**: 确保您的系统已正确安装并正在运行 Docker。您可以从 [Docker 官方网站](https://www.docker.com/get-started) 下载并安装 Docker Desktop (适用于 Windows 和 macOS) 或 Docker Engine (适用于 Linux)。
|
| 21 |
+
* **项目代码**: 项目代码已下载到本地。
|
| 22 |
+
* **认证文件**: 首次运行需要在主机上完成认证文件获取,Docker环境目前仅支持日常运行。
|
| 23 |
+
|
| 24 |
+
## 🔧 Docker 环境规格
|
| 25 |
+
|
| 26 |
+
* **基础镜像**: Python 3.10-slim-bookworm (稳定且轻量)
|
| 27 |
+
* **Python版本**: 3.10 (在容器内运行,与主机Python版本无关)
|
| 28 |
+
* **依赖管理**: Poetry (现代化 Python 依赖管理)
|
| 29 |
+
* **构建方式**: 多阶段构建 (builder + runtime)
|
| 30 |
+
* **架构支持**: x86_64 和 ARM64 (Apple Silicon)
|
| 31 |
+
* **模块化设计**: 完全支持项目的模块化架构
|
| 32 |
+
* **虚拟环境**: Poetry 自动管理虚拟环境
|
| 33 |
+
|
| 34 |
+
## 1. 理解项目中的 Docker 相关文件
|
| 35 |
+
|
| 36 |
+
在项目根目录下,您会找到以下与 Docker 配置相关的文件:
|
| 37 |
+
|
| 38 |
+
* **[`Dockerfile`](./Dockerfile:1):** 这是构建 Docker 镜像的蓝图。它定义了基础镜像、依赖项安装、代码复制、端口暴露以及容器启动时执行的命令。
|
| 39 |
+
* **[`.dockerignore`](./.dockerignore:1):** 这个文件列出了在构建 Docker 镜像时应忽略的文件和目录。这有助于减小镜像大小并加快构建速度,例如排除 `.git` 目录、本地开发环境文件等。
|
| 40 |
+
* **[`supervisord.conf`](./supervisord.conf:1):** (如果项目使用 Supervisor) Supervisor 是一个进程控制系统,它允许用户在类 UNIX 操作系统上监控和控制多个进程。此配置文件定义了 Supervisor 应如何管理应用程序的进程 (例如,主服务和流服务)。
|
| 41 |
+
|
| 42 |
+
## 2. 构建 Docker 镜像
|
| 43 |
+
|
| 44 |
+
要构建 Docker 镜像,请在项目根目录下打开终端或命令行界面,然后执行以下命令:
|
| 45 |
+
|
| 46 |
+
```bash
|
| 47 |
+
# 方法 1: 使用 docker compose (推荐)
|
| 48 |
+
cd docker
|
| 49 |
+
docker compose build
|
| 50 |
+
|
| 51 |
+
# 方法 2: 直接使用 docker build (在项目根目录执行)
|
| 52 |
+
docker build -f docker/Dockerfile -t ai-studio-proxy:latest .
|
| 53 |
+
```
|
| 54 |
+
|
| 55 |
+
**命令解释:**
|
| 56 |
+
|
| 57 |
+
* `docker build`: 这是 Docker CLI 中用于构建镜像的命令。
|
| 58 |
+
* `-t ai-studio-proxy:latest`: `-t` 参数用于为镜像指定一个名称和可选的标签 (tag),格式为 `name:tag`。
|
| 59 |
+
* `ai-studio-proxy`: 是您为镜像选择的名称。
|
| 60 |
+
* `latest`: 是标签,通常表示这是该镜像的最新版本。您可以根据版本控制策略选择其他标签,例如 `ai-studio-proxy:1.0`。
|
| 61 |
+
* `.`: (末尾的点号) 指定了 Docker 构建上下文的路径。构建上下文是指包含 [`Dockerfile`](./Dockerfile:1) 以及构建镜像所需的所有其他文件和目录的本地文件系统路径。点号表示当前目录。Docker 守护进程会访问此路径下的文件来执行构建。
|
| 62 |
+
|
| 63 |
+
构建过程可能需要一些时间,具体取决于您的网络速度和项目依赖项的多少。成功构建后,您可以使用 `docker images` 命令查看本地已有的镜像列表,其中应包含 `ai-studio-proxy:latest`。
|
| 64 |
+
|
| 65 |
+
## 3. 运行 Docker 容器
|
| 66 |
+
|
| 67 |
+
镜像构建完成后,您可以选择以下两种方式来运行容器:
|
| 68 |
+
|
| 69 |
+
### 方式 A: 使用 Docker Compose (推荐)
|
| 70 |
+
|
| 71 |
+
Docker Compose 提供了更简洁的配置管理方式,特别适合使用 `.env` 文件:
|
| 72 |
+
|
| 73 |
+
```bash
|
| 74 |
+
# 1. 准备配置文件 (进入 docker 目录)
|
| 75 |
+
cd docker
|
| 76 |
+
cp .env.docker .env
|
| 77 |
+
# 编辑 .env 文件以适应您的需求
|
| 78 |
+
|
| 79 |
+
# 2. 使用 Docker Compose 启动 (在 docker 目录下)
|
| 80 |
+
docker compose up -d
|
| 81 |
+
|
| 82 |
+
# 3. 查看日志
|
| 83 |
+
docker compose logs -f
|
| 84 |
+
|
| 85 |
+
# 4. 停止服务
|
| 86 |
+
docker compose down
|
| 87 |
+
```
|
| 88 |
+
|
| 89 |
+
### 方式 B: 使用 Docker 命令
|
| 90 |
+
|
| 91 |
+
您也可以使用传统的 Docker 命令来创建并运行容器:
|
| 92 |
+
|
| 93 |
+
### 方法 1: 使用 .env 文件 (推荐)
|
| 94 |
+
|
| 95 |
+
```bash
|
| 96 |
+
docker run -d \
|
| 97 |
+
-p <宿主机_服务端口>:2048 \
|
| 98 |
+
-p <宿主机_流端口>:3120 \
|
| 99 |
+
-v "$(pwd)/../auth_profiles":/app/auth_profiles \
|
| 100 |
+
-v "$(pwd)/.env":/app/.env \
|
| 101 |
+
# 可选: 如果您想使用自己的 SSL/TLS 证书,请取消下面一行的注释���
|
| 102 |
+
# 请确保宿主机上的 'certs/' 目录存在,并且其中包含应用程序所需的证书文件。
|
| 103 |
+
# -v "$(pwd)/../certs":/app/certs \
|
| 104 |
+
--name ai-studio-proxy-container \
|
| 105 |
+
ai-studio-proxy:latest
|
| 106 |
+
```
|
| 107 |
+
|
| 108 |
+
### 方法 2: 使用环境变量 (传统方式)
|
| 109 |
+
|
| 110 |
+
```bash
|
| 111 |
+
docker run -d \
|
| 112 |
+
-p <宿主机_服务端口>:2048 \
|
| 113 |
+
-p <宿主机_流端口>:3120 \
|
| 114 |
+
-v "$(pwd)/../auth_profiles":/app/auth_profiles \
|
| 115 |
+
# 可选: 如果您想使用自己的 SSL/TLS 证书,请取消下面一行的注释。
|
| 116 |
+
# 请确保宿主机上的 'certs/' 目录存在,并且其中包含应用程序所需的证书文件。
|
| 117 |
+
# -v "$(pwd)/../certs":/app/certs \
|
| 118 |
+
-e PORT=8000 \
|
| 119 |
+
-e DEFAULT_FASTAPI_PORT=2048 \
|
| 120 |
+
-e DEFAULT_CAMOUFOX_PORT=9222 \
|
| 121 |
+
-e STREAM_PORT=3120 \
|
| 122 |
+
-e SERVER_LOG_LEVEL=INFO \
|
| 123 |
+
-e DEBUG_LOGS_ENABLED=false \
|
| 124 |
+
-e AUTO_CONFIRM_LOGIN=true \
|
| 125 |
+
# 可选: 如果您需要设置代理,请取消下面的注释
|
| 126 |
+
# -e HTTP_PROXY="http://your_proxy_address:port" \
|
| 127 |
+
# -e HTTPS_PROXY="http://your_proxy_address:port" \
|
| 128 |
+
# -e UNIFIED_PROXY_CONFIG="http://your_proxy_address:port" \
|
| 129 |
+
--name ai-studio-proxy-container \
|
| 130 |
+
ai-studio-proxy:latest
|
| 131 |
+
```
|
| 132 |
+
|
| 133 |
+
**命令解释:**
|
| 134 |
+
|
| 135 |
+
* `docker run`: 这是 Docker CLI 中用于从镜像创建并启动容器的命令。
|
| 136 |
+
* `-d`: 以“分离模式”(detached mode) 运行容器。这意味着容器将在后台运行,您的终端提示符将立即可用,而不会被容器的日志输出占用。
|
| 137 |
+
* `-p <宿主机_服务端口>:2048`: 端口映射 (Port mapping)。
|
| 138 |
+
* 此参数将宿主机的某个端口映射到容器内部的 `2048` 端口。`2048` 是应用程序主服务在容器内监听的端口。
|
| 139 |
+
* 您需要将 `<宿主机_服务端口>` 替换为您希望在宿主机上用于访问此服务的实际端口号 (例如,如果您想通过宿主机的 `8080` 端口访问服务,则使用 `-p 8080:2048`)。
|
| 140 |
+
* `-p <宿主机_流端口>:3120`: 类似地,此参数将宿主机的某个端口映射到容器内部的 `3120` 端口,这是应用程序流服务在容器内监听的端口。
|
| 141 |
+
* 您需要将 `<宿主机_流端口>` 替换为您希望在宿主机上用于访问流服务的实际端口号 (例如 `-p 8081:3120`)。
|
| 142 |
+
* `-v "$(pwd)/../auth_profiles":/app/auth_profiles`: 卷挂载 (Volume mounting)。
|
| 143 |
+
* 此参数将宿主机当前工作目录 (`$(pwd)`) 下的 `auth_profiles/` 目录挂载到容器内的 `/app/auth_profiles/` 目录。
|
| 144 |
+
* 这样做的好处是:
|
| 145 |
+
* **持久化数据:** 即使容器被删除,`auth_profiles/` 中的数据仍保留在宿主机上。
|
| 146 |
+
* **方便配置:** 您可以直接在宿主机上修改 `auth_profiles/` 中的文件,更改会实时反映到容器中 (取决于应用程序如何读取这些文件)。
|
| 147 |
+
* **重要:** 在运行命令前,请确保宿主机上的 `auth_profiles/` 目录已存在。如果应用程序期望在此目录中找到特定的配置文件,请提前准备好。
|
| 148 |
+
* `# -v "$(pwd)/../certs":/app/certs` (可选,已注释): 挂载自定义证书。
|
| 149 |
+
* 如果您希望应用程序使用您自己的 SSL/TLS 证书而不是自动生成的证书,可以取消此行的注释。
|
| 150 |
+
* 它会将宿主机当前工作目录下的 `certs/` 目录挂载到容器内的 `/app/certs/` 目录。
|
| 151 |
+
* **重要:** 如果启用此选项,请确保宿主机上的 `certs/` 目录存在,并且其中包含应用程序所需的证书文件 (通常是 `server.crt` 和 `server.key` 或类似名称的文件)。应用程序也需要被配置为从 `/app/certs/` 读取这些证书。
|
| 152 |
+
* `-e SERVER_PORT=2048`: 设置环境变量。
|
| 153 |
+
* `-e` 参数用于在容器内设置环境变量。
|
| 154 |
+
* 这里,我们将 `SERVER_PORT` 环境变量设置为 `2048`。应用程序在容器内会读取此变量来确定其主服务应监听哪个端口。这应与 [`Dockerfile`](./Dockerfile:1) 中 `EXPOSE` 指令以及 [`supervisord.conf`](./supervisord.conf:1) (如果使用) 中的配置相匹配。
|
| 155 |
+
* `-e STREAM_PORT=3120`: 类似地,设置 `STREAM_PORT` 环境变量为 `3120`,供应用程序的流服务使用。
|
| 156 |
+
* `# -e INTERNAL_CAMOUFOX_PROXY="http://your_proxy_address:port"` (可选,已注释): 设置内部 Camoufox 代理。
|
| 157 |
+
* 如果您的应用程序需要通过一个特定的内部代理服务器来访问 Camoufox 或其他外部服务,可以取消此行的注释,并将 `"http://your_proxy_address:port"` 替换为实际的代理服务器地址和端口 (例如 `http://10.0.0.5:7890` 或 `socks5://proxy-user:proxy-pass@10.0.0.10:1080`)。
|
| 158 |
+
* `--name ai-studio-proxy-container`: 为正在运行的容器指定一个名称。
|
| 159 |
+
* 这使得管理容器更加方便。例如,您可以使用 `docker stop ai-studio-proxy-container` 来停止这个容器,或使用 `docker logs ai-studio-proxy-container` 来查看其日志。
|
| 160 |
+
* 如果您不指定名称,Docker 会自动为容器生成一个随机名称。
|
| 161 |
+
* `ai-studio-proxy:latest`: 指定要运行的镜像的名称和标签。这必须与您在 `docker build` 命令中使用的名称和标签相匹配。
|
| 162 |
+
|
| 163 |
+
**首次运行前的重要准备:**
|
| 164 |
+
|
| 165 |
+
### 配置文件准备
|
| 166 |
+
|
| 167 |
+
1. **创建 `.env` 配置文件 (推荐):**
|
| 168 |
+
```bash
|
| 169 |
+
# 复制配置模板 (在项目 docker 目录下执行)
|
| 170 |
+
cp .env.docker .env
|
| 171 |
+
|
| 172 |
+
# 编辑配置文件
|
| 173 |
+
nano .env # 或使用其他编辑器
|
| 174 |
+
```
|
| 175 |
+
|
| 176 |
+
**`.env` 文件的优势:**
|
| 177 |
+
- ✅ **版本更新无忧**: 一个 `git pull` 就完成更新,无需重新配置
|
| 178 |
+
- ✅ **配置集中管理**: 所有配置项统一在 `.env` 文件中
|
| 179 |
+
- ✅ **Docker 兼容**: 容器会自动读取挂载的 `.env` 文件
|
| 180 |
+
- ✅ **安全性**: `.env` 文件已被 `.gitignore` 忽略,不会泄露配置
|
| 181 |
+
|
| 182 |
+
2. **创建 `auth_profiles/` 目录:** 在项目根目录下 (与 [`Dockerfile`](./Dockerfile:1) 同级),手动创建一个名为 `auth_profiles` 的目录。如果您的应用程序需要初始的认证配置文件,请将它们放入此目录中。
|
| 183 |
+
|
| 184 |
+
3. **(可选) 创建 `certs/` 目录:** 如果您计划使用自己的证书并取消了相关卷挂载行的注释,请在项目根目录下创建一个名为 `certs` 的目录,并将您的证书文件 (例如 `server.crt`, `server.key`) 放入其中。
|
| 185 |
+
|
| 186 |
+
## 4. 环境变量配置详解
|
| 187 |
+
|
| 188 |
+
### 使用 .env 文件配置 (推荐)
|
| 189 |
+
|
| 190 |
+
项目现在支持通过 `.env` 文件进行配置管理。在 Docker 环境中,您只需要将 `.env` 文件挂载到容器中即可:
|
| 191 |
+
|
| 192 |
+
```bash
|
| 193 |
+
# 挂载 .env 文件到容器
|
| 194 |
+
-v "$(pwd)/.env":/app/.env
|
| 195 |
+
```
|
| 196 |
+
|
| 197 |
+
### 常用配置项
|
| 198 |
+
|
| 199 |
+
以下是 Docker 环境中常用的配置项:
|
| 200 |
+
|
| 201 |
+
```env
|
| 202 |
+
# 服务端口配置
|
| 203 |
+
PORT=8000
|
| 204 |
+
DEFAULT_FASTAPI_PORT=2048
|
| 205 |
+
DEFAULT_CAMOUFOX_PORT=9222
|
| 206 |
+
STREAM_PORT=3120
|
| 207 |
+
|
| 208 |
+
# 代理配置
|
| 209 |
+
HTTP_PROXY=http://127.0.0.1:7890
|
| 210 |
+
HTTPS_PROXY=http://127.0.0.1:7890
|
| 211 |
+
UNIFIED_PROXY_CONFIG=http://127.0.0.1:7890
|
| 212 |
+
|
| 213 |
+
# 日志配置
|
| 214 |
+
SERVER_LOG_LEVEL=INFO
|
| 215 |
+
DEBUG_LOGS_ENABLED=false
|
| 216 |
+
TRACE_LOGS_ENABLED=false
|
| 217 |
+
|
| 218 |
+
# 认证配置
|
| 219 |
+
AUTO_CONFIRM_LOGIN=true
|
| 220 |
+
AUTO_SAVE_AUTH=false
|
| 221 |
+
AUTH_SAVE_TIMEOUT=30
|
| 222 |
+
|
| 223 |
+
# 脚本注入配置 v3.0 (重大升级)
|
| 224 |
+
ENABLE_SCRIPT_INJECTION=true
|
| 225 |
+
USERSCRIPT_PATH=browser_utils/more_modles.js
|
| 226 |
+
# 注意:MODEL_CONFIG_PATH 已废弃,现在直接从油猴脚本解析模型数据
|
| 227 |
+
# v3.0 使用 Playwright 原生网络拦截,100% 可靠
|
| 228 |
+
|
| 229 |
+
# API 默认参数
|
| 230 |
+
DEFAULT_TEMPERATURE=1.0
|
| 231 |
+
DEFAULT_MAX_OUTPUT_TOKENS=65536
|
| 232 |
+
DEFAULT_TOP_P=0.95
|
| 233 |
+
```
|
| 234 |
+
|
| 235 |
+
### 配置优先级
|
| 236 |
+
|
| 237 |
+
在 Docker 环境中,配置的优先级顺序为:
|
| 238 |
+
|
| 239 |
+
1. **Docker 运行时环境变量** (`-e` 参数) - 最高优先级
|
| 240 |
+
2. **挂载的 .env 文件** - 中等优先级
|
| 241 |
+
3. **Dockerfile 中的 ENV** - 最低优先级
|
| 242 |
+
|
| 243 |
+
### 示例:完整的 Docker 运行命令
|
| 244 |
+
|
| 245 |
+
```bash
|
| 246 |
+
# 使用 .env 文件的完整示例
|
| 247 |
+
docker run -d \
|
| 248 |
+
-p 8080:2048 \
|
| 249 |
+
-p 8081:3120 \
|
| 250 |
+
-v "$(pwd)/../auth_profiles":/app/auth_profiles \
|
| 251 |
+
-v "$(pwd)/.env":/app/.env \
|
| 252 |
+
--name ai-studio-proxy-container \
|
| 253 |
+
ai-studio-proxy:latest
|
| 254 |
+
```
|
| 255 |
+
|
| 256 |
+
## 5. 管理正在运行的容器
|
| 257 |
+
|
| 258 |
+
一旦容器启动,您可以使用以下 Docker 命令来管理它:
|
| 259 |
+
|
| 260 |
+
* **查看正在运行的容器:**
|
| 261 |
+
```bash
|
| 262 |
+
docker ps
|
| 263 |
+
```
|
| 264 |
+
(如果您想查看所有容器,包括已停止的,请使用 `docker ps -a`)
|
| 265 |
+
|
| 266 |
+
* **查看容器日志:**
|
| 267 |
+
```bash
|
| 268 |
+
docker logs ai-studio-proxy-container
|
| 269 |
+
```
|
| 270 |
+
(如果您想持续跟踪日志输出,可以使用 `-f` 参数: `docker logs -f ai-studio-proxy-container`)
|
| 271 |
+
|
| 272 |
+
* **停止容器:**
|
| 273 |
+
```bash
|
| 274 |
+
docker stop ai-studio-proxy-container
|
| 275 |
+
```
|
| 276 |
+
|
| 277 |
+
* **启动已停止的容器:**
|
| 278 |
+
```bash
|
| 279 |
+
docker start ai-studio-proxy-container
|
| 280 |
+
```
|
| 281 |
+
|
| 282 |
+
* **重启容器:**
|
| 283 |
+
```bash
|
| 284 |
+
docker restart ai-studio-proxy-container
|
| 285 |
+
```
|
| 286 |
+
|
| 287 |
+
* **进入容器内部 (获取一个交互式 shell):**
|
| 288 |
+
```bash
|
| 289 |
+
docker exec -it ai-studio-proxy-container /bin/bash
|
| 290 |
+
```
|
| 291 |
+
(或者 `/bin/sh`,取决于容器基础镜像中可用的 shell。这对于调试非常有用。)
|
| 292 |
+
|
| 293 |
+
* **删除容器:**
|
| 294 |
+
首先需要停止容器,然后才能删除它。
|
| 295 |
+
```bash
|
| 296 |
+
docker stop ai-studio-proxy-container
|
| 297 |
+
docker rm ai-studio-proxy-container
|
| 298 |
+
```
|
| 299 |
+
(如果您想强制删除正在运行的容器,可以使用 `docker rm -f ai-studio-proxy-container`,但不建议这样做,除非您知道自己在做什么。)
|
| 300 |
+
|
| 301 |
+
## 5. 更新应用程序
|
| 302 |
+
|
| 303 |
+
当您更新了应用程序代码并希望部署新版本时,通常需要执行以下步骤:
|
| 304 |
+
|
| 305 |
+
1. **停止并删除旧的容器** (如果它正在使用相同的端口或名称):
|
| 306 |
+
```bash
|
| 307 |
+
docker stop ai-studio-proxy-container
|
| 308 |
+
docker rm ai-studio-proxy-container
|
| 309 |
+
```
|
| 310 |
+
2. **重新构建 Docker 镜像** (确保您在包含最新代码和 [`Dockerfile`](./Dockerfile:1) 的目录中):
|
| 311 |
+
```bash
|
| 312 |
+
docker build -t ai-studio-proxy:latest .
|
| 313 |
+
```
|
| 314 |
+
3. **使用新的镜像运行新的容���** (使用与之前相同的 `docker run` 命令,或根据需要进行调整):
|
| 315 |
+
```bash
|
| 316 |
+
docker run -d \
|
| 317 |
+
-p <宿主机_服务端口>:2048 \
|
| 318 |
+
# ... (其他参数与之前相同) ...
|
| 319 |
+
--name ai-studio-proxy-container \
|
| 320 |
+
ai-studio-proxy:latest
|
| 321 |
+
```
|
| 322 |
+
|
| 323 |
+
## 6. 清理
|
| 324 |
+
|
| 325 |
+
* **删除指定的 Docker 镜像:**
|
| 326 |
+
```bash
|
| 327 |
+
docker rmi ai-studio-proxy:latest
|
| 328 |
+
```
|
| 329 |
+
(注意:如果存在基于此镜像的容器,您需要先删除这些容器。)
|
| 330 |
+
|
| 331 |
+
* **删除所有未使用的 (悬空) 镜像、容器、网络和卷:**
|
| 332 |
+
```bash
|
| 333 |
+
docker system prune
|
| 334 |
+
```
|
| 335 |
+
(如果想删除所有未使用的镜像,不仅仅是悬空的,可以使用 `docker system prune -a`)
|
| 336 |
+
**警告:** `prune` 命令会删除数据,请谨慎使用。
|
| 337 |
+
|
| 338 |
+
希望本教程能帮助您成功地通过 Docker 部署和运行 AI Studio Proxy API 项目!
|
| 339 |
+
|
| 340 |
+
## 脚本注入配置 (v3.0 新功能) 🆕
|
| 341 |
+
|
| 342 |
+
### 概述
|
| 343 |
+
|
| 344 |
+
Docker 环境完全支持最新的脚本注入功能 v3.0,提供革命性的改进:
|
| 345 |
+
|
| 346 |
+
- **🚀 Playwright 原生拦截**: 使用 Playwright 路由拦截,100% 可靠性
|
| 347 |
+
- **🔄 双重保障机制**: 网络拦截 + 脚本注入,确保万无一失
|
| 348 |
+
- **📝 直接脚本解析**: 从油猴脚本中自动解析模型列表,无需配置文件
|
| 349 |
+
- **🔗 前后端同步**: 前端和后端使用相同的模型数据源,100%一致
|
| 350 |
+
- **⚙️ 零配置维护**: 无需手动维护模型配置文件,脚本更新自动生效
|
| 351 |
+
- **🔄 自动适配**: 油猴脚本更新时无需手动更新配置
|
| 352 |
+
|
| 353 |
+
### 配置选项
|
| 354 |
+
|
| 355 |
+
在 `.env` 文件中配置以下选项:
|
| 356 |
+
|
| 357 |
+
```env
|
| 358 |
+
# 是否启用脚本注入功能
|
| 359 |
+
ENABLE_SCRIPT_INJECTION=true
|
| 360 |
+
|
| 361 |
+
# 油猴脚本文件路径(容器内路径)
|
| 362 |
+
# 模型数据直接从此脚本文件中解析,无需额外配置文件
|
| 363 |
+
USERSCRIPT_PATH=browser_utils/more_modles.js
|
| 364 |
+
```
|
| 365 |
+
|
| 366 |
+
### 自定义脚本和模型配置
|
| 367 |
+
|
| 368 |
+
如果您想使用自定义的脚本或模型配置:
|
| 369 |
+
|
| 370 |
+
1. **自定义脚本配置**:
|
| 371 |
+
```bash
|
| 372 |
+
# 在主机上创建自定义脚本文件
|
| 373 |
+
cp browser_utils/more_modles.js browser_utils/my_script.js
|
| 374 |
+
# 编辑 my_script.js 中的 MODELS_TO_INJECT 数组
|
| 375 |
+
|
| 376 |
+
# 在 docker-compose.yml 中取消注释并修改挂载行:
|
| 377 |
+
# - ../browser_utils/my_script.js:/app/browser_utils/more_modles.js:ro
|
| 378 |
+
|
| 379 |
+
# 或者在 .env 中修改路径:
|
| 380 |
+
# USERSCRIPT_PATH=browser_utils/my_script.js
|
| 381 |
+
```
|
| 382 |
+
|
| 383 |
+
2. **自定义脚本**:
|
| 384 |
+
```bash
|
| 385 |
+
# 将自定义脚本放在 browser_utils/ 目录
|
| 386 |
+
cp your_custom_script.js browser_utils/custom_script.js
|
| 387 |
+
|
| 388 |
+
# 在 .env 中修改路径:
|
| 389 |
+
# USERSCRIPT_PATH=browser_utils/custom_script.js
|
| 390 |
+
```
|
| 391 |
+
|
| 392 |
+
### Docker Compose 挂载配置
|
| 393 |
+
|
| 394 |
+
在 `docker-compose.yml` 中,您可以取消注释以下行来挂载自定义文件:
|
| 395 |
+
|
| 396 |
+
```yaml
|
| 397 |
+
volumes:
|
| 398 |
+
# 挂载自定义模型配置
|
| 399 |
+
- ../browser_utils/model_configs.json:/app/browser_utils/model_configs.json:ro
|
| 400 |
+
# 挂载自定义脚本目录
|
| 401 |
+
- ../browser_utils/custom_scripts:/app/browser_utils/custom_scripts:ro
|
| 402 |
+
```
|
| 403 |
+
|
| 404 |
+
### 注意事项
|
| 405 |
+
|
| 406 |
+
- 脚本或配置文件更新后需要重启容器
|
| 407 |
+
- 如果脚本注入失败,不会影响主要功能
|
| 408 |
+
- 可以通过容器日志查看脚本注入状态
|
| 409 |
+
|
| 410 |
+
## 注意事项
|
| 411 |
+
|
| 412 |
+
1. **认证文件**: Docker 部署需要预先在主机上获取有效的认证文件,并将其放置在 `auth_profiles/active/` 目录中。
|
| 413 |
+
2. **模块化架构**: 项目采用模块化设计,所有配置和代码都已经过优化,无需手动修改。
|
| 414 |
+
3. **端口配置**: 确保宿主机上的端口未被占用,默认使用 2048 (主服务) 和 3120 (流式代理)。
|
| 415 |
+
4. **日志查看**: 可以通过 `docker logs` 命令查看容器运行日志,便于调试和监控。
|
| 416 |
+
5. **脚本注入**: 新增的脚本注入功能默认启用,可通过 `ENABLE_SCRIPT_INJECTION=false` 禁用。
|
| 417 |
+
|
| 418 |
+
## 配置管理总结 ⭐
|
| 419 |
+
|
| 420 |
+
### 新功能:统一的 .env 配置
|
| 421 |
+
|
| 422 |
+
现在 Docker 部署完全支持 `.env` 文件配置管理:
|
| 423 |
+
|
| 424 |
+
✅ **统一配置**: 使用 `.env` 文件管理所有配置
|
| 425 |
+
✅ **版本更新无忧**: `git pull` + `docker compose up -d` 即可完成更新
|
| 426 |
+
✅ **配置隔离**: 开发、测试、生产环境可使用不同的 `.env` 文件
|
| 427 |
+
✅ **安全性**: `.env` 文件不会被提交到版本控制
|
| 428 |
+
|
| 429 |
+
### 推荐的 Docker 工作流程
|
| 430 |
+
|
| 431 |
+
```bash
|
| 432 |
+
# 1. 初始设置
|
| 433 |
+
git clone <repository>
|
| 434 |
+
cd <project>/docker
|
| 435 |
+
cp .env.docker .env
|
| 436 |
+
# 编辑 .env 文件
|
| 437 |
+
|
| 438 |
+
# 2. 启动服务
|
| 439 |
+
docker compose up -d
|
| 440 |
+
|
| 441 |
+
# 3. 版本更新
|
| 442 |
+
bash update.sh
|
| 443 |
+
|
| 444 |
+
# 4. 查看状态
|
| 445 |
+
docker compose ps
|
| 446 |
+
docker compose logs -f
|
| 447 |
+
```
|
| 448 |
+
|
| 449 |
+
### 配置文件说明
|
| 450 |
+
|
| 451 |
+
- **`.env`**: 您的实际配置文件 (从 `.env.docker` 复制并修改)
|
| 452 |
+
- **`.env.docker`**: Docker 环境的配置模板
|
| 453 |
+
- **`.env.example`**: 通用配置模板 (适用于所有环境)
|
| 454 |
+
- **`docker-compose.yml`**: Docker Compose 配置文件
|
| 455 |
+
|
| 456 |
+
这样的配置管理方式确保了 Docker 部署与本地开发的一致性���同时简化了配置和更新流程。
|
README.md
CHANGED
|
@@ -1,379 +1,77 @@
|
|
| 1 |
-
#
|
| 2 |
|
| 3 |
-
|
| 4 |
|
| 5 |
-
|
| 6 |
|
| 7 |
-
|
|
|
|
|
|
|
|
|
|
| 8 |
|
| 9 |
-
|
| 10 |
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
## 致谢 (Acknowledgements)
|
| 14 |
-
|
| 15 |
-
本项目的诞生与发展,离不开以下个人、组织和社区的慷慨支持与智慧贡献:
|
| 16 |
-
|
| 17 |
-
- **项目发起与主要开发**: @CJackHwang ([https://github.com/CJackHwang](https://github.com/CJackHwang))
|
| 18 |
-
- **功能完善、页面操作优化思路贡献**: @ayuayue ([https://github.com/ayuayue](https://github.com/ayuayue))
|
| 19 |
-
- **实时流式功能优化与完善**: @luispater ([https://github.com/luispater](https://github.com/luispater))
|
| 20 |
-
- **3400+行主文件项目重构伟大贡献**: @yattin (Holt) ([https://github.com/yattin](https://github.com/yattin))
|
| 21 |
-
- **项目后期高质量维护**: @Louie ([https://github.com/NikkeTryHard](https://github.com/NikkeTryHard))
|
| 22 |
-
- **社区支持与灵感碰撞**: 特别感谢 [Linux.do 社区](https://linux.do/) 成员们的热烈讨论、宝贵建议和问题反馈,你们的参与是项目前进的重要动力。
|
| 23 |
-
|
| 24 |
-
同时,我们衷心感谢所有通过提交 Issue、提供建议、分享使用体验、贡献代码修复等方式为本项目默默奉献的每一位朋友。是你们共同的努力,让这个项目变得更好!
|
| 25 |
-
|
| 26 |
-
---
|
| 27 |
-
|
| 28 |
-
**这是当前维护的 Python 版本。不再维护的 Javascript 版本请参见 [`deprecated_javascript_version/README.md`](deprecated_javascript_version/README.md)。**
|
| 29 |
-
|
| 30 |
-
## 系统要求
|
| 31 |
-
|
| 32 |
-
- **Python**: >=3.9, <4.0 (推荐 3.10+ 以获得最佳性能,Docker 环境使用 3.10)
|
| 33 |
-
- **依赖管理**: [Poetry](https://python-poetry.org/) (现代化 Python 依赖管理工具,替代传统 requirements.txt)
|
| 34 |
-
- **类型检查**: [Pyright](https://github.com/microsoft/pyright) (可选,用于开发时类型检查和 IDE 支持)
|
| 35 |
-
- **操作系统**: Windows, macOS, Linux (完全跨平台支持,Docker 部署支持 x86_64 和 ARM64)
|
| 36 |
-
- **内存**: 建议 2GB+ 可用内存 (浏览器自动化需要)
|
| 37 |
-
- **网络**: 稳定的互联网连接访问 Google AI Studio (支持代理配置)
|
| 38 |
-
|
| 39 |
-
## 主要特性
|
| 40 |
-
|
| 41 |
-
- **OpenAI 兼容 API**: 支持 `/v1/chat/completions` 端点,完全兼容 OpenAI 客户端和第三方工具
|
| 42 |
-
- **三层流式响应机制**: 集成流式代理 → 外部 Helper 服务 → Playwright 页面交互的多重保障
|
| 43 |
-
- **智能模型切换**: 通过 API 请求中的 `model` 字段动态切换 AI Studio 中的模型
|
| 44 |
-
- **完整参数控制**: 支持 `temperature`、`max_output_tokens`、`top_p`、`stop`、`reasoning_effort` 等所有主要参数
|
| 45 |
-
- **反指纹检测**: 使用 Camoufox 浏览器降低被检测为自动化脚本的风险
|
| 46 |
-
- **脚本注入功能 v3.0**: 使用 Playwright 原生网络拦截,支持油猴脚本动态挂载,100%可靠 🆕
|
| 47 |
-
- **现代化 Web UI**: 内置测试界面,支持实时聊天、状态监控、分级 API 密钥管理
|
| 48 |
-
- **图形界面启动器**: 提供功能丰富的 GUI 启动器,简化配置和进程管理
|
| 49 |
-
- **灵活认证系统**: 支持可选的 API 密钥认证,完全兼容 OpenAI 标准的 Bearer token 格式
|
| 50 |
-
- **模块化架构**: 清晰的模块分离设计,api_utils/、browser_utils/、config/ 等独立模块
|
| 51 |
-
- **统一配置管理**: 基于 `.env` 文件的统一配置方式,支持环境变量覆盖,Docker 兼容
|
| 52 |
-
- **现代化开发工具**: Poetry 依赖管理 + Pyright 类型检查,提供优秀的开发体验
|
| 53 |
-
|
| 54 |
-
## 系统架构
|
| 55 |
-
|
| 56 |
-
```mermaid
|
| 57 |
-
graph TD
|
| 58 |
-
subgraph "用户端 (User End)"
|
| 59 |
-
User["用户 (User)"]
|
| 60 |
-
WebUI["Web UI (Browser)"]
|
| 61 |
-
API_Client["API 客户端 (API Client)"]
|
| 62 |
-
end
|
| 63 |
-
|
| 64 |
-
subgraph "启动与配置 (Launch & Config)"
|
| 65 |
-
GUI_Launch["gui_launcher.py (图形启动器)"]
|
| 66 |
-
CLI_Launch["launch_camoufox.py (命令行启动)"]
|
| 67 |
-
EnvConfig[".env (统一配置)"]
|
| 68 |
-
KeyFile["auth_profiles/key.txt (API Keys)"]
|
| 69 |
-
ConfigDir["config/ (配置模块)"]
|
| 70 |
-
end
|
| 71 |
-
|
| 72 |
-
subgraph "核心应用 (Core Application)"
|
| 73 |
-
FastAPI_App["api_utils/app.py (FastAPI 应用)"]
|
| 74 |
-
Routes["api_utils/routes.py (路由处理)"]
|
| 75 |
-
RequestProcessor["api_utils/request_processor.py (请求处理)"]
|
| 76 |
-
AuthUtils["api_utils/auth_utils.py (认证管理)"]
|
| 77 |
-
PageController["browser_utils/page_controller.py (页面控制)"]
|
| 78 |
-
ScriptManager["browser_utils/script_manager.py (脚本注入)"]
|
| 79 |
-
ModelManager["browser_utils/model_management.py (模型管理)"]
|
| 80 |
-
StreamProxy["stream/ (流式代理服务器)"]
|
| 81 |
-
end
|
| 82 |
-
|
| 83 |
-
subgraph "外部依赖 (External Dependencies)"
|
| 84 |
-
CamoufoxInstance["Camoufox 浏览器 (反指纹)"]
|
| 85 |
-
AI_Studio["Google AI Studio"]
|
| 86 |
-
UserScript["油猴脚本 (可选)"]
|
| 87 |
-
end
|
| 88 |
-
|
| 89 |
-
User -- "运行 (Run)" --> GUI_Launch
|
| 90 |
-
User -- "运行 (Run)" --> CLI_Launch
|
| 91 |
-
User -- "访问 (Access)" --> WebUI
|
| 92 |
-
|
| 93 |
-
GUI_Launch -- "启动 (Starts)" --> CLI_Launch
|
| 94 |
-
CLI_Launch -- "启动 (Starts)" --> FastAPI_App
|
| 95 |
-
CLI_Launch -- "配置 (Configures)" --> StreamProxy
|
| 96 |
-
|
| 97 |
-
API_Client -- "API 请求 (Request)" --> FastAPI_App
|
| 98 |
-
WebUI -- "聊天请求 (Chat Request)" --> FastAPI_App
|
| 99 |
-
|
| 100 |
-
FastAPI_App -- "读取配置 (Reads Config)" --> EnvConfig
|
| 101 |
-
FastAPI_App -- "使用路由 (Uses Routes)" --> Routes
|
| 102 |
-
AuthUtils -- "验证密钥 (Validates Key)" --> KeyFile
|
| 103 |
-
ConfigDir -- "提供设置 (Provides Settings)" --> EnvConfig
|
| 104 |
-
|
| 105 |
-
Routes -- "处理请求 (Processes Request)" --> RequestProcessor
|
| 106 |
-
Routes -- "认证管理 (Auth Management)" --> AuthUtils
|
| 107 |
-
RequestProcessor -- "控制浏览器 (Controls Browser)" --> PageController
|
| 108 |
-
RequestProcessor -- "通过代理 (Uses Proxy)" --> StreamProxy
|
| 109 |
-
|
| 110 |
-
PageController -- "模型管理 (Model Management)" --> ModelManager
|
| 111 |
-
PageController -- "脚本注入 (Script Injection)" --> ScriptManager
|
| 112 |
-
ScriptManager -- "加载脚本 (Loads Script)" --> UserScript
|
| 113 |
-
ScriptManager -- "增强功能 (Enhances)" --> CamoufoxInstance
|
| 114 |
-
PageController -- "自动化 (Automates)" --> CamoufoxInstance
|
| 115 |
-
CamoufoxInstance -- "访问 (Accesses)" --> AI_Studio
|
| 116 |
-
StreamProxy -- "转发请求 (Forwards Request)" --> AI_Studio
|
| 117 |
-
|
| 118 |
-
AI_Studio -- "响应 (Response)" --> CamoufoxInstance
|
| 119 |
-
AI_Studio -- "响应 (Response)" --> StreamProxy
|
| 120 |
-
|
| 121 |
-
CamoufoxInstance -- "返回数据 (Returns Data)" --> PageController
|
| 122 |
-
StreamProxy -- "返回数据 (Returns Data)" --> RequestProcessor
|
| 123 |
-
|
| 124 |
-
FastAPI_App -- "API 响应 (Response)" --> API_Client
|
| 125 |
-
FastAPI_App -- "UI 响应 (Response)" --> WebUI
|
| 126 |
-
```
|
| 127 |
-
|
| 128 |
-
## 配置管理 ⭐
|
| 129 |
-
|
| 130 |
-
**新功能**: 项目现在支持通过 `.env` 文件进行配置管理,避免硬编码参数!
|
| 131 |
-
|
| 132 |
-
### 快速配置
|
| 133 |
-
|
| 134 |
-
```bash
|
| 135 |
-
# 1. 复制配置模板
|
| 136 |
-
cp .env.example .env
|
| 137 |
-
|
| 138 |
-
# 2. 编辑配置文件
|
| 139 |
-
nano .env # 或使用其他编辑器
|
| 140 |
-
|
| 141 |
-
# 3. 启动服务(自动读取配置)
|
| 142 |
-
python gui_launcher.py
|
| 143 |
-
# 或直接命令行启动
|
| 144 |
-
python launch_camoufox.py --headless
|
| 145 |
-
```
|
| 146 |
-
|
| 147 |
-
### 主要优势
|
| 148 |
-
|
| 149 |
-
- ✅ **版本更新无忧**: 一个 `git pull` 就完成更新,无需重新配置
|
| 150 |
-
- ✅ **配置集中管理**: 所有配置项统一在 `.env` 文件中
|
| 151 |
-
- ✅ **启动命令简化**: 无需复杂的命令行参数,一键启动
|
| 152 |
-
- ✅ **安全性**: `.env` 文件已被 `.gitignore` 忽略,不会泄露配置
|
| 153 |
-
- ✅ **灵活性**: 支持不同环境的配置管理
|
| 154 |
-
- ✅ **Docker 兼容**: Docker 和本地环境使用相同的配置方式
|
| 155 |
-
|
| 156 |
-
详细配置说明请参见 [环境变量配置指南](docs/environment-configuration.md)。
|
| 157 |
-
|
| 158 |
-
## 使用教程
|
| 159 |
-
|
| 160 |
-
推荐使用 [`gui_launcher.py`](gui_launcher.py) (图形界面) 或直接使用 [`launch_camoufox.py`](launch_camoufox.py) (命令行) 进行日常运行。仅在首次设置或认证过期时才需要使用调试模式。
|
| 161 |
-
|
| 162 |
-
### 快速开始
|
| 163 |
-
|
| 164 |
-
本项目采用现代化的 Python 开发工具链,使用 [Poetry](https://python-poetry.org/) 进行依赖管理,[Pyright](https://github.com/microsoft/pyright) 进行类型检查。
|
| 165 |
-
|
| 166 |
-
#### 🚀 一键安装脚本 (推荐)
|
| 167 |
-
|
| 168 |
-
```bash
|
| 169 |
-
# macOS/Linux 用户
|
| 170 |
-
curl -sSL https://raw.githubusercontent.com/CJackHwang/AIstudioProxyAPI/main/scripts/install.sh | bash
|
| 171 |
-
|
| 172 |
-
# Windows 用户 (PowerShell)
|
| 173 |
-
iwr -useb https://raw.githubusercontent.com/CJackHwang/AIstudioProxyAPI/main/scripts/install.ps1 | iex
|
| 174 |
-
```
|
| 175 |
-
|
| 176 |
-
#### 📋 手动安装步骤
|
| 177 |
-
|
| 178 |
-
1. **安装 Poetry** (如果尚未安装):
|
| 179 |
-
|
| 180 |
-
```bash
|
| 181 |
-
# macOS/Linux
|
| 182 |
-
curl -sSL https://install.python-poetry.org | python3 -
|
| 183 |
-
|
| 184 |
-
# Windows (PowerShell)
|
| 185 |
-
(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py -
|
| 186 |
-
|
| 187 |
-
# 或使用包管理器
|
| 188 |
-
# macOS: brew install poetry
|
| 189 |
-
# Ubuntu/Debian: apt install python3-poetry
|
| 190 |
-
```
|
| 191 |
-
|
| 192 |
-
2. **克隆项目**:
|
| 193 |
-
|
| 194 |
-
```bash
|
| 195 |
-
git clone https://github.com/CJackHwang/AIstudioProxyAPI.git
|
| 196 |
-
cd AIstudioProxyAPI
|
| 197 |
-
```
|
| 198 |
-
|
| 199 |
-
3. **安装依赖**:
|
| 200 |
-
Poetry 会自动创建虚拟环境并安装所有依赖:
|
| 201 |
-
|
| 202 |
-
```bash
|
| 203 |
-
poetry install
|
| 204 |
-
```
|
| 205 |
-
|
| 206 |
-
4. **激活虚拟环境**:
|
| 207 |
-
|
| 208 |
-
```bash
|
| 209 |
-
# 方式1: 激活 shell (推荐日常开发)
|
| 210 |
-
poetry env activate
|
| 211 |
-
|
| 212 |
-
# 方式2: 直接运行命令 (推荐自动化脚本)
|
| 213 |
-
poetry run python gui_launcher.py
|
| 214 |
-
```
|
| 215 |
-
|
| 216 |
-
#### 🔧 后续配置步骤
|
| 217 |
-
|
| 218 |
-
5. **环境配置**: 参见 [环境变量配置指南](docs/environment-configuration.md) - **推荐先配置**
|
| 219 |
-
6. **首次认证**: 参见 [认证设置指南](docs/authentication-setup.md)
|
| 220 |
-
7. **日常运行**: 参见 [日常运行指南](docs/daily-usage.md)
|
| 221 |
-
8. **API 使用**: 参见 [API 使用指南](docs/api-usage.md)
|
| 222 |
-
9. **Web 界面**: 参见 [Web UI 使用指南](docs/webui-guide.md)
|
| 223 |
-
|
| 224 |
-
#### 🛠️ 开发者选项
|
| 225 |
-
|
| 226 |
-
如果您是开发者,还可以:
|
| 227 |
|
| 228 |
```bash
|
| 229 |
-
#
|
| 230 |
-
|
| 231 |
-
|
| 232 |
-
# 启用类型检查 (需要安装 pyright)
|
| 233 |
-
npm install -g pyright
|
| 234 |
-
pyright
|
| 235 |
-
|
| 236 |
-
# 查看项目依赖树
|
| 237 |
-
poetry show --tree
|
| 238 |
-
|
| 239 |
-
# 更新依赖
|
| 240 |
-
poetry update
|
| 241 |
```
|
| 242 |
|
| 243 |
-
###
|
| 244 |
-
|
| 245 |
-
#### 🚀 快速上手
|
| 246 |
-
|
| 247 |
-
- [安装指南](docs/installation-guide.md) - 详细的安装步骤和环境配置
|
| 248 |
-
- [环境变量配置指南](docs/environment-configuration.md) - **.env 文件配置管理** ⭐
|
| 249 |
-
- [认证设置指南](docs/authentication-setup.md) - 首次运行与认证文件设置
|
| 250 |
-
- [日常运行指南](docs/daily-usage.md) - 日常使用和配置选项
|
| 251 |
-
|
| 252 |
-
#### 🔧 功能使用
|
| 253 |
-
|
| 254 |
-
- [API 使用指南](docs/api-usage.md) - API 端点和客户端配置
|
| 255 |
-
- [Web UI 使用指南](docs/webui-guide.md) - Web 界面功能说明
|
| 256 |
-
- [脚本注入指南](docs/script_injection_guide.md) - 油猴脚本动态挂载功能使用指南 (v3.0) 🆕
|
| 257 |
-
|
| 258 |
-
#### ⚙️ 高级配置
|
| 259 |
-
|
| 260 |
-
- [流式处理模式详解](docs/streaming-modes.md) - 三层响应获取机制详细说明 🆕
|
| 261 |
-
- [高级配置指南](docs/advanced-configuration.md) - 高级功能和配置选项
|
| 262 |
-
- [日志控制指南](docs/logging-control.md) - 日志系统配置和调试
|
| 263 |
-
- [故障排除指南](docs/troubleshooting.md) - 常见问题解决方案
|
| 264 |
-
|
| 265 |
-
#### 🛠️ 开发相关
|
| 266 |
-
|
| 267 |
-
- [项目架构指南](docs/architecture-guide.md) - 模块化架构设计和组件详解 🆕
|
| 268 |
-
- [开发者指南](docs/development-guide.md) - Poetry、Pyright 和开发工作流程
|
| 269 |
-
- [依赖版本说明](docs/dependency-versions.md) - Poetry 依赖管理和版本控制详解
|
| 270 |
-
|
| 271 |
-
## 客户端配置示例
|
| 272 |
-
|
| 273 |
-
以 Open WebUI 为例:
|
| 274 |
-
|
| 275 |
-
1. 打开 Open WebUI
|
| 276 |
-
2. 进入 "设置" -> "连接"
|
| 277 |
-
3. 在 "模型" 部分,点击 "添加模型"
|
| 278 |
-
4. **模型名称**: 输入你想要的名字,例如 `aistudio-gemini-py`
|
| 279 |
-
5. **API 基础 URL**: 输入 `http://127.0.0.1:2048/v1`
|
| 280 |
-
6. **API 密钥**: 留空或输入任意字符
|
| 281 |
-
7. 保存设置并开始聊天
|
| 282 |
-
|
| 283 |
-
---
|
| 284 |
-
|
| 285 |
-
## 🐳 Docker 部署
|
| 286 |
-
|
| 287 |
-
本项目支持通过 Docker 进行部署,使用 **Poetry** 进行依赖管理,**完全支持 `.env` 配置文件**!
|
| 288 |
-
|
| 289 |
-
> 📁 **注意**: 所有 Docker 相关文件已移至 `docker/` 目录,保持项目根目录整洁。
|
| 290 |
-
|
| 291 |
-
### 🚀 快速 Docker 部署
|
| 292 |
|
| 293 |
```bash
|
| 294 |
-
#
|
| 295 |
cd docker
|
| 296 |
-
cp .env.docker .env
|
| 297 |
-
nano .env # 编辑配置
|
| 298 |
|
| 299 |
-
#
|
| 300 |
docker compose up -d
|
| 301 |
|
| 302 |
-
#
|
| 303 |
docker compose logs -f
|
| 304 |
-
|
| 305 |
-
# 4. 版本更新 (在 docker 目录下)
|
| 306 |
-
bash update.sh
|
| 307 |
```
|
| 308 |
|
| 309 |
-
###
|
| 310 |
-
|
| 311 |
-
- [Docker 部署指南 (docker/README-Docker.md)](docker/README-Docker.md) - 包含完整的 Poetry + `.env` 配置说明
|
| 312 |
-
- [Docker 快速指南 (docker/README.md)](docker/README.md) - 快速开始指南
|
| 313 |
-
|
| 314 |
-
### ✨ Docker 特性
|
| 315 |
-
|
| 316 |
-
- ✅ **Poetry 依赖管理**: 使用现代化的 Python 依赖管理工具
|
| 317 |
-
- ✅ **多阶段构建**: 优化镜像大小和构建速度
|
| 318 |
-
- ✅ **配置统一**: 使用 `.env` 文件管理所有配置
|
| 319 |
-
- ✅ **版本更新**: `bash update.sh` 即可完成更新
|
| 320 |
-
- ✅ **目录整洁**: Docker 文件已移至 `docker/` 目录
|
| 321 |
-
- ✅ **跨平台支持**: 支持 x86_64 和 ARM64 架构
|
| 322 |
-
- ⚠️ **认证文件**: 首次运行需要在主机上获取认证文件,然后挂载到容器中
|
| 323 |
-
|
| 324 |
-
---
|
| 325 |
-
|
| 326 |
-
## 关于 Camoufox
|
| 327 |
-
|
| 328 |
-
本项目使用 [Camoufox](https://camoufox.com/) 来提供具有增强反指纹检测能力的浏览器实例。
|
| 329 |
-
|
| 330 |
-
- **核心目标**: 模拟真实用户流量,避免被网站识别为自动化脚本或机器人
|
| 331 |
-
- **实现方式**: Camoufox 基于 Firefox,通过修改浏览器底层 C++ 实现来伪装设备指纹(如屏幕、操作系统、WebGL、字体等),而不是通过容易被检测到的 JavaScript 注入
|
| 332 |
-
- **Playwright 兼容**: Camoufox 提供了与 Playwright 兼容的接口
|
| 333 |
-
- **Python 接口**: Camoufox 提供了 Python 包,可以通过 `camoufox.server.launch_server()` 启动其服务,并通过 WebSocket 连接进行控制
|
| 334 |
|
| 335 |
-
|
| 336 |
-
|
| 337 |
-
|
| 338 |
-
|
| 339 |
-
### 三层响应获取机制与参数控制
|
| 340 |
-
|
| 341 |
-
- **响应获取优先级**: 项目采用三层响应获取机制,确保高可用性:
|
| 342 |
-
|
| 343 |
-
1. **集成流式代理服务 (Stream Proxy)**: 默认启用,端口 3120,提供最佳性能和稳定性
|
| 344 |
-
2. **外部 Helper 服务**: 可选配置,需要有效认证文件,作为备用方案
|
| 345 |
-
3. **Playwright 页面交互**: 最终后备方案,通过浏览器自动化获取响应
|
| 346 |
-
|
| 347 |
-
- **参数控制机制**:
|
| 348 |
-
|
| 349 |
-
- **流式代理模式**: 支持基础参数传递,性能最优
|
| 350 |
-
- **Helper 服务模式**: 参数支持取决于外部服务实现
|
| 351 |
-
- **Playwright 模式**: 完整支持所有参数(`temperature`, `max_output_tokens`, `top_p`, `stop`, `reasoning_effort`等)
|
| 352 |
-
|
| 353 |
-
- **脚本注入增强**: v3.0 版本使用 Playwright 原生网络拦截,确保注入模型与原生模型 100%一致
|
| 354 |
|
| 355 |
-
|
| 356 |
|
| 357 |
-
|
| 358 |
|
| 359 |
-
##
|
| 360 |
|
| 361 |
-
|
|
|
|
|
|
|
| 362 |
|
| 363 |
-
|
| 364 |
-
|
| 365 |
-
- **流程健壮性优化**: 减少错误几率和接近原生体验
|
| 366 |
|
| 367 |
-
|
|
|
|
| 368 |
|
| 369 |
-
|
|
|
|
| 370 |
|
| 371 |
-
|
|
|
|
|
|
|
| 372 |
|
| 373 |
-
|
| 374 |
|
| 375 |
-
|
|
|
|
|
|
|
|
|
|
| 376 |
|
| 377 |
-
|
| 378 |
|
| 379 |
-
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Docker 部署文件
|
| 2 |
|
| 3 |
+
这个目录包含了 AI Studio Proxy API 项目的所有 Docker 相关文件。
|
| 4 |
|
| 5 |
+
## 📁 文件说明
|
| 6 |
|
| 7 |
+
- **`Dockerfile`** - Docker 镜像构建文件
|
| 8 |
+
- **`docker-compose.yml`** - Docker Compose 配置文件
|
| 9 |
+
- **`.env.docker`** - Docker 环境配置模板
|
| 10 |
+
- **`README-Docker.md`** - 详细的 Docker 部署指南
|
| 11 |
|
| 12 |
+
## 🚀 快速开始
|
| 13 |
|
| 14 |
+
### 1. 准备配置文件
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 15 |
|
| 16 |
```bash
|
| 17 |
+
# 进入 docker 目录
|
| 18 |
+
cp .env.docker .env
|
| 19 |
+
nano .env # 编辑配置文件
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 20 |
```
|
| 21 |
|
| 22 |
+
### 2. 启动服务
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23 |
|
| 24 |
```bash
|
| 25 |
+
# 进入 docker 目录
|
| 26 |
cd docker
|
|
|
|
|
|
|
| 27 |
|
| 28 |
+
# 构建并启动服务
|
| 29 |
docker compose up -d
|
| 30 |
|
| 31 |
+
# 查看日志
|
| 32 |
docker compose logs -f
|
|
|
|
|
|
|
|
|
|
| 33 |
```
|
| 34 |
|
| 35 |
+
### 3. 版本更新
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 36 |
|
| 37 |
+
```bash
|
| 38 |
+
# 在 docker 目录下
|
| 39 |
+
bash update.sh
|
| 40 |
+
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 41 |
|
| 42 |
+
## 📖 详细文档
|
| 43 |
|
| 44 |
+
完整的 Docker 部署指南请参见:[README-Docker.md](README-Docker.md)
|
| 45 |
|
| 46 |
+
## 🔧 常用命令
|
| 47 |
|
| 48 |
+
```bash
|
| 49 |
+
# 查看服务状态
|
| 50 |
+
docker compose ps
|
| 51 |
|
| 52 |
+
# 查看日志
|
| 53 |
+
docker compose logs -f
|
|
|
|
| 54 |
|
| 55 |
+
# 停止服务
|
| 56 |
+
docker compose down
|
| 57 |
|
| 58 |
+
# 重启服务
|
| 59 |
+
docker compose restart
|
| 60 |
|
| 61 |
+
# 进入容器
|
| 62 |
+
docker compose exec ai-studio-proxy /bin/bash
|
| 63 |
+
```
|
| 64 |
|
| 65 |
+
## 🌟 主要优势
|
| 66 |
|
| 67 |
+
- ✅ **统一配置**: 使用 `.env` 文件管理所有配置
|
| 68 |
+
- ✅ **版本更新无忧**: `bash update.sh` 即可完成更新
|
| 69 |
+
- ✅ **环境隔离**: 容器化部署,避免环境冲突
|
| 70 |
+
- ✅ **配置持久化**: 认证文件和日志持久化存储
|
| 71 |
|
| 72 |
+
## ⚠️ 注意事项
|
| 73 |
|
| 74 |
+
1. **认证文件**: 首次运行需要在主机上获取认证文件
|
| 75 |
+
2. **端口配置**: 确保主机端口未被占用
|
| 76 |
+
3. **配置文件**: `.env` 文件需要放在 `docker/` 目录下,确保正确获取环境变量
|
| 77 |
+
4. **目录结构**: Docker 文件已移至 `docker/` 目录,保持项目根目录整洁
|
SCRIPT_INJECTION_DOCKER.md
ADDED
|
@@ -0,0 +1,209 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Docker 环境脚本注入配置指南
|
| 2 |
+
|
| 3 |
+
## 概述
|
| 4 |
+
|
| 5 |
+
本指南专门针对 Docker 环境中的油猴脚本注入功能配置。
|
| 6 |
+
|
| 7 |
+
## 快速开始
|
| 8 |
+
|
| 9 |
+
### 1. 基础配置
|
| 10 |
+
|
| 11 |
+
```bash
|
| 12 |
+
# 进入 docker 目录
|
| 13 |
+
cd docker
|
| 14 |
+
|
| 15 |
+
# 复制配置模板
|
| 16 |
+
cp .env.docker .env
|
| 17 |
+
|
| 18 |
+
# 编辑配置文件
|
| 19 |
+
nano .env
|
| 20 |
+
```
|
| 21 |
+
|
| 22 |
+
在 `.env` 文件中确保以下配置:
|
| 23 |
+
|
| 24 |
+
```env
|
| 25 |
+
# 启用脚本注入
|
| 26 |
+
ENABLE_SCRIPT_INJECTION=true
|
| 27 |
+
|
| 28 |
+
# 使用默认脚本(模型数据直接从脚本解析)
|
| 29 |
+
USERSCRIPT_PATH=browser_utils/more_modles.js
|
| 30 |
+
```
|
| 31 |
+
|
| 32 |
+
### 2. 启动容器
|
| 33 |
+
|
| 34 |
+
```bash
|
| 35 |
+
# 构建并启动
|
| 36 |
+
docker compose up -d
|
| 37 |
+
|
| 38 |
+
# 查看日志确认脚本注入状态
|
| 39 |
+
docker compose logs -f | grep "脚本注入"
|
| 40 |
+
```
|
| 41 |
+
|
| 42 |
+
## 自定义配置
|
| 43 |
+
|
| 44 |
+
### 方法 1: 直接替换脚本文件
|
| 45 |
+
|
| 46 |
+
```bash
|
| 47 |
+
# 1. 创建自定义油猴脚本
|
| 48 |
+
cp ../browser_utils/more_modles.js ../browser_utils/my_custom_script.js
|
| 49 |
+
|
| 50 |
+
# 2. 编辑脚本文件中的 MODELS_TO_INJECT 数组
|
| 51 |
+
nano ../browser_utils/my_custom_script.js
|
| 52 |
+
|
| 53 |
+
# 3. 重启容器
|
| 54 |
+
docker compose restart
|
| 55 |
+
```
|
| 56 |
+
|
| 57 |
+
### 方法 2: 挂载自定义脚本
|
| 58 |
+
|
| 59 |
+
```bash
|
| 60 |
+
# 1. 创建自定义脚本文件
|
| 61 |
+
cp ../browser_utils/more_modles.js ../browser_utils/my_script.js
|
| 62 |
+
|
| 63 |
+
# 2. 编辑 docker-compose.yml,取消注释并修改:
|
| 64 |
+
# volumes:
|
| 65 |
+
# - ../browser_utils/my_script.js:/app/browser_utils/more_modles.js:ro
|
| 66 |
+
|
| 67 |
+
# 3. 重启服务
|
| 68 |
+
docker compose down
|
| 69 |
+
docker compose up -d
|
| 70 |
+
```
|
| 71 |
+
|
| 72 |
+
### 方法 3: 环境变量配置
|
| 73 |
+
|
| 74 |
+
```bash
|
| 75 |
+
# 1. 在 .env 文件中修改路径
|
| 76 |
+
echo "USERSCRIPT_PATH=browser_utils/my_custom_script.js" >> .env
|
| 77 |
+
|
| 78 |
+
# 2. 创建对应的脚本文件
|
| 79 |
+
cp ../browser_utils/more_modles.js ../browser_utils/my_custom_script.js
|
| 80 |
+
|
| 81 |
+
# 3. 重启容器
|
| 82 |
+
docker compose restart
|
| 83 |
+
```
|
| 84 |
+
|
| 85 |
+
## 验证脚本注入
|
| 86 |
+
|
| 87 |
+
### 检查日志
|
| 88 |
+
|
| 89 |
+
```bash
|
| 90 |
+
# 查看脚本注入相关日志
|
| 91 |
+
docker compose logs | grep -E "(脚本注入|script.*inject|模型增强)"
|
| 92 |
+
|
| 93 |
+
# 实时监控日志
|
| 94 |
+
docker compose logs -f | grep -E "(脚本注入|script.*inject|模型增强)"
|
| 95 |
+
```
|
| 96 |
+
|
| 97 |
+
### 预期日志输出
|
| 98 |
+
|
| 99 |
+
成功的脚本注入应该显示类似以下日志:
|
| 100 |
+
|
| 101 |
+
```
|
| 102 |
+
设置网络拦截和脚本注入...
|
| 103 |
+
成功设置模型列表网络拦截
|
| 104 |
+
成功解析 6 个模型从油猴脚本
|
| 105 |
+
添加了 6 个注入的模型到API模型列表
|
| 106 |
+
✅ 脚本注入成功,模型显示效果与油猴脚本100%一致
|
| 107 |
+
解析的模型: 👑 Kingfall, ✨ Gemini 2.5 Pro, 🦁 Goldmane...
|
| 108 |
+
```
|
| 109 |
+
|
| 110 |
+
### 进入容器检查
|
| 111 |
+
|
| 112 |
+
```bash
|
| 113 |
+
# 进入容器
|
| 114 |
+
docker compose exec ai-studio-proxy /bin/bash
|
| 115 |
+
|
| 116 |
+
# 检查脚本文件
|
| 117 |
+
cat /app/browser_utils/more_modles.js
|
| 118 |
+
|
| 119 |
+
# 检查脚本文件列表
|
| 120 |
+
ls -la /app/browser_utils/*.js
|
| 121 |
+
|
| 122 |
+
# 退出容器
|
| 123 |
+
exit
|
| 124 |
+
```
|
| 125 |
+
|
| 126 |
+
## 故障排除
|
| 127 |
+
|
| 128 |
+
### 脚本注入失败
|
| 129 |
+
|
| 130 |
+
1. **检查配置文件路径**:
|
| 131 |
+
```bash
|
| 132 |
+
docker compose exec ai-studio-proxy ls -la /app/browser_utils/
|
| 133 |
+
```
|
| 134 |
+
|
| 135 |
+
2. **检查文件权限**:
|
| 136 |
+
```bash
|
| 137 |
+
docker compose exec ai-studio-proxy cat /app/browser_utils/more_modles.js
|
| 138 |
+
```
|
| 139 |
+
|
| 140 |
+
3. **查看详细错误日志**:
|
| 141 |
+
```bash
|
| 142 |
+
docker compose logs | grep -A 5 -B 5 "脚本注入"
|
| 143 |
+
```
|
| 144 |
+
|
| 145 |
+
### 脚本文件无效
|
| 146 |
+
|
| 147 |
+
1. **验证 JavaScript 格式**:
|
| 148 |
+
```bash
|
| 149 |
+
# 在主机上验证 JavaScript 语法
|
| 150 |
+
node -c browser_utils/more_modles.js
|
| 151 |
+
```
|
| 152 |
+
|
| 153 |
+
2. **检查必需字段**:
|
| 154 |
+
确保每个模型都有 `name` 和 `displayName` 字段。
|
| 155 |
+
|
| 156 |
+
### 禁用脚本注入
|
| 157 |
+
|
| 158 |
+
如果遇到问题,可以临时禁用:
|
| 159 |
+
|
| 160 |
+
```bash
|
| 161 |
+
# 在 .env 文件中设置
|
| 162 |
+
echo "ENABLE_SCRIPT_INJECTION=false" >> .env
|
| 163 |
+
|
| 164 |
+
# 重启容器
|
| 165 |
+
docker compose restart
|
| 166 |
+
```
|
| 167 |
+
|
| 168 |
+
## 高级配置
|
| 169 |
+
|
| 170 |
+
### 使用自定义脚本
|
| 171 |
+
|
| 172 |
+
```bash
|
| 173 |
+
# 1. 将自定义脚本放在 browser_utils/ 目录
|
| 174 |
+
cp your_custom_script.js ../browser_utils/custom_injector.js
|
| 175 |
+
|
| 176 |
+
# 2. 在 .env 中修改脚本路径
|
| 177 |
+
echo "USERSCRIPT_PATH=browser_utils/custom_injector.js" >> .env
|
| 178 |
+
|
| 179 |
+
# 3. 重启容器
|
| 180 |
+
docker compose restart
|
| 181 |
+
```
|
| 182 |
+
|
| 183 |
+
### 多环境配置
|
| 184 |
+
|
| 185 |
+
```bash
|
| 186 |
+
# 开发环境
|
| 187 |
+
cp .env.docker .env.dev
|
| 188 |
+
# 编辑 .env.dev
|
| 189 |
+
|
| 190 |
+
# 生产环境
|
| 191 |
+
cp .env.docker .env.prod
|
| 192 |
+
# 编辑 .env.prod
|
| 193 |
+
|
| 194 |
+
# 使用特定环境启动
|
| 195 |
+
cp .env.prod .env
|
| 196 |
+
docker compose up -d
|
| 197 |
+
```
|
| 198 |
+
|
| 199 |
+
## 注意事项
|
| 200 |
+
|
| 201 |
+
1. **文件挂载**: 确保主机上的文件路径正确
|
| 202 |
+
2. **权限问题**: Docker 容器内的文件权限可能需要调整
|
| 203 |
+
3. **重启生效**: 配置更改后需要重启容器
|
| 204 |
+
4. **日志监控**: 通过日志确认脚本注入状态
|
| 205 |
+
5. **备份配置**: 建议备份工作的配置文件
|
| 206 |
+
|
| 207 |
+
## 示例配置文件
|
| 208 |
+
|
| 209 |
+
参考 `model_configs_docker_example.json` 文件了解完整的配置格式和选项。
|
docker-compose.yml
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
services:
|
| 2 |
+
ai-studio-proxy:
|
| 3 |
+
build:
|
| 4 |
+
context: ..
|
| 5 |
+
dockerfile: docker/Dockerfile
|
| 6 |
+
container_name: ai-studio-proxy-container
|
| 7 |
+
mem_limit: ${DOCKER_MEMORY_LIMIT:-0}
|
| 8 |
+
memswap_limit: ${DOCKER_MEMSWAP_LIMIT:-0}
|
| 9 |
+
ports:
|
| 10 |
+
- "${HOST_FASTAPI_PORT:-2048}:${DEFAULT_FASTAPI_PORT:-2048}"
|
| 11 |
+
- "${HOST_STREAM_PORT:-3120}:${STREAM_PORT:-3120}"
|
| 12 |
+
volumes:
|
| 13 |
+
# 挂载认证文件目录 (必需)
|
| 14 |
+
- ../auth_profiles:/app/auth_profiles
|
| 15 |
+
# 挂载 .env 配置文件 (推荐)
|
| 16 |
+
# 请将 docker/.env.docker 复制为 docker/.env 并根据需要修改
|
| 17 |
+
- ../docker/.env:/app/.env:ro
|
| 18 |
+
# 挂载日志目录 (可选,用于持久化日志)
|
| 19 |
+
# 如果出现权限报错,需要修改日志目录权限 sudo chmod -R 777 ../logs
|
| 20 |
+
# - ../logs:/app/logs
|
| 21 |
+
# 挂载自定义证书 (可选)
|
| 22 |
+
# - ../certs:/app/certs:ro
|
| 23 |
+
# 挂载脚本注入相关文件 (可选,用于自定义脚本和模型配置)
|
| 24 |
+
# 如果您有自定义的油猴脚本或模型配置,可以取消注释以下行
|
| 25 |
+
# - ../browser_utils/custom_scripts:/app/browser_utils/custom_scripts:ro
|
| 26 |
+
# - ../browser_utils/model_configs.json:/app/browser_utils/model_configs.json:ro
|
| 27 |
+
environment:
|
| 28 |
+
# 这些环境变量会覆盖 .env 文件中的设置
|
| 29 |
+
# 如果您想使用 .env 文件,可以注释掉这些行
|
| 30 |
+
- PYTHONUNBUFFERED=1
|
| 31 |
+
# - PORT=${PORT:-8000}
|
| 32 |
+
# - DEFAULT_FASTAPI_PORT=${DEFAULT_FASTAPI_PORT:-2048}
|
| 33 |
+
# - DEFAULT_CAMOUFOX_PORT=${DEFAULT_CAMOUFOX_PORT:-9222}
|
| 34 |
+
# - STREAM_PORT=${STREAM_PORT:-3120}
|
| 35 |
+
# - SERVER_LOG_LEVEL=${SERVER_LOG_LEVEL:-INFO}
|
| 36 |
+
# - DEBUG_LOGS_ENABLED=${DEBUG_LOGS_ENABLED:-false}
|
| 37 |
+
# - AUTO_CONFIRM_LOGIN=${AUTO_CONFIRM_LOGIN:-true}
|
| 38 |
+
# 代理配置 (可选)
|
| 39 |
+
# - HTTP_PROXY=${HTTP_PROXY}
|
| 40 |
+
# - HTTPS_PROXY=${HTTPS_PROXY}
|
| 41 |
+
# - UNIFIED_PROXY_CONFIG=${UNIFIED_PROXY_CONFIG}
|
| 42 |
+
restart: unless-stopped
|
| 43 |
+
healthcheck:
|
| 44 |
+
test: ["CMD", "curl", "-f", "http://localhost:${DEFAULT_FASTAPI_PORT:-2048}/health"]
|
| 45 |
+
interval: 30s
|
| 46 |
+
timeout: 10s
|
| 47 |
+
retries: 3
|
| 48 |
+
start_period: 40s
|
| 49 |
+
# 可选:如果需要特定的网络配置
|
| 50 |
+
# networks:
|
| 51 |
+
# - ai-studio-network
|
| 52 |
+
|
| 53 |
+
# 可选:自定义网络
|
| 54 |
+
# networks:
|
| 55 |
+
# ai-studio-network:
|
| 56 |
+
# driver: bridge
|
update.sh
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
|
| 3 |
+
# 定义颜色变量以便复用
|
| 4 |
+
GREEN='\033[0;32m'
|
| 5 |
+
YELLOW='\033[1;33m'
|
| 6 |
+
NC='\033[0m'
|
| 7 |
+
|
| 8 |
+
set -e
|
| 9 |
+
|
| 10 |
+
echo -e "${GREEN}==> 正在更新并重启服务...${NC}"
|
| 11 |
+
|
| 12 |
+
# 获取脚本所在的目录,并切换到项目根目录
|
| 13 |
+
SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &> /dev/null && pwd)
|
| 14 |
+
cd "$SCRIPT_DIR/.."
|
| 15 |
+
|
| 16 |
+
echo -e "${YELLOW}--> 步骤 1/4: 拉取最新的代码...${NC}"
|
| 17 |
+
git pull
|
| 18 |
+
|
| 19 |
+
cd "$SCRIPT_DIR"
|
| 20 |
+
|
| 21 |
+
echo -e "${YELLOW}--> 步骤 2/4: 停止并移除旧的容器...${NC}"
|
| 22 |
+
docker compose down
|
| 23 |
+
|
| 24 |
+
echo -e "${YELLOW}--> 步骤 3/4: 使用 Docker Compose 构建并启动新容器...${NC}"
|
| 25 |
+
docker compose up -d --build
|
| 26 |
+
|
| 27 |
+
echo -e "${YELLOW}--> 步骤 4/4: 显示当前运行的容器状态...${NC}"
|
| 28 |
+
docker compose ps
|
| 29 |
+
|
| 30 |
+
echo -e "${GREEN}==> 更新完成!${NC}"
|