
Real-time OSINT intelligence dashboard: 7 live data sources (aircraft, AIS vessels, seismic, fires, weather, GDELT events, news) on an interactive globe. Correlation engine, scored alerts, watch mode. Bun + React 19 + Canvas 2D Web Worker rendering. PWA with offline support. https://sigint-5154d935429b.herokuapp.com/
实时开源情报仪表盘,在互动式地球仪上显示实时飞机、船只、地震、火灾、天气和事件跟踪。使用 Bun、React 19 以及自定义 Canvas 2D + Web Worker 渲染引擎构建。可作为 PWA 安装。

git clone https://github.com/iitoneloc/sigint.git
cd sigint
bun install
在项目根目录创建 .env 文件,至少包含:
SIGINT_SERVER_SECRET=<output of openssl rand -hex 32>
可选添加船舶与火灾数据的密钥:
AISSTREAM_API_KEY=<your aisstream.io key>
FIRMS_MAP_KEY=<your NASA FIRMS key>
请参阅部署了解开发、生产及 Heroku 部署选项。
bun test # 运行所有测试
bun test --watch # 监听模式
bun run docker:test # 在 Docker 中运行
bun run docker:dev:up # https://localhost(自签名证书)
bun run docker:dev:down # 停止
两个环境变量可在开发中绕过实时数据获取,以便针对已知的冻结状态进行工作。两者均受 NODE_ENV !== "production" 限制,在生产构建中忽略。
标签匹配 /^[a-z0-9-]+$/(OWASP A01 — 严格白名单,任何文件查找前均需校验),并解析为 tests/fixtures/<source>/<label>.json。无效标签在启动时抛出错误;缺失文件则抛出解析路径错误。使用方法:
CYCLONES_FIXTURE=multi-storm bun run dev
AIRCRAFT_FIXTURE=conus-snapshot bun run dev
或通过 Docker Compose(docker-compose.dev.yml 会传递这两个变量):
CYCLONES_FIXTURE=single-cat5 bun run docker:dev:up
bun run docker:prod:up # http://localhost:5500
bun run docker:prod:down # 停止
DOMAIN=sigint.example.com bun run docker:prod:tls:up
bun run docker:prod:tls:down # 停止
git push heroku main
bun run docker:clean:all # 移除容器、卷、镜像
SIGINT 可作为渐进式 Web 应用安装。访问部署后的应用后:
Service Worker 会缓存应用外壳以支持离线启动。离线时实时数据从 IndexedDB 加载。连接丢失时将显示离线指示条,包含“重试”按钮,触屏设备支持下拉刷新。当有更新可用时,会显示提示条让用户手动重新加载——不会在会话中间静默替换代码。
完整技术文档位于 docs/,涵盖架构、数据流、功能系统、面板系统、渲染、缓存、搜索及约束。
双授权:
| 变量 | 必需 | 描述 |
|---|
SIGINT_SERVER_SECRET | 是 | 认证令牌签名密钥。openssl rand -hex 32 |
AISSTREAM_API_KEY | 否 | aisstream.io 密钥,用于获取实时船舶数据 |
FIRMS_MAP_KEY | 否 | NASA FIRMS 密钥,用于获取火灾数据 |
DOMAIN | 否 | 用于 Let's Encrypt TLS 的域名 |
PORT | 否 | 服务器端口(默认:5500) |
| 层级 | 来源 | 轮询 |
|---|
| 飞机 | adsb.fi(服务端瓷砖扫描,37 个瓷砖 × 250 海里) | 240s |
| 船舶 | aisstream.io(服务端 WebSocket) | 300s |
| 地震 | USGS(客户端) | 420s |
| 火灾 | NASA FIRMS(服务端) | 600s |
| 天气 | NOAA(客户端) | 300s |
| 事件 | GDELT 2.0(服务端) | 15m |
| 新闻 | 6 个 RSS 订阅源(服务端) | 10m |
| 环境变量 | 覆盖的来源 | 有效标签 |
|---|
CYCLONES_FIXTURE | /api/cyclones/latest(服务端获取 NHC 数据) | single-cat3、single-cat5、multi-storm、subtropical-example、tropical-depression、empty-out-of-season |
AIRCRAFT_FIXTURE | /api/aircraft/states(服务端获取 adsb.fi 瓷砖扫描结果) | (无预装 - 可通过 bun run scripts/capture-fixture.ts aircraft <label> 抓取) |