suezcanalxyz/seacommons
GitHub: suezcanalxyz/seacommons
开源海上搜救与态势感知平台,整合遇险信号、漂移轨迹建模和取证文档,为海事救援行动提供端到端决策支持。
Stars: 0 | Forks: 0
# Seacommons Console
开源的海上救援与态势感知平台,连接实时遇险信号、拉格朗日轨迹建模和取证文档记录。
采用 AGPL-3.0 许可证。
## 链接
- 项目页面:`https://www.suezcanal.xyz/tools/seacommons/`
- 在线控制台路径:`https://www.suezcanal.xyz/seacommons/`
- 代码库:`https://github.com/suezcanalxyz/seacommons`
## 仓库结构
```
apps/
api/ FastAPI backend, drift engine, forensic and integrations
web/ React/Vite operational console
deploy/ Docker, Render and hosting manifests
docs/ Methodology, governance and deployment notes
scripts/ Local developer entrypoints
```
## 快速开始
只需 3 条命令即可安装并运行完整的技术栈:
```
# 安装系统依赖(TID 模块必需)
sudo apt-get install gcc g++ libcurl4-openssl-dev libgeos-dev
git clone https://github.com/suezcanalxyz/seacommons.git
cd seacommons
cp .env.example .env
docker compose -f deploy/docker-compose.yml up -d
```
通用作战图 (COP) 将在 `http://localhost:3000` 提供。
API 将在 `http://localhost:8000` 提供。
## 试点运行环境
当前的代码库在低成本试点模式下最为可靠,并配有独立的 Seacommons 仪表板。
推荐的启动方式:
```
docker compose -f deploy/docker-compose.pilot.yml up --build
```
试点 URL:
- 仪表板:`http://localhost:3000`
- API:`http://localhost:8000`
- API 文档:`http://localhost:8000/docs`
该仪表板独立于公开站点,并使用了轻量的轮询接口。在 Suez Canal 域名上发布时,推荐的公开路径为 `/seacommons/`。
- `/api/v1/ops/summary`
- `/api/v1/vessels`
- `/api/v1/alerts/geojson`
- `/api/v1/weather`
- `/api/v1/alert`
## 公开演示
对于托管的公开演示,请勿依赖同源 API 猜测。
- 前端:设置 `VITE_API_BASE=https://your-api-host`
- 后端:设置 `MOCK=true`
- 后端:设置 `DEMO_PUBLIC_MODE=true`
`DEMO_PUBLIC_MODE` 会保持 API 轻量化,并允许 SAR 案例在托管演示没有完整 OpenDrift runtime 时使用 Gaussian 回退机制。
[deploy/render.yaml](./deploy/render.yaml) 中包含了一个 Render 入门蓝图。在 Render 部署该技术栈之前,仍需要将此文件夹存放在 Git 仓库或已发布的镜像源中。
若要进行零成本的在线演示,推荐方案为:
- 前端部署在 Cloudflare Pages
- 后端部署在 Oracle Cloud Always Free
参见 [docs/DEPLOY_CLOUDFLARE_ORACLE.md](./docs/DEPLOY_CLOUDFLARE_ORACLE.md)。
## 无 Docker 本地开发
```
bash scripts/run_dev.sh all
```
这将启动:
- 来自 `apps/api` 的 API
- 来自 `apps/web` 的控制台
## OpenDrift Runtime
后端可以通过专用的 Python 解释器调用真实的 OpenDrift `Leeway` 模拟。
在本代码库中,实际配置如下:
- API/后端可以继续在本地默认的 Python 上运行
- OpenDrift 安装在 Python 3.12 上
- `OPENDRIFT_PYTHON` 指向该解释器
当前的集成使用了真实的 OpenDrift 轨迹,并支持可配置的恒定强迫场:
- `OPENDRIFT_WIND_X`
- `OPENDRIFT_WIND_Y`
- `OPENDRIFT_CURRENT_X`
- `OPENDRIFT_CURRENT_Y`
- `OPENDRIFT_PARTICLES`
- `OPENDRIFT_TIMESTEP_SECONDS`
- `OPENDRIFT_OUTPUT_SECONDS`
这是一个真实的轨迹引擎,但尚未使用实时的 CMEMS/ERA5 读取器。当您需要来自业务化数据集的海洋和大气强迫场时,这应是下一步的优化方向。
## 硬件物料清单 (BOM) — 完整船舶节点
| 组件 | 成本 | 功能 |
| :--- | :--- | :--- |
| Raspberry Pi 4 (4GB) | ~€55 | 主计算单元 |
| RTL-SDR v4 dongle | ~€35 | 射频 / 无人机检测 |
| VHF 天线 (海事) | ~€25 | AIS + 射频 |
| Raspberry Boom HAT (OSOP) | ~€180 | 次声波 0.05–20 Hz |
| ADXL355 加速度计 (SPI) | ~€15 | 船体耦合地震监测 |
| 压电水听器 | ~€50 | 水下声学 (可选) |
| MCP3208 ADC | ~€5 | 仅在不使用 Boom HAT 时需要 |
| SSD 256GB USB | ~€30 | 存储 |
| IP65 防护箱 | ~€20 | 适应海洋环境 |
| **总计 (含 Boom HAT)** | **~€410** | **完整节点** |
| **总计 (DIY boom,无 HAT)** | **~€240** | **预算版本** |
## 使用模拟警报进行测试
要测试完整的 pipeline,请提交一个模拟的遇险信号:
```
curl -X POST http://localhost:8000/api/v1/alert \
-H "Content-Type: application/json" \
-d '{
"lat": 35.123,
"lon": 15.456,
"timestamp": "2026-03-21T12:00:00Z",
"persons": 45,
"vessel_type": "rubber_boat",
"domain": "ocean_sar"
}'
```
这会将漂移计算任务加入队列,对取证数据包进行签名,并将其广播到已配置的见证节点 endpoint。
标签:AV绕过, FastAPI, HTTP/HTTPS抓包, React, Syscalls, 态势感知, 海上救援, 请求拦截, 轨迹建模, 逆向工具