docs: 新增离线部署导入镜像说明 + 更新功能特性

README:
- 新增「离线部署(导入预构建镜像)」章节:docker load + 启动命令
- 功能特性更新:设置页、任务删除、进度细分、离线运行、/docs 公开

docs/DOCKER.md:
- 新增「导入预构建镜像(离线部署)」完整章节:
  前置要求、导出步骤、需拷贝文件清单、导入启动命令、离线说明、后续更新代码

.gitignore:
- 排除 *.tar(导出的镜像文件不入库)
This commit is contained in:
audio2text dev
2026-07-11 11:37:52 +08:00
parent 7635e5e766
commit 1e355e6138
3 changed files with 127 additions and 2 deletions

View File

@@ -94,6 +94,94 @@ docker compose --profile cpu up -d --build # CPU 生产
docker compose --profile gpu up -d --build # GPU 生产(需 nvidia runtime
```
### 导入预构建镜像(离线部署)
当目标机器无法访问 Docker Hub或构建太慢可在已构建好镜像的机器上导出 tar
拷到新机器导入,跳过整个构建过程。
#### 前置要求(新机器)
- **NVIDIA GPU 驱动**(宿主机)
- **nvidia container runtime**`nvidia-container-toolkit`
- Docker
- `config.gpu.yaml` 配置文件(从项目仓库取,或自行编写)
- 模型缓存 `./models` 目录(约 5.5GB,从源机器拷贝或联网预拉)
验证 GPU 可用:
```bash
nvidia-smi # 宿主能看到 GPU
docker run --rm --gpus all nvidia/cuda:12.1.0-runtime-ubuntu22.04 nvidia-smi
```
#### 步骤 1源机器导出镜像
```bash
# 在已构建好 audio2text:gpu 镜像的机器上
docker save -o audio2text-gpu.tar audio2text:gpu
ls -lh audio2text-gpu.tar # ~4.3GB
```
#### 步骤 2拷贝到新机器
需要拷贝的文件:
| 文件/目录 | 大小 | 说明 |
|---|---|---|
| `audio2text-gpu.tar` | ~4.3GB | Docker 镜像(含 ffmpeg + torch + faster-whisper + transformers + app 代码) |
| `config.gpu.yaml` | <1KB | GPU 配置文件 |
| `models/` | ~5.5GB | 模型缓存Whisper large-v3-turbo + NLLB distilled-1.3B 权重 |
> `models/` 可不拷贝,新机器联网时用 `prefetch_models.sh` 预拉。但离线部署必须拷贝。
```bash
# 用 scp / rsync / U盘 等方式拷贝
scp audio2text-gpu.tar config.gpu.yaml user@newhost:~/audio2text/
rsync -avP models/ user@newhost:~/audio2text/models/
```
#### 步骤 3新机器导入并启动
```bash
cd ~/audio2text
# 1. 导入镜像
docker load -i audio2text-gpu.tar
# 输出Loaded image: audio2text:gpu
# 2. 准备数据目录
mkdir -p data-gpu/uploads data-gpu/.work data-gpu/outputs
# 3. 启动容器
docker run -d --name audio2text-gpu \
--gpus all \
-p 8001:8000 \
-v "$(pwd)/data-gpu:/data" \
-v "$(pwd)/models:/models" \
-v "$(pwd)/config.gpu.yaml:/app/config.yaml:ro" \
--restart unless-stopped \
audio2text:gpu
# 4. 验证
curl -s http://127.0.0.1:8001/health | python -m json.tool
# 应见 cuda_available=true, gpu="NVIDIA GeForce RTX 3090"
```
打开 `http://127.0.0.1:8001/` 即可使用
#### 离线运行说明
镜像内置 `HF_HUB_OFFLINE=1` + `TRANSFORMERS_OFFLINE=1` 环境变量模型缓存就位后
**完全离线运行**不会尝试访问 HuggingFace这避免了离线环境下 transformers
pipeline 因网络请求超时导致的翻译失败
#### 后续更新代码
导入的镜像包含导出时的 app 代码如需更新代码有两个选择
1. **重新构建**把项目代码拷到新机器`docker build --build-arg VARIANT=gpu -t audio2text:gpu .`
2. **挂载源码**临时调试启动时加 `-v "$(pwd)/app:/app/app"` 覆盖镜像内代码
---
## 缓存分层与删除边界