3.4 KiB
3.4 KiB
生产部署与数据对齐
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,即可单独运行且数据一致。
- docker-compose 一起跑: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 爬虫单独 Docker(API 在宿主机,如 PM2)
# 首次:构建镜像并启动爬虫容器(会读 .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 + 爬虫都在容器)
# 启动
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 宿主机 API(PM2)使用的 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),再启动爬虫容器。