# Docker 部署到服务器 将 US-Iran 态势面板打包成 Docker 镜像,便于移植到任意服务器。 ## 架构 | 服务 | 端口 | 说明 | |--------|------|--------------------------| | api | 3001 | 前端静态 + REST API + WebSocket | | crawler| 8000 | RSS 爬虫 + GDELT,内部服务 | - 数据库:SQLite,挂载到 `app-data` volume(`/data/data.db`) - 前端与 API 合并到同一镜像,访问 `http://主机:3001` 即可 ## 快速部署 ```bash # 1. 克隆项目 git clone usa-dashboard && cd usa-dashboard # 2. 构建并启动(需先配置 Mapbox Token,见下方) docker compose up -d --build # 3. 访问 # 前端 + API: http://localhost:3001 # 爬虫状态: http://localhost:8000/crawler/status ``` ## Mapbox Token(地图展示) 构建时需将 Token 传入前端,否则地图为占位模式: ```bash # 方式 1:.env 文件 echo "VITE_MAPBOX_ACCESS_TOKEN=pk.xxx" > .env docker compose up -d --build # 方式 2:环境变量 VITE_MAPBOX_ACCESS_TOKEN=pk.xxx docker compose up -d --build ``` ## 推送到私有仓库并移植 ```bash # 1. 打标签(替换为你的仓库地址) docker compose build docker tag usa-dashboard-api your-registry/usa-dashboard-api:latest docker tag usa-dashboard-crawler your-registry/usa-dashboard-crawler:latest # 2. 推送 docker push your-registry/usa-dashboard-api:latest docker push your-registry/usa-dashboard-crawler:latest # 3. 在目标服务器拉取并启动 docker pull your-registry/usa-dashboard-api:latest docker pull your-registry/usa-dashboard-crawler:latest # 需准备 docker-compose.yml 或等效编排,见下方 ``` ## 仅用镜像启动(无 compose) ```bash # 1. 创建网络与数据卷 docker network create usa-net docker volume create usa-data # 2. 启动 API(前端+接口) docker run -d --name api --network usa-net \ -p 3001:3001 \ -v usa-data:/data \ -e DB_PATH=/data/data.db \ usa-dashboard-api # 3. 启动爬虫(通过 usa-net 访问 api) docker run -d --name crawler --network usa-net \ -v usa-data:/data \ -e DB_PATH=/data/data.db \ -e API_BASE=http://api:3001 \ -e CLEANER_AI_DISABLED=1 \ -e GDELT_DISABLED=1 \ usa-dashboard-crawler ``` 爬虫通过 `API_BASE` 调用 Node 的 `/api/crawler/notify`,两容器需在同一网络内。 ## 国内服务器 / 镜像加速 拉取 `node`、`python` 等基础镜像慢时: 1. **Docker 镜像加速**:见 [docs/DOCKER_MIRROR.md](docs/DOCKER_MIRROR.md) 2. **构建时使用国内镜像源**: ```bash docker compose build --build-arg REGISTRY=docker.m.daocloud.io/library/ docker compose up -d ``` ## 常用操作 ```bash # 查看日志 docker compose logs -f # 重启 docker compose restart # 停止并删除容器(数据卷保留) docker compose down # 回填战损数据(从 situation_update 重新提取) curl -X POST http://localhost:8000/crawler/backfill ```