2.9 KiB
2.9 KiB
Docker 部署到服务器
将 US-Iran 态势面板打包成 Docker 镜像,便于移植到任意服务器。
架构
| 服务 | 端口 | 说明 |
|---|---|---|
| api | 3001 | 前端静态 + REST API + WebSocket |
| crawler | 8000 | RSS 爬虫 + GDELT,内部服务 |
- 数据库:SQLite,挂载到
app-datavolume(/data/data.db) - 前端与 API 合并到同一镜像,访问
http://主机:3001即可
快速部署
# 1. 克隆项目
git clone <repo> 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 传入前端,否则地图为占位模式:
# 方式 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
推送到私有仓库并移植
# 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)
# 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 等基础镜像慢时:
- Docker 镜像加速:见 docs/DOCKER_MIRROR.md
- 构建时使用国内镜像源:
docker compose build --build-arg REGISTRY=docker.m.daocloud.io/library/ docker compose up -d
常用操作
# 查看日志
docker compose logs -f
# 重启
docker compose restart
# 停止并删除容器(数据卷保留)
docker compose down
# 回填战损数据(从 situation_update 重新提取)
curl -X POST http://localhost:8000/crawler/backfill