项目快照:koala73/worldmonitor,约 82,352 个 Star,12,296 个 Fork;最新推送时间 2026-08-16T18:30:56Z。本文基于仓库公开资料撰写。
项目地址:https://github.com/koala73/worldmonitor · https://worldmonitor.app

项目速览(TL;DR)
worldmonitor 是一个使用 TypeScript 编写的实时全球态势感知仪表盘,目标是把新闻聚合、地缘政治监测、基础设施跟踪和金融信息放在统一界面中。仓库默认分支为 main,许可证为 AGPL-3.0,package.json 中记录的版本为 2.10.0。
根据提供的 GitHub 仓库元信息,该项目拥有 82352 个 Star 和 12296 个 Fork。README 将其描述为“Real-time global intelligence dashboard”,并列出全球与区域新闻、AI 摘要、双地图引擎、国家不稳定指数、金融雷达、本地 AI、站点变体和 Tauri 桌面应用等能力。
| 项目属性 | 资料中的值 |
|---|---|
| 项目名称 | World Monitor |
| 主要语言 | TypeScript |
| 仓库版本 | 2.10.0 |
| 默认分支 | main |
| 许可证 | AGPL-3.0;package.json 使用 AGPL-3.0-only |
| 开发访问地址 | http://localhost:3000 |
“Real-time global intelligence dashboard — AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface.”
来源:README
定位与目标用户
World Monitor 的定位不是单一新闻阅读器,而是面向态势感知场景的组合式信息界面。它将新闻流、地图图层、金融市场、冲突与灾害信号放在同一套代码和界面体系中,适合需要同时查看多个外部信号的用户。
目标用户应当具备明确的信息监测任务,例如研究国际关系、跟踪区域事件、观察基础设施状态,或构建技术、金融、能源等主题化监测界面。项目公开提供多个站点变体,包括世界、技术、金融、商品、Happy 和能源方向,但具体变体的内容边界应以对应部署和最新文档为准。
- 研究与分析人员:需要把区域新闻、地图信号和事件摘要放在同一工作界面中。
- 数据产品团队:希望基于单一 TypeScript 代码库构建多个主题化站点。
- 个人部署者:需要在本地运行前端和 API,并按需配置外部数据源。
- 桌面应用用户:需要在 macOS、Windows 或 Linux 上使用 Tauri 2 桌面二进制程序。
根据本文作者的经验判断,如果使用者只需要一个简单 RSS 阅读页面,World Monitor 的地图、API、Redis 和多数据源结构会带来额外维护成本;如果使用者需要事件之间的空间和主题关联,统一仪表盘的价值更明确。
核心功能
核心功能围绕“信息采集—整理—空间呈现—信号关联”展开。README 给出的功能清单说明,项目并非只处理新闻文本,还包括地缘政治、灾害、金融和基础设施等不同类型的数据。
新闻聚合与 AI 简报
项目提供全球和区域分类的精选新闻源,并将新闻内容合成为简报。输入是不同类别的新闻馈送,输出是适合在仪表盘面板中阅读的摘要;AI 处理所需的具体新闻源列表、提示词、刷新策略和模型字段未在所给资料中完整展开,官方仓库未提供该信息,建议以最新 README 和文档为准。
README 还列出本地 AI 能力,可使用 Ollama 在不提供 API 密钥的情况下运行相关处理。Docker Compose 同时提供了 OpenAI 兼容端点的配置字段,以及 Groq、OpenRouter 字段,但实际启用哪一种提供方取决于部署配置和对应功能路径。
双地图引擎与共享图层目录
World Monitor 使用双地图引擎:三维地球由 globe.gl 提供,平面 WebGL 地图由 deck.gl 提供。两者共享地图图层目录,意味着同一类地图数据可以在不同地图表现形式之间组织和切换;资料没有给出每个图层的完整字段协议,不能据此推导具体 API 请求格式。
地图功能的输入可以包括国家、事件、基础设施或市场相关位置数据,输出则是可交互的空间视图。是否展示某个数据层,还取决于对应数据源是否可用以及部署环境是否配置了所需凭据。
跨流关联与升级信号
README 将“军事、经济、灾害和升级信号收敛”列为跨流关联能力。其用途是把原本分散在不同信息流中的信号放到同一分析框架中,帮助用户观察同一地区或事件的多源变化。
资料没有提供关联算法的公式、阈值、事件去重规则或误报率,因此不能把该能力解释为经过独立验证的预测系统。对于决策用途,应将面板输出视为辅助信息,并保留人工核验、来源追溯和时间戳记录。
国家不稳定指数(CII)
项目包含 Country Instability Index(CII,国家不稳定指数),README 明确称其为“server-authoritative CII v8 stress scoring”,作用对象是 Tier-1 registry。这里可以确认它采用服务器权威的 v8 压力评分,并服务于 Tier-1 注册表;具体指标、权重、刷新周期和分值范围未在提供的资料中给出。
因此,CII 适合作为界面中的结构化信号,而不应在缺少方法学文档时被当作单独的风险结论。部署者如果要对外发布该指数,应同时说明版本、数据来源和适用范围,并以仓库文档中的算法说明为准。
金融雷达与主题变体
金融雷达覆盖股票交易所、商品、加密资产和市场综合指标。Docker Compose 中出现了 Finnhub、FRED、EIA 等数据源配置项,说明部分金融或能源数据依赖外部服务;这些字段被标记为可选,功能会根据数据源配置情况降级。
站点变体由同一代码库构建,README 列出 worldmonitor.app、tech.worldmonitor.app、finance.worldmonitor.app、commodity.worldmonitor.app、happy.worldmonitor.app 和 energy.worldmonitor.app。不同变体的面板清单和数据范围未在所给片段中完整列出,不能将某一变体的全部功能扩展到其他变体。
多语言与桌面应用
README 声明项目支持多语言界面、原生语言新闻馈送和 RTL(Right-to-Left,从右到左)布局。桌面端基于 Tauri 2,支持 Windows、macOS Apple Silicon、macOS Intel 和 Linux AppImage;README 特别说明所有变体共用一个桌面二进制,应用内切换主题变体,而不是为每个变体分别提供下载文件。
系统架构与关键模块
从 Dockerfile、docker-compose.yml 和 package.json 可以确认,World Monitor 是前端、Node.js API 处理器、数据服务和桌面侧车组合而成的系统。其构建过程包括 TypeScript 编译、Vite 前端构建、API 处理器编译,以及静态内容和站点地图生成。
前端与构建层
开发命令使用 Vite,默认开发端口为 3000。生产构建会执行 TypeScript 检查和 Vite 构建;Dockerfile 的 builder 阶段在 Node 24 Alpine 基础镜像中安装依赖,并执行库存事实生成、API 处理器构建、可爬取静态语料库生成、站点地图生成、TypeScript 编译和 Vite 构建。
package.json 还包含针对 tech、finance、happy、commodity 和 energy 变体的开发与构建脚本。变体通过 VITE_VARIANT 传入 Vite,例如 npm run dev:tech 会设置 VITE_VARIANT=tech。
API、侧车与静态服务
Dockerfile 显示,API 处理器会被编译为 ESM 模块,输出到 api/**/*.js,并由本地 API 服务器侧车分发。最终运行时由 nginx 提供静态前端,同时运行 Node 侧车;supervisord 用于管理运行进程。
容器暴露内部端口 8080,nginx 通过 /api/ 代理 API 路由。健康检查访问 /api/sidecar-health,该路径用于同时验证 nginx 和 Node 侧车是否可达;README 和 Dockerfile 没有将该检查描述为业务数据质量检查。
Redis 与 AIS Relay
docker-compose.yml 定义了 World Monitor、Redis、AIS relay 三类服务,其中 AIS relay 的端口为 3004,World Monitor 容器中的 WS_RELAY_URL 指向 http://ais-relay:3004。Compose 文件片段同时配置了 Redis REST 地址和 Redis token,应用与中继服务共享相应的 Redis 访问配置。
AIS relay 使用单独的 Dockerfile.relay 构建,支持配置 AISStream 和 Finnhub 相关字段,并设置 RELAY_SHARED_SECRET。资料没有提供 relay 的完整消息协议、订阅模型或数据保留策略,因此部署时应以仓库中的最新自托管文档和服务配置为准。
数据与凭据边界
Docker Compose 将 LLM 提供方和多种数据源凭据作为环境变量注入容器。资料明确说明数据源 API key 为可选,功能会降级;但 Redis token 和 relay shared secret 在 Compose 中使用必填表达式,缺失时 Compose 启动配置会失败。
这种设计把“应用能够启动”和“特定数据源能够工作”区分开:基础页面可在不设置环境变量时运行,而某些外部数据、AI 或实时中继能力需要额外配置。具体能力与字段之间的映射,官方仓库未提供完整信息。
依赖与运行环境
本地开发至少需要 Git、Node.js、npm 和仓库源码;Docker 构建明确使用 Node 24 Alpine。项目类型为 ES module,package.json 中设置了 "type": "module",安装依赖后通过 Vite 启动开发服务。
- 语言与前端工具:TypeScript、Vite。
- 地图组件:globe.gl 和 deck.gl。
- 本地 AI:Ollama。
- 桌面端:Tauri 2。
- 容器运行:Node 24 Alpine、nginx、supervisord。
- 服务编排:Docker Compose 或 Podman Compose,Compose 文件注释同时提及两者。
- 缓存与中继:Redis REST 服务和 AIS relay。
完整 npm 依赖清单没有包含在所给资料中,不能根据技术栈名称补写依赖版本。Node 24 是 Dockerfile 基础镜像的明确版本信息;本地开发所需 Node.js 最低版本,官方仓库未提供该信息,建议以最新 README、package.json 和 CI 配置为准。
快速开始(含最小可运行示例)
最小闭环是克隆仓库、安装依赖、启动 Vite,再通过本地 HTTP 地址验证页面。README 明确说明应用在没有环境变量时也能运行,特定功能的数据源才需要凭据。
本地开发:安装与运行
git clone https://github.com/koala73/worldmonitor.git
cd worldmonitor
npm install
npm run dev执行后访问 http://localhost:3000。如果需要改变开发端口,README 指定在 .env.local 中设置 DEV_PORT;资料没有给出该变量的示例值,因此不在此虚构端口。
本地验证
curl -I http://localhost:3000该命令只验证本地开发服务是否返回 HTTP 响应,不代表所有外部数据源、AI 提供方或地图图层都已经可用。若浏览器页面能够打开但某些面板为空,应优先检查对应数据源凭据和网络访问条件。
运行主题变体
npm run dev:tech
npm run dev:finance
npm run dev:commodity
npm run dev:happy
npm run dev:energy每条命令来自 package.json,分别设置对应的 VITE_VARIANT。运行前应停止占用开发端口的其他 Vite 进程;具体端口冲突处理参数未在资料中提供。
配置说明
配置分为本地开发配置、LLM 配置、数据源配置和容器间通信配置。下表只列出资料中实际出现的字段;默认值按 docker-compose.yml 的写法记录,未提供的字段不补充推断。
| 字段名 | 类型 | 默认值 | 作用 |
|---|---|---|---|
DEV_PORT |
字符串或数字 | 未提供 | 覆盖本地 Vite 开发端口,README 指定在 .env.local 中使用。 |
LLM_API_URL |
字符串 | "" |
OpenAI 兼容 LLM 端点地址。 |
LLM_API_KEY |
字符串 | "" |
OpenAI 兼容 LLM 端点使用的密钥。 |
LLM_MODEL |
字符串 | "" |
LLM 模型名称。 |
GROQ_API_KEY |
字符串 | "" |
Groq 数据源或模型服务凭据。 |
OPENROUTER_API_KEY |
字符串 | "" |
OpenRouter 服务凭据。 |
AISSTREAM_API_KEY |
字符串 | "" |
AISStream 数据源凭据。 |
FINNHUB_API_KEY |
字符串 | "" |
Finnhub 数据源凭据。 |
FRED_API_KEY |
字符串 | "" |
FRED 数据源凭据。 |
REDIS_TOKEN |
字符串 | Compose 中为必填 | Redis REST 访问令牌;Compose 注释要求使用随机值生成。 |
RELAY_SHARED_SECRET |
字符串 | Compose 中为必填 | World Monitor 与 AIS relay 之间的共享密钥。 |
LOCAL_API_PORT |
字符串 | "46123" |
Docker Compose 中本地 API 侧车使用的端口。 |
WS_RELAY_URL |
字符串 | http://ais-relay:3004 |
World Monitor 访问 AIS relay 的地址。 |
敏感字段应通过本地环境文件、容器 secrets 或部署平台的密钥管理功能注入,不要把真实密钥提交到 Git 仓库。Compose 文件注释明确推荐 Docker secrets,并说明这样可以避免密钥出现在 docker inspect 输出中。
进阶用法
进阶部署适合需要固定构建产物、使用主题变体或运行完整容器栈的团队。不同方式对应不同维护边界:本地 Vite 适合开发,静态部署适合只托管前端,Docker Compose 则包含应用、Redis 和 AIS relay。
使用 Docker Compose
cp .env.example .env
docker compose up -d --buildCompose 文件注释说明,启动后应用地址为 http://localhost:3000,容器内部 nginx 端口为 8080。REDIS_TOKEN 和 RELAY_SHARED_SECRET 在 Compose 中使用必填变量表达式;示例中的 .env 应填入测试环境生成的随机值,而不是复制到公开仓库。
services:
worldmonitor:
ports:
- "${WM_PORT:-3000}:8080"
environment:
LOCAL_API_PORT: "46123"
LOCAL_API_MODE: "docker"
LOCAL_API_CLOUD_FALLBACK: "false"
WS_RELAY_URL: "http://ais-relay:3004"以上片段来自 docker-compose.yml 中的真实配置结构。WM_PORT 未在环境变量表中作为服务环境变量传递,而是用于映射宿主机端口;未提供的 LLM 或数据源密钥会保持空值,相关功能按 README 的说明降级。
构建不同站点变体
package.json 提供 build:tech、build:finance、build:happy、build:commodity 和 build:energy 脚本。它们在构建前执行产品事实生成,并以对应的 VITE_VARIANT 运行 TypeScript 检查和 Vite 构建。
完整构建还包含 OpenAPI、代理技能索引、博客静态内容、可爬取语料库和站点地图等生成步骤。资料没有说明每一项生成物的发布目录和外部部署要求,若要自定义发布流程,应查阅仓库中的构建脚本和自托管指南。
使用本地 AI
README 明确列出 Ollama 本地 AI 方式,并指出不需要 API key。该方式适合不希望把模型请求发送到外部服务的本地测试或受控环境,但资料没有给出 Ollama 模型名称、启动命令、显存要求和 World Monitor 侧的连接字段,因此不能补写具体模型安装步骤。
可观测性与运维
容器化运行提供了明确的进程和健康检查边界,但健康检查只验证服务链路是否可达,不等同于新闻、金融或地缘数据的新鲜度验证。运维人员应把基础设施可用性和数据源质量分别监控。
- 健康检查:Dockerfile 使用
wget请求http://127.0.0.1:8080/api/sidecar-health,间隔 30 秒,超时 5 秒,启动宽限期 15 秒,连续 3 次失败后判定失败。 - 服务进程:最终镜像包含 nginx、Node 侧车和 supervisord,应用通过
/app/entrypoint.sh启动。 - 重启策略:docker-compose.yml 为 World Monitor 和 AIS relay 设置了
restart: unless-stopped。 - 端口关系:宿主机默认通过 3000 映射到容器 8080,relay 在 Compose 网络中使用 3004,侧车配置端口为 46123。
- 日志与故障定位:资料显示镜像创建了 supervisor 和 nginx 日志目录,但没有提供日志格式、集中采集方案或告警规则。
部署验收至少应分别检查页面响应、/api/sidecar-health、Redis 连接、relay 连接和外部数据源凭据。官方仓库未提供 SLA、吞吐量、延迟基准或并发上限,不能将 Docker 健康检查结果解释为这些性能指标。
安全与合规边界
World Monitor 涉及新闻、地缘政治、基础设施和金融信息的聚合与展示,部署者需要对数据来源、个人信息和访问权限负责。以下说明限定在合法授权、明确数据许可和隔离测试环境内,不提供针对未授权目标的访问、绕过或攻击方法。
- 凭据保护:LLM、AISStream、Finnhub、FRED、NASA FIRMS、Cloudflare、Aviationstack、Travelpayouts、ACLED 等字段不得使用真实密钥写入源码、公开 issue 或镜像层。
- 容器隔离:将 Redis、AIS relay 和 World Monitor 放在受控网络中,限制管理端口暴露范围;资料只明确了 Compose 服务关系,未提供完整防火墙策略。
- 数据合规:使用新闻、航运、航空、冲突、金融和基础设施数据时,应检查供应商许可、地域限制、保存期限和再分发条件。
- 隐私控制:如果自定义数据源包含个人信息,应在采集、日志、缓存和导出环节实施最小化处理;仓库资料没有给出具体隐私策略。
- 分析边界:CII、升级信号和 AI 简报属于信息辅助能力,不能在缺少人工审查和来源核验时直接作为军事、金融、公共安全或合规决策的唯一依据。
Docker Compose 注释推荐使用 Docker secrets,以减少密钥出现在容器检查信息中的风险。仍需注意,密钥是否会出现在应用日志、错误堆栈或第三方请求记录中,资料未提供保证,部署者应自行审计。
许可证与商用条款
项目仓库标注 AGPL-3.0,package.json 标注为 AGPL-3.0-only。LICENSE 文件是 GNU Affero General Public License Version 3,并明确其适用于软件和其他作品;许可证文本也说明自由软件许可不等于免费,许可允许在满足条件时复制、修改、运行和分发。
从 LICENSE 的条款和序言可确认,AGPL-3.0 允许商业使用和收费,但商业分发或运营修改版本时必须遵守许可证条件。特别是,AGPL 针对网络服务器场景要求:当用户通过网络使用运行中的修改版本时,应向这些用户提供对应源代码的获取方式;具体触发条件、源代码范围、版权声明、许可证文本、修改说明和交付方式必须以仓库 LICENSE 全文为准。
- 分发或修改项目时,应保留适用的版权和许可证通知。
- 需要向接收者提供许可证文本及其授予的权利说明。
- 网络服务场景不能只把修改后的程序部署在服务器上而忽略 AGPL 的相应源代码提供义务。
- 第三方数据源、模型、地图和 API 的许可不因项目采用 AGPL 而自动改变,应单独核查。
- 商用前应由法务根据具体部署、修改、分发和数据使用方式审查,以仓库 LICENSE 为准。
局限性与已知限制
资料能够确认功能方向和运行方式,但没有提供完整的数据源目录、算法细节、版本兼容矩阵、性能基准或服务等级承诺。使用者不能仅凭 Star 数量、Fork 数量或界面能力推断数据准确性、实时性和生产可用性。
- AI 摘要的模型、提示词、评估指标和错误处理规则未完整公开于所给资料。
- CII v8 的指标定义、权重、阈值和历史可比性未在所给片段中给出。
- 地图图层目录的完整数据结构、刷新频率和来源映射未提供。
- 外部数据源依赖 API key、网络可达性和服务商策略,部分字段为空时功能会降级。
- README 未提供并发量、响应时间、资源消耗、数据延迟和 SLA 信息。
- Docker Compose 需要 Redis token 与 relay shared secret,不能把它视为不带配置的单容器启动方案。
- 桌面端支持的具体系统版本、自动更新策略和本地数据存储位置未提供。
如果需求包括可审计的情报链路、监管级数据留痕或确定性的风险评分,应先验证原始来源、版本化算法和审计流程,再决定是否采用该项目。根据本文作者的经验判断,复杂态势面板最容易出现的问题不是页面无法启动,而是数据来源变更、字段语义漂移和摘要缺少上下文。
适合谁
以下信号表明 World Monitor 与使用场景匹配,重点在于是否需要多源信息的统一呈现,而不是是否追求更多界面功能。
- 团队需要同时查看新闻、地图事件、金融市场、灾害或基础设施信号,而不是只维护单一 RSS 页面。
- 已有 TypeScript、Vite 或 Node.js 开发能力,能够阅读构建脚本并维护环境变量。
- 需要从同一代码库发布 world、tech、finance、commodity、happy 或 energy 等主题变体。
- 能够管理 Redis、Docker Compose、API key 和外部数据源许可,或愿意只启用不需要凭据的基础功能。
- 希望在 macOS、Windows 或 Linux 上使用统一的 Tauri 2 桌面应用,而不是为每个主题下载独立程序。
不适合谁
下列情况意味着需要谨慎评估,或应先选择更简单、数据边界更清楚的替代实现;这里不引入资料之外的具体替代产品。
- 只需要静态文章列表或简单订阅阅读,不需要地图、跨流关联、金融雷达和多服务编排。
- 团队不能维护外部 API 凭据、Redis、AIS relay 或容器运行环境。
- 场景要求官方提供明确 SLA、并发上限、延迟基准或经过独立验证的风险预测结论,而资料中没有这些承诺。
- 组织无法接受 AGPL-3.0 在修改、分发和网络服务场景下产生的源代码提供与通知义务。
- 业务需要对个人信息、金融数据或敏感基础设施数据进行严格的供应商审计,但当前无法获得完整的数据源许可和隐私处理文档。
常见问题与排查(FAQ / Troubleshooting)
排查应先区分“应用进程问题”和“数据源问题”。README 明确允许无环境变量运行,因此页面能够打开但部分面板没有数据,并不必然表示前端构建失败。
Q:安装后如何确认开发服务正常?
A:执行 npm run dev,然后访问 http://localhost:3000,也可以运行 curl -I http://localhost:3000 检查 HTTP 响应。若端口被占用,使用 README 指定的 DEV_PORT 在 .env.local 中覆盖端口。
Q:为什么新闻、金融或地图面板没有完整数据?
A:Docker Compose 将多个数据源 key 标为可选,README 说明特定数据源需要凭据,功能会降级。检查对应环境变量是否已注入,并核查供应商访问权限;资料没有给出每个面板的精确字段映射。
Q:Docker Compose 启动失败,提示缺少 Redis 或 relay 密钥怎么办?
A:检查 REDIS_TOKEN 和 RELAY_SHARED_SECRET 是否已写入环境文件或部署平台密钥。Compose 文件要求这两个字段存在,并在注释中给出使用 openssl rand -hex 32 生成随机值的建议。
REDIS_TOKEN=<你的-Redis-随机令牌>
RELAY_SHARED_SECRET=<你的-relay-随机密钥>
docker compose up -d --build尖括号内容是占位符,不应原样作为生产凭据。真实密钥应在受控环境中生成,并避免写入公开代码仓库。
Q:容器处于不健康状态,应该检查什么?
A:Dockerfile 的健康检查访问 127.0.0.1:8080/api/sidecar-health。应先检查 nginx 是否监听容器 8080、Node 侧车是否由 entrypoint 启动,再检查 supervisor 日志和服务容器状态;该检查不负责验证外部数据新鲜度。
Q:是否必须配置外部 LLM API?
A:README 列出 Ollama 本地 AI,并说明不需要 API key;Compose 也提供 LLM_API_URL、LLM_API_KEY、LLM_MODEL、GROQ_API_KEY 和 OPENROUTER_API_KEY。具体选择哪个提供方以及模型字段如何生效,官方仓库未提供完整说明,建议以最新文档为准。
Q:可以只部署一个站点变体吗?
A:package.json 提供各变体的独立开发和构建脚本,例如 npm run build:finance。桌面端则不同,README 明确说明一个 Tauri 二进制包含各变体,并在应用内切换。
项目地址与资源
以下链接均来自项目 README 或提供的仓库资料。版本、功能和部署说明应以仓库默认分支及官方文档的最新内容为准。
- worldmonitor GitHub 仓库
- World Monitor 官网与文档入口
- World Monitor 文档
- 自托管指南
- 贡献指南
- World Monitor Web App
- Tech Variant 技术变体
- Finance Variant 金融变体
- Commodity Variant 商品变体
- Happy Variant 变体
- Energy Variant 能源变体
- 最新版本发布页
- GitHub Issues 看板
- npm worldmonitor 软件包
- PyPI worldmonitor-sdk
- RubyGems worldmonitor
- Go SDK 文档
- World Monitor Discord 社区
- World Monitor MCP 服务页面
- World Monitor skills.sh 页面



