Files
droid2api/DOCKER_DEPLOY.md

334 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Docker 部署指南
## 本地 Docker 部署
### 1. 准备环境变量
创建 `.env` 文件(从 `.env.example` 复制):
```bash
cp .env.example .env
```
编辑 `.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
docker-compose up -d
```
查看日志:
```bash
docker-compose logs -f
```
停止服务:
```bash
docker-compose down
```
### 3. 使用原生 Docker 命令
**构建镜像:**
```bash
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 \
-e DROID_REFRESH_KEY="your_refresh_token_here" \
droid2api:latest
```
**查看日志:**
```bash
docker logs -f droid2api
```
**停止容器:**
```bash
docker stop droid2api
docker rm droid2api
```
## 云平台部署
### Render.com 部署
1. 在 Render 创建新的 Web Service
2. 连接你的 GitHub 仓库
3. 配置:
- **Environment**: Docker
- **Branch**: docker-deploy
- **Port**: 3000
4. 添加环境变量(选择其一):
- `FACTORY_API_KEY`: 固定API密钥推荐
- `DROID_REFRESH_KEY`: refresh token
5. 点击 "Create Web Service"
### Railway 部署
1. 在 Railway 创建新项目
2. 选择 "Deploy from GitHub repo"
3. 选择分支docker-deploy
4. Railway 会自动检测 Dockerfile
5. 添加环境变量(选择其一):
- `FACTORY_API_KEY`: 固定API密钥推荐
- `DROID_REFRESH_KEY`: refresh token
6. 部署完成后会自动分配域名
### Fly.io 部署
1. 安装 Fly CLI
```bash
curl -L https://fly.io/install.sh | sh
```
2. 登录:
```bash
fly auth login
```
3. 初始化应用(在项目目录):
```bash
fly launch
```
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"
```
5. 部署:
```bash
fly deploy
```
### Google Cloud Run 部署
1. 构建并推送镜像:
```bash
gcloud builds submit --tag gcr.io/YOUR_PROJECT_ID/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 \
--region us-central1 \
--allow-unauthenticated \
--set-env-vars DROID_REFRESH_KEY="your_refresh_token_here" \
--port 3000
```
### AWS ECS 部署
1. 创建 ECR 仓库
2. 推送镜像到 ECR
3. 创建 ECS 任务定义
4. 配置环境变量(选择其一):
- `FACTORY_API_KEY`(推荐)
- `DROID_REFRESH_KEY`
5. 创建 ECS 服务
## 持久化配置
如果需要持久化刷新的 tokens
### Docker Compose 方式
修改 `docker-compose.yml`
```yaml
services:
droid2api:
volumes:
- auth-data:/app
volumes:
auth-data:
```
### Docker 命令方式
```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 \
-e DROID_REFRESH_KEY="your_refresh_token_here" \
-v droid2api-data:/app \
droid2api:latest
```
## 健康检查
容器启动后,可以通过以下端点检查服务状态:
```bash
curl http://localhost:3000/
curl http://localhost:3000/v1/models
```
## 环境变量说明
| 变量名 | 必需 | 优先级 | 说明 |
|--------|------|--------|------|
| `FACTORY_API_KEY` | 否 | 最高 | 固定API密钥跳过自动刷新推荐生产环境 |
| `DROID_REFRESH_KEY` | 否 | 次高 | Factory refresh token用于自动刷新 API key |
| `NODE_ENV` | 否 | - | 运行环境,默认 production |
**注意**`FACTORY_API_KEY` 和 `DROID_REFRESH_KEY` 至少配置一个
## 故障排查
### 容器无法启动
查看日志:
```bash
docker logs droid2api
```
常见问题:
- 缺少认证配置(`FACTORY_API_KEY` 或 `DROID_REFRESH_KEY`
- API密钥或refresh token 无效或过期
- 端口 3000 已被占用
### API 请求返回 401
**原因**API密钥或refresh token 过期或无效
**解决**
1. 如果使用 `FACTORY_API_KEY`:检查密钥是否有效
2. 如果使用 `DROID_REFRESH_KEY`:获取新的 refresh token
3. 更新环境变量
4. 重启容器
### 容器频繁重启
检查健康检查日志和应用日志,可能是:
- 内存不足
- API key 刷新失败
- 配置文件错误
## 安全建议
1. **不要将 `.env` 文件提交到 Git**
2. **使用 secrets 管理敏感信息**(如 GitHub Secrets、Docker Secrets
3. **生产环境推荐使用 `FACTORY_API_KEY`**(更稳定,无需刷新)
4. **定期更新 API 密钥和 refresh token**
5. **启用 HTTPS**(云平台通常自动提供)
6. **限制访问来源**(通过防火墙或云平台配置)
## 性能优化
### 多阶段构建(可选)
```dockerfile
# 构建阶段
FROM node:24-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
# 生产阶段
FROM node:24-alpine
WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
```
### 资源限制
在 docker-compose.yml 中添加:
```yaml
services:
droid2api:
deploy:
resources:
limits:
cpus: '1'
memory: 512M
reservations:
cpus: '0.5'
memory: 256M
```
## 监控和日志
### 查看实时日志
```bash
docker-compose logs -f
```
### 导出日志
```bash
docker logs droid2api > droid2api.log 2>&1
```
### 集成监控工具
可以集成:
- Prometheus + Grafana
- Datadog
- New Relic
- Sentry错误追踪