World Monitor 自托管教程:Docker、Ollama、MCP 与数据源配置

完整介绍 World Monitor 的 Docker 自托管流程、必需密钥、数据初始化、Ollama 接入、MCP 用法、隐私边界和 AGPL 许可证要求。

World Monitor 是一个开源全球态势看板,可以聚合新闻、地缘事件、灾害、金融、能源、航空、航运与基础设施数据。它既能作为网页和桌面应用使用,也提供 REST API、CLI 与 MCP 接口。

项目地址:

https://github.com/koala73/worldmonitor

如果只是体验界面,运行前端开发服务器即可;如果要长期自建,应使用项目提供的 Docker Compose 完整栈。完整栈不只是一个静态页面,还包括 Node.js API、Redis、Redis REST 代理和 AIS 船舶数据中继。

自托管前需要什么

官方自托管文档当前要求:

  • Docker 或 Podman;
  • Docker Compose 或 podman-compose
  • Node.js 22 或更高版本,用于在宿主机执行数据初始化脚本;
  • 足够的磁盘空间保存镜像、依赖和 Redis 数据。

Windows 用户适合在 WSL2 中执行后续命令。虽然 Docker Desktop 能启动容器,但官方初始化脚本是 Shell 脚本,直接在普通 PowerShell 中运行并不顺手。

Docker Compose 完整部署

先克隆项目并安装依赖:

1
2
3
git clone https://github.com/koala73/worldmonitor.git
cd worldmonitor
npm install

新版完整栈必须设置三个随机密钥,否则部分容器会直接退出:

1
2
3
echo "RELAY_SHARED_SECRET=$(openssl rand -hex 32)" >> .env
echo "REDIS_PASSWORD=$(openssl rand -hex 32)" >> .env
echo "REDIS_TOKEN=$(openssl rand -hex 32)" >> .env

然后启动容器:

1
docker compose up -d

第一次启动后还要执行数据初始化:

1
./scripts/run-seeders.sh

最后访问:

1
http://localhost:3000

如果页面能打开但健康检查显示 0/55 OK,通常不是前端故障,而是还没有运行 seeders。

哪些数据源不需要 API Key

不配置第三方密钥也能看到地震、天气、自然事件、部分冲突与迁徙、稳定币、加密货币、气候异常、海底电缆和网络安全等公共数据。

更多数据需要单独申请 API Key,例如:

数据类型 常见配置
LLM 分析 GROQ_API_KEYOPENROUTER_API_KEY 或本地 OpenAI 兼容接口
市场和经济 FINNHUB_API_KEYFRED_API_KEYEIA_API_KEY
冲突事件 ACLED 账号或令牌
火灾监测 NASA_FIRMS_API_KEY
航空和航运 AviationStack、AISStream
网络中断 Cloudflare Radar 相关令牌,可能需要付费权限

建议将额外配置写进 docker-compose.override.yml。项目默认忽略这个文件,能降低密钥误提交到 Git 的风险。

接入 Ollama 或其他本地模型

World Monitor 能连接任何兼容 OpenAI Chat Completions 的服务,包括 Ollama、vLLM 和 llama.cpp server。

可在 docker-compose.override.yml 中加入:

1
2
3
4
5
6
7
8
services:
  worldmonitor:
    environment:
      LLM_API_URL: "http://your-host:8000/v1/chat/completions"
      LLM_API_KEY: "your-key"
      LLM_MODEL: "your-model-name"
    extra_hosts:
      - "your-host:192.168.1.100"

如果 Ollama 运行在 Docker 宿主机上,容器里的 localhost 指向容器自身,不能直接写 http://localhost:11434。Docker Desktop 通常可尝试:

1
http://host.docker.internal:11434/v1/chat/completions

Linux 主机则可以使用宿主机局域网地址,或给 Compose 配置 host-gateway。同时确认 Ollama 已监听容器可访问的地址,并用防火墙限制来源。

