raphaelmpr-beep/skysignal
GitHub: raphaelmpr-beep/skysignal
SkySignal 是一个多租户无人机威胁情报平台,通过 OSINT 数据整合与七因子评分算法,为安全专业人员提供设施级无人机威胁量化评估与可视化报告。
Stars: 0 | Forks: 0
# SkySignal — 无人机威胁情报平台
## 什么是 SkySignal?
SkySignal 是一个多租户 SaaS 平台,旨在帮助安全专业人员评估特定设施、地址或地理区域周围的无人机威胁究竟有多真实。它接入 OSINT 和官方来源数据,将事件可视化在地图上,使用 7 因子算法对可信度进行评分,并生成无人机威胁现实评分报告(0–100)。
**合规范围:** 仅限态势感知、OSINT 分析、地图映射和报告。
本平台不包含,且绝不能包含无人机拦截、干扰、开发利用、武器化、目标锁定或反制措施执行功能。
## 快速开始(本地开发 — 3 条命令)
### 前置条件
- Docker Desktop 及 Docker Compose v2
- Node.js 20+(用于本地 Web 开发)
- Python 3.11+(用于本地 API 开发)
### 选项 A:Full Docker(推荐)
```
git clone skysignal
cd skysignal
cp .env.example .env
docker compose up --build
```
然后打开:http://localhost:3000
### 选项 B:本地开发(迭代更快)
```
# Terminal 1: 仅 Database
docker compose up db
# Terminal 2: FastAPI
cd apps/api
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp ../../.env.example .env
uvicorn main:app --reload --port 8000
# Terminal 3: Next.js
cd apps/web
npm install
cp ../../.env.example .env.local
npm run dev
```
### 填充数据库
```
cd packages/database
python seed/seed.py
```
或通过 Docker:
```
docker compose exec api python /app/seed.py
```
## 默认凭据
| 邮箱 | 密码 | 角色 |
|---|---|---|
| admin@skysignal.dev | demo1234 | 组织管理员 |
或者使用登录页面上的 **Dev Login** 按钮(仅在 `SKIP_AUTH=true` 时可用)。
## 主要用户工作流
1. 在 http://localhost:3000/login 登录
2. Dashboard 显示 25 条种子事件和 KPI 卡片
3. 点击 **Assess Location** → 输入地址 → 选择半径 + 时间窗口 → **Run Assessment**
4. 查看威胁现实评分(0–100)及其完整的因子明细
5. 保存为 Watch Zone,生成 PDF 报告
6. 导航至 **Map** 查看带热力图的完整 COP 视图
7. **Admin → Review Queue** 显示 PENDING 的候选事件
## 架构
```
apps/
web/ Next.js 14 App Router (TypeScript, Tailwind, shadcn/ui)
api/ FastAPI (Python 3.11, SQLAlchemy 2.0, PostGIS)
packages/
database/
migrations/ PostgreSQL + PostGIS schema migrations
seed/ Demo data (25 incidents, 3 watch zones)
shared/
types/ TypeScript domain types (shared between web and API clients)
constants/ Shared enumerations and scoring constants
docker-compose.yml
```
## 无人机威胁现实评分
这是一个设施级别的 0–100 分数,由 7 个加权因子组成:
| 因子 | 权重 | 描述 |
|---|---|---|
| Evidence Confidence | 30% | 附近事件的平均置信度得分 |
| Incident Density | 20% | 半径内对数归一化的事件计数 |
| Recency | 15% | 指数衰减加权,近期事件权重更高 |
| Facility Proximity | 15% | 事件到设施中心的平均距离 |
| Severity | 10% | 按严重程度等级加权的平均值 |
| Sector Sensitivity | 5% | CISA 部门关键性乘数 |
| Repeat Pattern | 5% | 同一微型区域内的事件聚类 |
评分等级:0–20 Minimal · 21–40 Low · 41–60 Moderate · 61–80 Elevated · 81–100 High
## 数据流水线
```
Manual SALUTE → PENDING incident → Admin review → APPROVED
GDELT/RSS/News → PENDING candidate (LOW confidence) → Official validation → Admin review → APPROVED
Official press/FAA → can auto-boost confidence if official_match_score ≥ 80
```
**数据原则:** 任何 GDELT/RSS/新闻结果都不会自动成为已确认的事件。
所有新闻来源的候选事件都会进入 `review_status=PENDING`、`confidence_tier=UNVERIFIED` 状态。
## API 端点
Base URL: http://localhost:8000
| 方法 | 路径 | 描述 |
|---|---|---|
| POST | /api/auth/login | 登录 → JWT |
| GET | /api/incidents | 列出带过滤器的事件 |
| GET | /api/incidents/{id} | 事件详情 + 证据 |
| POST | /api/assessments | 创建设施评估 |
| GET | /api/map/incidents | 地图优化的事件点 |
| GET | /api/map/heatmap | 热力图权重点 |
| GET | /api/analytics/kpi | KPI 仪表板数据 |
| GET | /api/analytics/sankey | 来源→类型→部门→结果 流向 |
| GET | /api/admin/review-queue | 待审核队列 |
| POST | /api/salute | 提交 SALUTE 报告 |
完整的交互式文档:http://localhost:8000/docs(FastAPI 自动生成)
## 环境变量
请参阅 `.env.example` 获取所有变量。关键变量:
| 变量 | 描述 |
|---|---|
| `DATABASE_URL` | PostgreSQL 连接字符串(需要 PostGIS) |
| `NEXTAUTH_SECRET` | JWT 签名密钥 — **在生产环境中务必更改!** |
| `NEXT_PUBLIC_MAPBOX_TOKEN` | 可选。留空以使用 OpenStreetMap(Leaflet 默认) |
| `SKIP_AUTH` | 设为 `"true"` 以在开发环境中绕过验证 — **生产环境中绝不可用** |
| `ENABLE_GDELT` | 启用 GDELT 新闻抓取流水线 |
| `ENABLE_RSS_IMPORTER` | 启用 RSS/新闻订阅导入器 |
## 部署(MVP 之后)
**推荐的生产环境技术栈:**
- 数据库:Supabase 或 Neon(带有 PostGIS 的托管型 Postgres)
- API:Railway、Render 或 AWS ECS
- Web:Vercel(Next.js 原生)
- 确保设置 `SKIP_AUTH=false` 并更换 `.env.example` 中的所有默认密钥
```
# 构建 production images
docker compose -f docker-compose.prod.yml up --build
```
## 添加实时数据源
数据源存根位于 `apps/api/app/services/`:
- `gdelt_service.py` — 连接至 GDELT API(端点已在文件中注释说明)
- `official_validation_service.py` — 连接至 FAA DroneZone、DOJ 新闻稿
- 在 `.env` 中设置 `ENABLE_GDELT=true` / `ENABLE_RSS_IMPORTER=true` 以启用
## 安全与合规
本平台仅用于态势感知和 OSINT 分析。
请勿添加,也不要接受包含以下内容的 pull request:
- 无人机干扰、拦截或中和逻辑
- 对无人机控制系统的远程访问
- 目标定位系统或火力控制集成
- 任何反制措施执行(仅限报告字段)
标签:AV绕过, ESC4, FastAPI, HTTP/HTTPS抓包, OSINT, SaaS平台, 威胁情报, 开发者工具, 态势感知, 无人机, 测试用例, 版权保护, 自动化攻击, 请求拦截