From 666e58d68173d227522850aaf9250d59e6e02dd7 Mon Sep 17 00:00:00 2001 From: 1e0n Date: Thu, 9 Oct 2025 22:34:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E5=88=B0v1.3.2=EF=BC=9A?= =?UTF-8?q?=E6=94=AF=E6=8C=81Docker=E9=83=A8=E7=BD=B2FACTORY=5FAPI=5FKEY?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E5=8F=98=E9=87=8F=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.example | 8 +++-- DOCKER_DEPLOY.md | 85 +++++++++++++++++++++++++++++++++++----------- docker-compose.yml | 5 ++- package.json | 2 +- 4 files changed, 76 insertions(+), 24 deletions(-) diff --git a/.env.example b/.env.example index e4961af..df36a41 100644 --- a/.env.example +++ b/.env.example @@ -1,3 +1,7 @@ -# API 认证配置 -# 从 Factory 获取你的 refresh token +# 认证配置(按优先级选择其一) + +# 方式1:使用固定API密钥(推荐生产环境,最高优先级) +FACTORY_API_KEY=your_factory_api_key_here + +# 方式2:使用refresh token自动刷新(次优先级) DROID_REFRESH_KEY=your_refresh_token_here diff --git a/DOCKER_DEPLOY.md b/DOCKER_DEPLOY.md index ce70049..1218007 100644 --- a/DOCKER_DEPLOY.md +++ b/DOCKER_DEPLOY.md @@ -10,12 +10,18 @@ cp .env.example .env ``` -编辑 `.env` 文件,填入你的 refresh token: +编辑 `.env` 文件,配置认证方式(按优先级选择其一): ```env +# 方式1:使用固定API密钥(推荐生产环境) +FACTORY_API_KEY=your_factory_api_key_here + +# 方式2:使用refresh token自动刷新 DROID_REFRESH_KEY=your_actual_refresh_token_here ``` +**优先级:FACTORY_API_KEY > DROID_REFRESH_KEY > 客户端authorization** + ### 2. 使用 Docker Compose 启动 ```bash @@ -45,6 +51,14 @@ docker build -t droid2api:latest . **运行容器:** ```bash +# 方式1:使用固定API密钥 +docker run -d \ + --name droid2api \ + -p 3000:3000 \ + -e FACTORY_API_KEY="your_factory_api_key_here" \ + droid2api:latest + +# 方式2:使用refresh token docker run -d \ --name droid2api \ -p 3000:3000 \ @@ -75,8 +89,9 @@ docker rm droid2api - **Environment**: Docker - **Branch**: docker-deploy - **Port**: 3000 -4. 添加环境变量: - - `DROID_REFRESH_KEY`: 你的 refresh token +4. 添加环境变量(选择其一): + - `FACTORY_API_KEY`: 固定API密钥(推荐) + - `DROID_REFRESH_KEY`: refresh token 5. 点击 "Create Web Service" ### Railway 部署 @@ -85,8 +100,9 @@ docker rm droid2api 2. 选择 "Deploy from GitHub repo" 3. 选择分支:docker-deploy 4. Railway 会自动检测 Dockerfile -5. 添加环境变量: - - `DROID_REFRESH_KEY`: 你的 refresh token +5. 添加环境变量(选择其一): + - `FACTORY_API_KEY`: 固定API密钥(推荐) + - `DROID_REFRESH_KEY`: refresh token 6. 部署完成后会自动分配域名 ### Fly.io 部署 @@ -106,8 +122,12 @@ docker rm droid2api fly launch ``` -4. 设置环境变量: +4. 设置环境变量(选择其一): ```bash + # 使用固定API密钥(推荐) + fly secrets set FACTORY_API_KEY="your_factory_api_key_here" + + # 或使用refresh token fly secrets set DROID_REFRESH_KEY="your_refresh_token_here" ``` @@ -125,6 +145,16 @@ docker rm droid2api 2. 部署到 Cloud Run: ```bash + # 使用固定API密钥(推荐) + gcloud run deploy droid2api \ + --image gcr.io/YOUR_PROJECT_ID/droid2api \ + --platform managed \ + --region us-central1 \ + --allow-unauthenticated \ + --set-env-vars FACTORY_API_KEY="your_factory_api_key_here" \ + --port 3000 + + # 或使用refresh token gcloud run deploy droid2api \ --image gcr.io/YOUR_PROJECT_ID/droid2api \ --platform managed \ @@ -139,7 +169,8 @@ docker rm droid2api 1. 创建 ECR 仓库 2. 推送镜像到 ECR 3. 创建 ECS 任务定义 -4. 配置环境变量: +4. 配置环境变量(选择其一): + - `FACTORY_API_KEY`(推荐) - `DROID_REFRESH_KEY` 5. 创建 ECS 服务 @@ -166,6 +197,15 @@ volumes: ```bash docker volume create droid2api-data +# 使用固定API密钥 +docker run -d \ + --name droid2api \ + -p 3000:3000 \ + -e FACTORY_API_KEY="your_factory_api_key_here" \ + -v droid2api-data:/app \ + droid2api:latest + +# 或使用refresh token docker run -d \ --name droid2api \ -p 3000:3000 \ @@ -185,10 +225,13 @@ curl http://localhost:3000/v1/models ## 环境变量说明 -| 变量名 | 必需 | 说明 | -|--------|------|------| -| `DROID_REFRESH_KEY` | 是 | Factory refresh token,用于自动刷新 API key | -| `NODE_ENV` | 否 | 运行环境,默认 production | +| 变量名 | 必需 | 优先级 | 说明 | +|--------|------|--------|------| +| `FACTORY_API_KEY` | 否 | 最高 | 固定API密钥,跳过自动刷新(推荐生产环境) | +| `DROID_REFRESH_KEY` | 否 | 次高 | Factory refresh token,用于自动刷新 API key | +| `NODE_ENV` | 否 | - | 运行环境,默认 production | + +**注意**:`FACTORY_API_KEY` 和 `DROID_REFRESH_KEY` 至少配置一个 ## 故障排查 @@ -200,18 +243,19 @@ docker logs droid2api ``` 常见问题: -- 缺少 `DROID_REFRESH_KEY` 环境变量 -- refresh token 无效或过期 +- 缺少认证配置(`FACTORY_API_KEY` 或 `DROID_REFRESH_KEY`) +- API密钥或refresh token 无效或过期 - 端口 3000 已被占用 ### API 请求返回 401 -**原因**:refresh token 过期或无效 +**原因**:API密钥或refresh token 过期或无效 **解决**: -1. 获取新的 refresh token -2. 更新环境变量 -3. 重启容器 +1. 如果使用 `FACTORY_API_KEY`:检查密钥是否有效 +2. 如果使用 `DROID_REFRESH_KEY`:获取新的 refresh token +3. 更新环境变量 +4. 重启容器 ### 容器频繁重启 @@ -224,9 +268,10 @@ docker logs droid2api 1. **不要将 `.env` 文件提交到 Git** 2. **使用 secrets 管理敏感信息**(如 GitHub Secrets、Docker Secrets) -3. **定期更新 refresh token** -4. **启用 HTTPS**(云平台通常自动提供) -5. **限制访问来源**(通过防火墙或云平台配置) +3. **生产环境推荐使用 `FACTORY_API_KEY`**(更稳定,无需刷新) +4. **定期更新 API 密钥和 refresh token** +5. **启用 HTTPS**(云平台通常自动提供) +6. **限制访问来源**(通过防火墙或云平台配置) ## 性能优化 diff --git a/docker-compose.yml b/docker-compose.yml index e870abd..6b28141 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,7 +7,10 @@ services: ports: - "3000:3000" environment: - # 必需:设置refresh token + # 认证配置(按优先级选择其一): + # 最高优先级:固定API密钥(推荐用于生产环境) + - FACTORY_API_KEY=${FACTORY_API_KEY} + # 次优先级:refresh token自动刷新机制 - DROID_REFRESH_KEY=${DROID_REFRESH_KEY} # 可选:如果需要修改端口,在config.json中配置 volumes: diff --git a/package.json b/package.json index 435263a..87e56ec 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "droid2api", - "version": "1.3.1", + "version": "1.3.2", "description": "OpenAI Compatible API Proxy", "main": "server.js", "type": "module",