Files
usa/docs/PRODUCTION.md

69 lines
3.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.
# 生产部署与数据对齐
## 1. 当前项目是否能在 Docker 中单独运行
- **能**。爬虫镜像 `Dockerfile.crawler` 自包含 Python 3.11 + `crawler/requirements.txt`(含 dashscope无宿主机 Python 版本依赖。
- **两种常见用法**
- **docker-compose 一起跑**API + 爬虫都在容器内,共用一个命名卷 `app-data`,天然对齐。
- **爬虫单独 Docker、API 在宿主机**:爬虫容器通过挂载宿主机上的 **同一个** `server/data.db`,并设置 `API_BASE` 指向宿主机 API即可单独运行且数据一致。
## 2. 数据对齐(必须满足)
| 角色 | 使用的 DB 路径(示例) | 说明 |
|--------|-------------------------------|------|
| Node API | `process.env.DB_PATH``server/data.db` | 见 `server/db.js``docker-entrypoint.sh` |
| 爬虫Docker 内) | `DB_PATH=/data/data.db`,且 `/data/data.db` 由宿主机同一文件挂载 | 见 `Dockerfile.crawler``crawler/config.py` |
**原则**API 和爬虫必须读写 **同一个 SQLite 文件**。否则会出现「爬虫写了库、API 读不到」或反之。
- **docker-compose 全容器**:两边都用卷 `app-data`,路径均为 `/data/data.db`,自动对齐。
- **API 宿主机 + 爬虫 Docker**:宿主机 API 的 `DB_PATH` 指向例如 `$PROJECT/server/data.db`;爬虫启动时用 `-v $PROJECT/server/data.db:/data/data.db``-e DB_PATH=/data/data.db`,即对齐。
## 3. 生产脚本与用法
### 3.1 爬虫单独 DockerAPI 在宿主机,如 PM2
```bash
# 首次:构建镜像并启动爬虫容器(会读 .env 中的 DASHSCOPE_API_KEY
./scripts/production-start.sh
# 或分步:
docker build -t usa-dashboard-crawler:latest -f Dockerfile.crawler .
./scripts/run-crawler-docker-standalone.sh
```
可调环境变量(在运行脚本前 export 或写在 .env
- `PROJECT_ROOT`:项目根目录,默认当前目录;用于解析 `server/data.db`
- `DB_FILE`:宿主机 DB 绝对路径,默认 `$PROJECT_ROOT/server/data.db`
- `API_BASE`:爬虫通知 API 的地址,默认 `http://host.docker.internal:3001`Linux 下脚本会自动加 `--add-host=host.docker.internal:host-gateway`)。
- `DASHSCOPE_API_KEY`:阿里云 DashScope启用 AI 清洗(可选)。
### 3.2 docker-compose 全栈API + 爬虫都在容器)
```bash
# 启动
docker compose up -d
# 或传入 DASHSCOPE_API_KEY
DASHSCOPE_API_KEY=sk-xxx docker compose up -d
# 停止
docker compose down
```
此时 API 与爬虫共用卷 `app-data`DB 路径均为 `/data/data.db`,无需额外对齐。
### 3.3 宿主机 APIPM2使用的 DB 路径
确保 PM2 启动 API 时使用的 DB 与爬虫挂载的是同一文件,例如:
- 在 ecosystem 或启动命令里设置:`DB_PATH=/www/wwwroot/www.airtep.com2/usa/server/data.db`
- 或项目根目录即部署目录时,不设则默认为 `server/data.db`(相对路径以进程 cwd 为准)。
## 4. 检查清单
- [ ] API 与爬虫使用**同一 DB 文件**(见上表)。
- [ ] 爬虫能访问到 API`API_BASE` 在「爬虫单独 Docker」场景下指向宿主机`http://host.docker.internal:3001`),在 compose 场景下为 `http://api:3001`
- [ ] 若需 AI 清洗:在爬虫侧设置 `DASHSCOPE_API_KEY`compose 或 standalone 脚本的 .env/环境变量)。
- [ ] 首次部署或无 DB 时:先创建并初始化 DB例如 `DB_PATH=server/data.db node server/seed.js`),再启动爬虫容器。