MCP 怎么接入 Agent

官方公共 MCP 地址为:

1
https://worldmonitor.app/mcp

它使用 Streamable HTTP。公开的 tools/list 可以列出工具,但调用部分能力需要 World Monitor API Key 或 OAuth。自托管时不要因为看见 MCP 入口就默认所有数据都在本机:Agent 最终访问的是你配置的 MCP 地址,公共地址仍会连接官方服务。

接入 Codex、Claude Code 或其他 Agent 前,先确认:

  1. MCP 服务指向官方实例还是自己的实例;
  2. API Key 会保存到哪个配置文件;
  3. Agent 能调用哪些查询工具;
  4. 返回的新闻和风险判断是否保留来源;
  5. 是否允许把内部查询条件发送到外部服务。

数据刷新与持久化

Redis 数据会保存在 redis-data volume 中。普通容器重启不会清空数据,但下面的命令会删除 volume:

1
docker compose down -v

删除后需要重新执行:

1
./scripts/run-seeders.sh

长期运行可以用 cron 定期刷新:

1
*/30 * * * * cd /path/to/worldmonitor && ./scripts/run-seeders.sh >> /tmp/wm-seeders.log 2>&1

上游接口可能限流或暂时不可用,刷新频率不是越高越好。应根据 API 配额、数据时效和服务器负载调整。

常见问题排查

容器启动后马上退出

先检查 .env 是否同时存在 RELAY_SHARED_SECRETREDIS_PASSWORDREDIS_TOKEN,再查看:

1
2
docker compose ps
docker compose logs --tail=200

旧版公开默认令牌已经被移除,不应为了省事恢复固定弱口令。

没有船舶或火灾数据

船舶数据需要在主应用和 AIS relay 中配置 AISSTREAM_API_KEY;火灾数据需要 NASA_FIRMS_API_KEY。只填一处可能导致页面存在但数据为空。

Ollama 连接失败

依次检查:

  1. Ollama 的 /v1/chat/completions 是否能从宿主机访问;
  2. 容器能否解析并连接宿主机地址;
  3. LLM_MODEL 是否与已下载模型名称完全一致;
  4. 防火墙是否拦截容器网段;
  5. 是否错误地把容器内的 localhost 当成宿主机。

Redis 数据一直为空

确认 Redis REST 代理已经启动,并优先用官方包装脚本:

1
./scripts/run-seeders.sh

手动执行单个 seeder 时,还要正确提供 UPSTASH_REDIS_REST_URLUPSTASH_REDIS_REST_TOKEN

隐私和安全边界

自托管并不等于完全离线。World Monitor 会从大量外部数据源抓取内容;如果配置 Groq、OpenRouter、第三方市场接口或公共 MCP,查询和上下文仍可能离开服务器。

部署前至少处理这些问题:

  • 不把 Redis、Redis REST 代理和 AIS relay 直接暴露到公网;
  • 使用随机密钥,不提交 .env 和 override 文件;
  • 通过反向代理启用 HTTPS 和访问控制;
  • 限制 Ollama 或其他模型接口的监听地址;
  • 定期更新镜像和依赖;
  • 对新闻、金融、冲突与风险判断保留来源并交叉验证。

World Monitor 适合帮助人更快发现信号,不应被当成已经核实的情报结论或投资建议。

AGPL 许可证要注意什么

项目源码使用 AGPL-3.0-only。个人研究、自托管和修改通常可以按许可证进行;如果修改后通过网络向用户提供服务,通常需要向这些用户提供相应源码。闭源商业部署、官方品牌使用或不想承担 AGPL 义务的团队,应在上线前检查许可证原文并咨询专业意见,必要时联系项目方获取商业授权。

对大多数个人用户,最稳妥的路线是先在局域网部署,确认数据源、LLM、MCP 和刷新任务都符合预期,再决定是否开放公网访问。