lengfeng1360 commited on
Commit
9b7863a
·
verified ·
1 Parent(s): 3375948

Upload 7 files

Browse files
Files changed (7) hide show
  1. .env.docker +150 -0
  2. Dockerfile +116 -0
  3. README-Docker.md +456 -0
  4. README.md +46 -348
  5. SCRIPT_INJECTION_DOCKER.md +209 -0
  6. docker-compose.yml +56 -0
  7. 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
- # AI Studio Proxy API
2
 
3
- 这是一个基于 Python 的代理服务器,用于将 Google AI Studio 的网页界面转换为 OpenAI 兼容的 API。通过 Camoufox (反指纹检测的 Firefox) 和 Playwright 自动化,提供稳定的 API 访问。
4
 
5
- [![Star History Chart](https://api.star-history.com/svg?repos=CJackHwang/AIstudioProxyAPI&type=Date)](https://www.star-history.com/#CJackHwang/AIstudioProxyAPI&Date)
6
 
7
- This project is generously sponsored by ZMTO. Visit their website: [https://zmto.com/](https://zmto.com/)
 
 
 
8
 
9
- 本项目由 ZMTO 慷慨赞助服务器支持。访问他们的网站:[https://zmto.com/](https://zmto.com/)
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
- poetry install --with dev
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
- # 1. 准备配置文件
295
  cd docker
296
- cp .env.docker .env
297
- nano .env # 编辑配置
298
 
299
- # 2. 使用 Docker Compose 启动
300
  docker compose up -d
301
 
302
- # 3. 查看日志
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
- 使用 Camoufox 的主要目的是提高与 AI Studio 网页交互时的隐蔽性,减少被检测或限制的可能性。但请注意,没��任何反指纹技术是绝对完美的。
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
- **客户端管理历史,代理不支持 UI 内编辑**: 客户端负责维护完整的聊天记录并将其发送给代理。代理服务器本身不支持在 AI Studio 界面中对历史消息进行编辑或分叉操作。
358
 
359
- ## 未来计划
360
 
361
- 以下是一些计划中的改进方向:
 
 
362
 
363
- - **云服务器部署指南**: 提供更详细的在主流云平台上部署和管理服务的指南
364
- - **认证更新流程优化**: 探索更便捷的认证文件更新机制,减少手动操作
365
- - **流程健壮性优化**: 减少错误几率和接近原生体验
366
 
367
- ## 贡献
 
368
 
369
- 欢迎提交 Issue 和 Pull Request!
 
370
 
371
- ## License
 
 
372
 
373
- [AGPLv3](LICENSE)
374
 
375
- ## 开发不易,支持作者
 
 
 
376
 
377
- 如果您觉得本项目对您有帮助,并且希望支持作者的持续开发,欢迎通过以下方式进行捐赠。您的支持是对我们最大的鼓励!
378
 
379
- ![开发不易,支持作者](./支持作者.jpg)
 
 
 
 
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}"