|
| 1 | +# DocReader Service |
| 2 | + |
| 3 | +DocReader 是 WeKnora 项目中负责文档解析和处理的 gRPC 服务。它支持多种文档格式的读取、OCR 识别、多模态处理等功能。 |
| 4 | + |
| 5 | +## Docker Compose 环境变量配置 |
| 6 | + |
| 7 | +在 `docker-compose.yml` 文件中,docreader 服务配置了以下环境变量: |
| 8 | + |
| 9 | +```yaml |
| 10 | +docreader: |
| 11 | + image: wechatopenai/weknora-docreader:${WEKNORA_VERSION:-latest} |
| 12 | + environment: |
| 13 | + - MINIO_ENDPOINT=minio:9000 |
| 14 | + - MINIO_PUBLIC_ENDPOINT=http://localhost:${MINIO_PORT:-9000} |
| 15 | + - MINERU_ENDPOINT=${MINERU_ENDPOINT:-} |
| 16 | + - MAX_FILE_SIZE_MB=${MAX_FILE_SIZE_MB:-} |
| 17 | +``` |
| 18 | +
|
| 19 | +### 环境变量说明 |
| 20 | +
|
| 21 | +#### 1. MINIO_ENDPOINT |
| 22 | +
|
| 23 | +- **说明**: MinIO 服务的内部访问地址(容器间通信) |
| 24 | +- **默认值**: `minio:9000` |
| 25 | +- **用途**: DocReader 服务使用此地址连接到 MinIO 对象存储服务,用于读取和存储文档处理过程中的文件 |
| 26 | +- **配置示例**: |
| 27 | + ```yaml |
| 28 | + - MINIO_ENDPOINT=minio:9000 # Docker 网络内部地址 |
| 29 | + ``` |
| 30 | + |
| 31 | +#### 2. MINIO_PUBLIC_ENDPOINT |
| 32 | + |
| 33 | +- **说明**: MinIO 服务的公开访问地址(外部访问) |
| 34 | +- **默认值**: `http://localhost:9000` |
| 35 | +- **用途**: 用于生成可从外部访问的文件 URL,例如在文档解析后返回图片链接时使用 |
| 36 | +- **重要提示**: |
| 37 | + - 如果需要从其他设备或容器访问,需要将 `localhost` 替换为实际的 IP 地址 |
| 38 | + - 可以在 `.env` 文件中配置 `MINIO_PORT` 来自定义端口 |
| 39 | +- **配置示例**: |
| 40 | + ```bash |
| 41 | + # .env 文件 |
| 42 | + MINIO_PORT=9000 |
| 43 | + ``` |
| 44 | + 或直接在 docker-compose.yml 中修改: |
| 45 | + ```yaml |
| 46 | + - MINIO_PUBLIC_ENDPOINT=http://192.168.1.100:9000 # 使用实际 IP |
| 47 | + ``` |
| 48 | + |
| 49 | +#### 3. MINERU_ENDPOINT |
| 50 | + |
| 51 | +- **说明**: MinerU 服务的访问地址(可选) |
| 52 | +- **默认值**: 空(不使用 MinerU) |
| 53 | +- **用途**: MinerU 是一个高级文档解析服务,支持更复杂的文档结构识别和处理。配置此变量后,DocReader 可以调用 MinerU 进行文档解析 |
| 54 | +- **配置示例**: |
| 55 | + ```bash |
| 56 | + # .env 文件 |
| 57 | + MINERU_ENDPOINT=http://mineru-service:8080 |
| 58 | + ``` |
| 59 | + |
| 60 | +#### 4. MAX_FILE_SIZE_MB |
| 61 | + |
| 62 | +- **说明**: 允许上传的最大文件大小(单位:MB) |
| 63 | +- **默认值**: `50` MB |
| 64 | +- **用途**: 限制 gRPC 服务接收的文件大小,防止过大的文件导致服务崩溃或性能问题 |
| 65 | +- **配置示例**: |
| 66 | + ```bash |
| 67 | + # .env 文件 |
| 68 | + MAX_FILE_SIZE_MB=100 # 允许最大 100MB 的文件 |
| 69 | + ``` |
| 70 | + |
| 71 | +## 其他可配置的环境变量 |
| 72 | + |
| 73 | +除了 docker-compose.yml 中已配置的变量外,DocReader 还支持以下环境变量(可根据需要添加): |
| 74 | + |
| 75 | +### gRPC 配置 |
| 76 | + |
| 77 | +- `DOCREADER_GRPC_MAX_WORKERS`: gRPC 服务的最大工作线程数(默认:4) |
| 78 | +- `DOCREADER_GRPC_PORT`: gRPC 服务监听端口(默认:50051) |
| 79 | + |
| 80 | +### OCR 配置 |
| 81 | + |
| 82 | +- `OCR_BACKEND`: OCR 引擎后端,可选值: |
| 83 | + - `paddle`: 使用 PaddleOCR(默认) |
| 84 | + - `no_ocr`: 禁用 OCR 功能 |
| 85 | + - `api`: 使用外部 OCR API |
| 86 | +- `OCR_API_BASE_URL`: 外部 OCR API 的基础 URL |
| 87 | +- `OCR_API_KEY`: 外部 OCR API 的密钥 |
| 88 | +- `OCR_MODEL`: OCR 模型名称 |
| 89 | + |
| 90 | +**示例**:禁用 OCR 功能 |
| 91 | +```yaml |
| 92 | +environment: |
| 93 | + - OCR_BACKEND=no_ocr |
| 94 | +``` |
| 95 | + |
| 96 | +### VLM(视觉语言模型)配置 |
| 97 | + |
| 98 | +用于图像理解和描述生成: |
| 99 | + |
| 100 | +- `VLM_MODEL_BASE_URL`: VLM 模型的 API 地址 |
| 101 | +- `VLM_MODEL_NAME`: VLM 模型名称 |
| 102 | +- `VLM_MODEL_API_KEY`: VLM 模型的 API 密钥 |
| 103 | +- `VLM_INTERFACE_TYPE`: 接口类型,可选值:`openai`(默认)或 `ollama` |
| 104 | + |
| 105 | +### 存储配置 |
| 106 | + |
| 107 | +DocReader 支持多种存储后端: |
| 108 | + |
| 109 | +#### MinIO/S3 存储(推荐) |
| 110 | + |
| 111 | +- `STORAGE_TYPE`: 设置为 `minio` |
| 112 | +- `MINIO_ACCESS_KEY_ID`: MinIO 访问密钥 ID(默认:minioadmin) |
| 113 | +- `MINIO_SECRET_ACCESS_KEY`: MinIO 访问密钥(默认:minioadmin) |
| 114 | +- `MINIO_BUCKET_NAME`: MinIO 存储桶名称(默认:WeKnora) |
| 115 | +- `MINIO_PATH_PREFIX`: 文件路径前缀 |
| 116 | +- `MINIO_USE_SSL`: 是否使用 SSL(默认:false) |
| 117 | + |
| 118 | +#### 腾讯云 COS 存储 |
| 119 | + |
| 120 | +- `STORAGE_TYPE`: 设置为 `cos` |
| 121 | +- `COS_SECRET_ID`: COS 访问密钥 ID |
| 122 | +- `COS_SECRET_KEY`: COS 访问密钥 |
| 123 | +- `COS_REGION`: COS 区域 |
| 124 | +- `COS_BUCKET_NAME`: COS 存储桶名称 |
| 125 | +- `COS_APP_ID`: COS 应用 ID |
| 126 | +- `COS_PATH_PREFIX`: 文件路径前缀 |
| 127 | +- `COS_ENABLE_OLD_DOMAIN`: 是否使用旧域名(默认:true) |
| 128 | + |
| 129 | +### 代理配置 |
| 130 | + |
| 131 | +如果需要通过代理访问外部服务: |
| 132 | + |
| 133 | +- `EXTERNAL_HTTP_PROXY`: HTTP 代理地址 |
| 134 | +- `EXTERNAL_HTTPS_PROXY`: HTTPS 代理地址 |
| 135 | + |
| 136 | +### 图像处理配置 |
| 137 | + |
| 138 | +- `IMAGE_MAX_CONCURRENT`: 图像处理的最大并发数(默认:1) |
| 139 | + |
| 140 | +## 配置示例 |
| 141 | + |
| 142 | +### 基础配置(使用 MinIO) |
| 143 | + |
| 144 | +```yaml |
| 145 | +docreader: |
| 146 | + environment: |
| 147 | + - MINIO_ENDPOINT=minio:9000 |
| 148 | + - MINIO_PUBLIC_ENDPOINT=http://localhost:9000 |
| 149 | + - MAX_FILE_SIZE_MB=50 |
| 150 | +``` |
| 151 | + |
| 152 | +### 高级配置(启用 MinerU + 自定义 OCR) |
| 153 | + |
| 154 | +```yaml |
| 155 | +docreader: |
| 156 | + environment: |
| 157 | + - MINIO_ENDPOINT=minio:9000 |
| 158 | + - MINIO_PUBLIC_ENDPOINT=http://192.168.1.100:9000 |
| 159 | + - MINERU_ENDPOINT=http://mineru:8080 |
| 160 | + - MAX_FILE_SIZE_MB=100 |
| 161 | + - OCR_BACKEND=paddle |
| 162 | + - VLM_MODEL_BASE_URL=http://ollama:11434 |
| 163 | + - VLM_MODEL_NAME=llava |
| 164 | + - VLM_INTERFACE_TYPE=ollama |
| 165 | +``` |
| 166 | + |
| 167 | +### 使用腾讯云 COS |
| 168 | + |
| 169 | +```yaml |
| 170 | +docreader: |
| 171 | + environment: |
| 172 | + - STORAGE_TYPE=cos |
| 173 | + - COS_SECRET_ID=your_secret_id |
| 174 | + - COS_SECRET_KEY=your_secret_key |
| 175 | + - COS_REGION=ap-guangzhou |
| 176 | + - COS_BUCKET_NAME=your-bucket |
| 177 | + - COS_APP_ID=your_app_id |
| 178 | + - MAX_FILE_SIZE_MB=50 |
| 179 | +``` |
| 180 | + |
| 181 | +## 常见问题 |
| 182 | + |
| 183 | +### 1. DocReader 服务无法启动? |
| 184 | + |
| 185 | +如果日志中出现 PaddleOCR 相关错误,可以尝试禁用 OCR: |
| 186 | + |
| 187 | +```yaml |
| 188 | +environment: |
| 189 | + - OCR_BACKEND=no_ocr |
| 190 | +``` |
| 191 | + |
| 192 | +### 2. 图片无法显示? |
| 193 | + |
| 194 | +检查 `MINIO_PUBLIC_ENDPOINT` 配置: |
| 195 | +- 确保使用的是可从浏览器访问的地址 |
| 196 | +- 如果从其他设备访问,不要使用 `localhost`,应使用实际 IP 地址 |
| 197 | + |
| 198 | +### 3. 文件上传失败? |
| 199 | + |
| 200 | +检查 `MAX_FILE_SIZE_MB` 配置,确保限制足够大。同时需要确保前端和后端服务的文件大小限制保持一致。 |
| 201 | + |
| 202 | +## 服务健康检查 |
| 203 | + |
| 204 | +DocReader 服务配置了健康检查: |
| 205 | + |
| 206 | +```yaml |
| 207 | +healthcheck: |
| 208 | + test: ["CMD", "grpc_health_probe", "-addr=:50051"] |
| 209 | + interval: 30s |
| 210 | + timeout: 10s |
| 211 | + retries: 3 |
| 212 | + start_period: 60s |
| 213 | +``` |
| 214 | + |
| 215 | +可以通过以下命令检查服务状态: |
| 216 | + |
| 217 | +```bash |
| 218 | +docker ps | grep docreader |
| 219 | +docker logs WeKnora-docreader |
| 220 | +``` |
| 221 | + |
| 222 | +## 更多信息 |
| 223 | + |
| 224 | +- 服务端口:50051(gRPC) |
| 225 | +- 容器名称:WeKnora-docreader |
| 226 | +- 网络:WeKnora-network |
| 227 | +- 重启策略:unless-stopped |
0 commit comments