星网(GW)卫星星座数据仪表盘
Project description
功能特性
- 数据仪表盘 — 卫星与发射统计总览、制造商/火箭分布图表
- 交互式地图 — 卫星实时位置与轨迹展示,支持 LEO 覆盖范围可视化
- 轨道追踪 — 前端基于 SGP4/TLE 实时解算卫星轨道,近地点/远地点历史图表
- 自动更新 — 后台守护进程定期爬取最新 TLE 数据,无需手动干预
- 多数据库支持 — SQLite / MySQL / PostgreSQL 三种后端可选
快速开始
安装
# 从 PyPI 安装(推荐)
pip install gw-dashboard
# 或从源码安装
git clone https://github.com/NearlyHeadlessJack/gw-dashboard.git
cd gw-dashboard
uv sync
遇到安装问题?参见 安装指南,涵盖 Windows、Linux(虚拟环境 / pipx / uv)和 macOS 的详细说明。
也可以使用 Docker 部署,镜像托管在 GitHub Container Registry;详细步骤见 安装指南的 Docker 部署章节。
运行
# PyPI 安装后直接运行
gw-dashboard
# 从源码运行
uv run -m gw
# 开发模式(启动前自动构建前端,需要 Node.js)
uv run -m gw -d
# 只读模式(禁止通过页面或 API 修改数据有效期)
gw-dashboard -r
首次运行时,如果数据库不存在,程序会自动爬取数据并初始化,然后启动 Web 服务。控制台会打印访问 URL。
命令行参数
| 参数 | 说明 |
|---|---|
-c, --config <path> |
指定 YAML 配置文件的路径 |
-d, --build-frontend |
启动前执行 npm run build 构建前端(需 Node.js) |
-r, --readonly |
只读模式,禁止通过页面或 API 修改数据有效期 |
配置文件
默认无需配置文件即可运行(使用 SQLite,数据库路径 ~/.gwtracking/database.db)。
如需自定义,复制示例配置并指定文件:
cp config.example.yaml config.yaml
gw-dashboard -c config.yaml
加载优先级(从低到高):
- 代码内默认值
- YAML 配置文件(通过
-c指定) - 环境变量(
GW_*前缀,覆盖 YAML 中的同名配置)
-d / -r 为纯命令行参数,不受 YAML 或环境变量影响。
完整配置项参考
# 数据库设置
database:
type: sqlite3 # sqlite3 / mysql / postgresql
# 方式一:直接写路径或 SQLAlchemy URL
connection: database/gw.sqlite3
# 方式二:拆分填写连接信息(用于 MySQL / PostgreSQL)
# connection:
# driver: "mysql+pymysql"
# host: "127.0.0.1"
# port: 3306
# username: "root"
# password: "secret"
# database: "gw_dashboard"
# 后端服务
backend:
host: 0.0.0.0 # 监听地址
port: 8000 # 监听端口
reload: false # 热重载(当前不支持,设为 true 会报错)
cors_origins: # CORS 允许的来源
- http://localhost:5173
cache_ttl_seconds: 30 # API 缓存时间(秒)
# 前端服务
frontend:
origin: http://localhost:5173 # 开发时代理的前端 dev server
dist_dir: gw/web/static # 前端静态文件目录
# 守护进程(定时爬取数据)
daemon:
update_check_interval_seconds: 3600 # 更新检查间隔(秒)
data_valid_duration_seconds: 86400 # 数据有效时长(秒),超时后自动爬取
satellite_record_limit: 1000 # 卫星记录数上限
# 爬虫
scraper:
huiji_url: null # 卫星百科 URL(默认内置地址)
celestrak_url: null # CelesTrak URL(默认内置地址)
network_timeout_seconds: 30 # 网络请求超时(秒)
环境变量参考
所有环境变量以 GW_ 为前缀,可替代或覆盖 YAML 配置。配置键名用双下划线 __ 分隔嵌套层级(如 GW_DATABASE__TYPE),也可以直接用单下划线分隔的扁平形式(如 GW_DATABASE_TYPE)。
数据库
| 环境变量 | 说明 |
|---|---|
GW_DATABASE_TYPE |
数据库类型:sqlite3 / mysql / postgresql |
GW_DATABASE_PATH |
SQLite 数据库文件路径 |
GW_DATABASE_CONNECTION |
完整的 SQLAlchemy 连接 URL(设置后忽略下方拆分项) |
GW_DATABASE_DRIVER |
数据库驱动(如 mysql+pymysql) |
GW_DATABASE_HOST |
数据库主机地址 |
GW_DATABASE_PORT |
数据库端口 |
GW_DATABASE_USER / GW_DATABASE_USERNAME |
数据库用户名 |
GW_DATABASE_PASSWORD |
数据库密码 |
GW_DATABASE_NAME / GW_DATABASE_DB |
数据库名称 |
后端
| 环境变量 | 说明 |
|---|---|
GW_BACKEND_HOST |
监听地址(默认 0.0.0.0) |
GW_BACKEND_PORT |
监听端口(默认 8000) |
GW_BACKEND_RELOAD |
是否热重载(默认 false,设为 true 会报错) |
GW_BACKEND_CORS_ORIGINS |
CORS 来源,逗号分隔(如 http://a.com,http://b.com) |
GW_BACKEND_CACHE_TTL_SECONDS |
API 缓存时间(默认 30) |
前端
| 环境变量 | 说明 |
|---|---|
GW_FRONTEND_ORIGIN |
前端 dev server 地址(默认 http://localhost:5173) |
GW_FRONTEND_DIST_DIR |
前端静态文件目录(默认 gw/web/static) |
守护进程
| 环境变量 | 说明 |
|---|---|
GW_DAEMON_UPDATE_CHECK_INTERVAL_SECONDS |
更新检查间隔(默认 3600) |
GW_DAEMON_DATA_VALID_DURATION_SECONDS |
数据有效时长(默认 86400) |
GW_DAEMON_SATELLITE_RECORD_LIMIT |
卫星记录数上限(默认 1000) |
爬虫
| 环境变量 | 说明 |
|---|---|
GW_SCRAPER_HUIJI_URL |
卫星百科 URL(默认内置地址) |
GW_SCRAPER_CELESTRAK_URL |
CelesTrak URL(默认内置地址) |
GW_SCRAPER_NETWORK_TIMEOUT_SECONDS |
网络请求超时(默认 30) |
项目结构
gw-dashboard/
├── gw/ # 后端源码
│ ├── __main__.py # 入口程序
│ ├── config.py # 配置加载
│ ├── startup.py # 启动初始化
│ ├── scraper/ # 数据爬取
│ ├── database/ # 数据库操作
│ ├── web/ # API 与静态资源
│ ├── daemon/ # 守护进程(定时更新)
│ ├── orbit/ # 轨道计算
│ └── utils/ # 工具函数
├── frontend/ # 前端源码
│ └── src/
│ ├── App.tsx # 主应用
│ ├── api.ts # API 调用
│ ├── orbit.ts # 轨道解算
│ └── types.ts # 类型定义
├── tests/ # 后端测试
├── database/ # 数据库存储目录
└── pyproject.toml # 项目配置
技术栈
| 层级 | 技术 |
|---|---|
| 前端 | React 19 · TypeScript · Vite 8 · Leaflet · satellite.js |
| 后端 | Python ≥3.12 · FastAPI · SQLAlchemy · SGP4 |
| 包管理 | uv (后端) / npm (前端) |
| 测试 | pytest / ESLint |
开发
后端
# 安装依赖
uv sync
# 运行测试
uv run pytest
# 代码检查
uv run ruff check .
前端
cd frontend
# 安装依赖
npm install
# 开发服务器
npm run dev
# 构建
npm run build
# 代码检查
npm run lint
构建发布包
# 先构建前端
cd frontend && npm run build && cd ..
# 再构建 Python wheel
uv build
数据来源
所有数据均来自公开信息(CelesTrak、卫星百科 等),仅供学习参考。
Code with Codex (GPT5.5) & Claude Code (GLM5.1 / DeepSeek-V4-Pro)
许可证
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gw_dashboard-0.1.4.tar.gz.
File metadata
- Download URL: gw_dashboard-0.1.4.tar.gz
- Upload date:
- Size: 239.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1e296ef18971098fa2fedb1ba139cbb43845a8607473cbfe15f4776b02eb9970
|
|
| MD5 |
a61c8168a8485c83716b2dbeda66751c
|
|
| BLAKE2b-256 |
31532d37d45854e0c25628bde66a02687a2b76aa0b42cbf4f3e174af44435045
|
Provenance
The following attestation bundles were made for gw_dashboard-0.1.4.tar.gz:
Publisher:
publish.yml on NearlyHeadlessJack/gw-dashboard
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gw_dashboard-0.1.4.tar.gz -
Subject digest:
1e296ef18971098fa2fedb1ba139cbb43845a8607473cbfe15f4776b02eb9970 - Sigstore transparency entry: 1438067114
- Sigstore integration time:
-
Permalink:
NearlyHeadlessJack/gw-dashboard@3c629bd36a01bf35ecad984616261eee3a8bb6f8 -
Branch / Tag:
refs/tags/v0.1.4 - Owner: https://github.com/NearlyHeadlessJack
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3c629bd36a01bf35ecad984616261eee3a8bb6f8 -
Trigger Event:
release
-
Statement type:
File details
Details for the file gw_dashboard-0.1.4-py3-none-any.whl.
File metadata
- Download URL: gw_dashboard-0.1.4-py3-none-any.whl
- Upload date:
- Size: 219.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8fceba92c8ab87c8231e6953de4cc283ab2370a78d2b4a76d7f8c39cf4db9a30
|
|
| MD5 |
87eab7ab78a124cfd194272856d4dff0
|
|
| BLAKE2b-256 |
28a8ad85037a6bff3d265634aa46605afcca2c5e30fb38e1223382ff6d81296b
|
Provenance
The following attestation bundles were made for gw_dashboard-0.1.4-py3-none-any.whl:
Publisher:
publish.yml on NearlyHeadlessJack/gw-dashboard
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gw_dashboard-0.1.4-py3-none-any.whl -
Subject digest:
8fceba92c8ab87c8231e6953de4cc283ab2370a78d2b4a76d7f8c39cf4db9a30 - Sigstore transparency entry: 1438067118
- Sigstore integration time:
-
Permalink:
NearlyHeadlessJack/gw-dashboard@3c629bd36a01bf35ecad984616261eee3a8bb6f8 -
Branch / Tag:
refs/tags/v0.1.4 - Owner: https://github.com/NearlyHeadlessJack
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3c629bd36a01bf35ecad984616261eee3a8bb6f8 -
Trigger Event:
release
-
Statement type: