File size: 10,126 Bytes
77169b4 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 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 380 381 | # Web2API 部署指南
本文档介绍如何将 Web2API 部署到本地 Ubuntu、远程 VPS 或 Render 平台。
---
## 目录
- [系统要求](#系统要求)
- [方式一:Docker 部署(推荐)](#方式一docker-部署推荐)
- [方式二:Docker Compose 部署](#方式二docker-compose-部署)
- [方式三:Ubuntu 裸机部署](#方式三ubuntu-裸机部署)
- [方式四:Render 部署](#方式四render-部署)
- [环境变量参考](#环境变量参考)
- [部署后配置](#部署后配置)
- [常见问题](#常见问题)
---
## 系统要求
| 项目 | 最低要求 | 推荐配置 |
|------|---------|---------|
| CPU | 1 核 | 2 核+ |
| 内存 | 1 GB | 2 GB+ |
| 磁盘 | 2 GB | 5 GB+ |
| 系统 | Ubuntu 22.04+ / Debian 12+ | Ubuntu 24.04 |
| Python | 3.12+ | 3.12 |
| 架构 | amd64 / arm64 | amd64 |
---
## 方式一:Docker 部署(推荐)
最简单的部署方式,适用于本地 Ubuntu 和远程 VPS。
### 1. 安装 Docker
```bash
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
# 重新登录使 docker 组生效
```
### 2. 构建镜像
```bash
git clone https://github.com/shenhao-stu/web2api.git
cd web2api
git checkout feat/huggingface-postgres-space
docker build -t web2api .
```
### 3. 运行容器
```bash
docker run -d \
--name web2api \
-p 9000:9000 \
-v web2api-data:/data \
-e WEB2API_AUTH_API_KEY="your-api-key-here" \
-e WEB2API_AUTH_CONFIG_SECRET="your-admin-password" \
-e WEB2API_BROWSER_NO_SANDBOX=true \
-e WEB2API_BROWSER_DISABLE_GPU=true \
-e WEB2API_BROWSER_DISABLE_GPU_SANDBOX=true \
web2api
```
### 4. 验证
```bash
# 检查服务状态
curl http://localhost:9000/claude/v1/models \
-H "Authorization: Bearer your-api-key-here"
# 测试对话
curl http://localhost:9000/claude/v1/chat/completions \
-H "Authorization: Bearer your-api-key-here" \
-H "Content-Type: application/json" \
-d '{"model":"claude-sonnet-4.6","stream":false,"messages":[{"role":"user","content":"Hello"}]}'
```
---
## 方式二:Docker Compose 部署
适合需要 PostgreSQL 持久化配置的场景。
创建 `docker-compose.yml`:
```yaml
services:
web2api:
build: .
ports:
- "9000:9000"
volumes:
- web2api-data:/data
environment:
- WEB2API_AUTH_API_KEY=your-api-key-here
- WEB2API_AUTH_CONFIG_SECRET=your-admin-password
- WEB2API_BROWSER_NO_SANDBOX=true
- WEB2API_BROWSER_DISABLE_GPU=true
- WEB2API_BROWSER_DISABLE_GPU_SANDBOX=true
- WEB2API_DATABASE_URL=postgresql://web2api:web2api@db:5432/web2api
depends_on:
db:
condition: service_healthy
restart: unless-stopped
db:
image: postgres:16-alpine
environment:
POSTGRES_USER: web2api
POSTGRES_PASSWORD: web2api
POSTGRES_DB: web2api
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U web2api"]
interval: 5s
timeout: 3s
retries: 5
restart: unless-stopped
volumes:
web2api-data:
pgdata:
```
```bash
docker compose up -d
```
---
## 方式三:Ubuntu 裸机部署
适合不想用 Docker 的场景,或需要更精细控制的 VPS。
### 1. 安装系统依赖
```bash
sudo apt-get update && sudo apt-get install -y \
ca-certificates curl xz-utils xvfb xauth \
python3 python3-pip python3-venv python-is-python3 \
software-properties-common fonts-liberation \
libasound2t64 libatk-bridge2.0-0t64 libatk1.0-0t64 \
libcairo2 libcups2t64 libdbus-1-3 libdrm2 \
libfontconfig1 libgbm1 libglib2.0-0t64 libgtk-3-0t64 \
libnspr4 libnss3 libpango-1.0-0 libu2f-udev \
libvulkan1 libx11-6 libx11-xcb1 libxcb1 \
libxcomposite1 libxdamage1 libxext6 libxfixes3 \
libxkbcommon0 libxrandr2 libxrender1 libxshmfence1
```
> 注意:Ubuntu 22.04 上部分包名不带 `t64` 后缀,如 `libasound2`、`libcups2` 等。
### 2. 安装 Fingerprint Chromium
```bash
# AMD64
sudo mkdir -p /opt/fingerprint-chromium
curl -L "https://github.com/adryfish/fingerprint-chromium/releases/download/142.0.7444.175/ungoogled-chromium-142.0.7444.175-1-x86_64_linux.tar.xz" \
-o /tmp/fp-chromium.tar.xz
sudo tar -xf /tmp/fp-chromium.tar.xz -C /opt/fingerprint-chromium --strip-components=1
rm /tmp/fp-chromium.tar.xz
# 验证
/opt/fingerprint-chromium/chrome --version
```
### 3. 安装 Python 依赖
```bash
cd /opt
git clone https://github.com/shenhao-stu/web2api.git
cd web2api
git checkout feat/huggingface-postgres-space
python -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install curl-cffi fastapi playwright pyyaml python-dotenv pydantic pytz "uvicorn[standard]"
# 如需 PostgreSQL 支持
pip install "psycopg[binary]"
```
### 4. 创建配置文件
```bash
mkdir -p /data
cp docker/config.container.yaml /data/config.yaml
```
根据需要编辑 `/data/config.yaml`,或通过环境变量覆盖。
### 5. 创建 systemd 服务
```bash
sudo tee /etc/systemd/system/web2api.service > /dev/null << 'EOF'
[Unit]
Description=Web2API Service
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/web2api
Environment=DISPLAY=:99
Environment=WEB2API_DATA_DIR=/data
Environment=WEB2API_CONFIG_PATH=/data/config.yaml
Environment=WEB2API_AUTH_API_KEY=your-api-key-here
Environment=WEB2API_AUTH_CONFIG_SECRET=your-admin-password
Environment=WEB2API_BROWSER_NO_SANDBOX=true
Environment=WEB2API_BROWSER_DISABLE_GPU=true
Environment=WEB2API_BROWSER_DISABLE_GPU_SANDBOX=true
Environment=HOME=/data
Environment=PYTHONUNBUFFERED=1
ExecStartPre=/bin/bash -c 'rm -rf /data/fp-data && mkdir -p /data/fp-data /tmp/.X11-unix'
ExecStartPre=/bin/bash -c 'rm -f /tmp/.X99-lock; Xvfb :99 -screen 0 1600x900x24 -nolisten tcp -ac &'
ExecStartPre=/bin/sleep 1
ExecStart=/opt/web2api/.venv/bin/python -u /opt/web2api/main.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now web2api
```
### 6. 查看日志
```bash
sudo journalctl -u web2api -f
```
---
## 方式四:Render 部署
Render 支持 Docker 部署,流程与 VPS 类似。
### 1. 创建 Render Web Service
1. 登录 [Render Dashboard](https://dashboard.render.com)
2. New → Web Service → 连接 GitHub 仓库 `shenhao-stu/web2api`
3. 选择分支 `feat/huggingface-postgres-space`
4. 配置:
- **Environment**: Docker
- **Instance Type**: Starter ($7/月) 或更高
- **Disk**: 添加 1 GB 持久化磁盘,挂载到 `/data`
### 2. 设置环境变量
在 Render Dashboard → Environment 中添加:
| Key | Value |
|-----|-------|
| `WEB2API_AUTH_API_KEY` | 你的 API 密钥 |
| `WEB2API_AUTH_CONFIG_SECRET` | 管理后台密码 |
| `WEB2API_BROWSER_NO_SANDBOX` | `true` |
| `WEB2API_BROWSER_DISABLE_GPU` | `true` |
| `WEB2API_BROWSER_DISABLE_GPU_SANDBOX` | `true` |
| `PORT` | `9000` |
### 3. (可选)添加 PostgreSQL
1. Render Dashboard → New → PostgreSQL
2. 创建后复制 Internal Database URL
3. 添加环境变量 `WEB2API_DATABASE_URL` = 复制的 URL
### 4. 部署
Render 会自动构建 Docker 镜像并部署。部署完成后通过 `https://your-service.onrender.com` 访问。
---
## 环境变量参考
### 必需
| 变量 | 说明 | 示例 |
|------|------|------|
| `WEB2API_AUTH_API_KEY` | API 认证密钥 | `sk-your-key` |
| `WEB2API_AUTH_CONFIG_SECRET` | 管理后台密码 | `admin123` |
### 浏览器
| 变量 | 说明 | 默认值 |
|------|------|--------|
| `WEB2API_BROWSER_NO_SANDBOX` | 禁用沙箱(容器必须) | `false` |
| `WEB2API_BROWSER_DISABLE_GPU` | 禁用 GPU | `false` |
| `WEB2API_BROWSER_DISABLE_GPU_SANDBOX` | 禁用 GPU 沙箱 | `false` |
| `WEB2API_BROWSER_HEADLESS` | 无头模式 | `false`(使用 Xvfb) |
| `WEB2API_BROWSER_CDP_PORT_START` | CDP 起始端口 | `9222` |
| `WEB2API_BROWSER_CDP_PORT_COUNT` | CDP 端口数量 | `20` |
### 服务器
| 变量 | 说明 | 默认值 |
|------|------|--------|
| `HOST` / `WEB2API_SERVER_HOST` | 监听地址 | `0.0.0.0` |
| `PORT` / `WEB2API_SERVER_PORT` | 监听端口 | `9000` |
| `WEB2API_DATABASE_URL` | PostgreSQL 连接串 | 空(使用 SQLite) |
### 调度器
| 变量 | 说明 | 默认值 |
|------|------|--------|
| `WEB2API_SCHEDULER_TAB_MAX_CONCURRENT` | 单 tab 最大并发 | `1` |
| `WEB2API_SCHEDULER_RESIDENT_BROWSER_COUNT` | 预热浏览器数 | `1` |
### 覆盖规则
所有 `config.yaml` 中的配置项都可以通过环境变量覆盖:
```
config.yaml 中的 section.key → WEB2API_SECTION_KEY
```
例如:`claude.api_base` → `WEB2API_CLAUDE_API_BASE`
---
## 部署后配置
1. 访问 `http://your-host:9000/login`,输入 `WEB2API_AUTH_CONFIG_SECRET` 设置的密码
2. 进入 `/config` 管理页面
3. 添加代理组(Proxy Group):
- 如不需要代理,取消勾选 `use_proxy`,`fingerprint_id` 填任意唯一标识
4. 添加 Claude 账号:
- `name`:任意名称
- `type`:`claude`
- `auth`:`{"sessionKey": "你的 Claude sessionKey"}`
5. 点击 Save config
6. (可选)开启 Pro models 开关以使用 Haiku / Opus 模型
### 获取 sessionKey
1. 登录 [claude.ai](https://claude.ai)
2. 打开浏览器开发者工具 → Application → Cookies
3. 复制 `sessionKey` 的值
---
## 常见问题
### Page crashed / OOM
浏览器内存不足导致页面崩溃。解决方案:
- 升级服务器内存到 2 GB+
- 减少 `WEB2API_SCHEDULER_TAB_MAX_CONCURRENT` 为 `1`
- 减少 `WEB2API_BROWSER_CDP_PORT_COUNT` 为 `3`
- 设置 `WEB2API_SCHEDULER_RESIDENT_BROWSER_COUNT=0` 禁用预热
### D-Bus / XKEYBOARD 警告
容器环境中的正常噪音,不影响功能和性能,可忽略。
### Page.goto: Timeout
浏览器导航超时,通常是网络问题或 Claude 服务暂时不可用。服务会自动重试(最多 3 次)。如果持续出现:
- 检查服务器到 claude.ai 的网络连通性
- 检查代理配置是否正确
- 检查 sessionKey 是否过期
### 端口冲突
默认使用 9000 端口和 9222-9241 的 CDP 端口。如有冲突:
```bash
-e PORT=8080 \
-e WEB2API_BROWSER_CDP_PORT_START=19222 \
-e WEB2API_BROWSER_CDP_PORT_COUNT=6
```
|