1.0.3
RTK-Caster Lite
轻量级 RTK / NTRIP Caster,适合小团队内部自建差分服务。
当前实现只做三件事:
- 接收基站上传的 RTCM 原始数据
- 通过 NTRIP 向 rover 分发 RTCM
- 提供内嵌 Web 管理后台
项目保持轻量:
- 不依赖数据库
- 不依赖 Redis、消息队列、Prometheus
- 管理后台使用内嵌静态页面
- 基站地图使用本地 Leaflet 资源和免费 OpenStreetMap 底图
功能概览
基站接入
- 默认监听
9000/TCP - 基站上传协议固定为:
BASE <station_id>\n
<后续持续发送 RTCM 原始字节流>
- 支持预配置基站
- 支持动态基站自动出现
- 同一个
station_id的新连接会替换旧连接 - 基站首包 15 秒超时,超时未发送
BASE <station_id>会自动断开
NTRIP 分发
- 默认监听
2101/TCP - 兼容
GET /<mountpoint> - 兼容
Authorization: Basic ... - 成功响应兼容:
ICY 200 OK
- 也兼容
HTTP/1.0 200 OK/HTTP/1.1 200 OK - 支持多个 rover 同时连接同一挂载点
- 支持同一账号多客户端并发拉流
- 管理员账号
admin / Bone1644也可直接用于 NTRIP 鉴权
最近站 NEAREST
- 内置虚拟挂载点,默认名称
NEAREST - rover 连接
NEAREST后继续回传 GGA - 服务端根据 GGA 坐标从在线基站中选择最近站
- 最近站逻辑保留,不要求客户端升级
基站坐标
- 默认优先使用在线基站 RTCM 中自动提取的参考站坐标
- 当前支持低频解析 RTCM
1005 / 1006 - 解析是旁路低频行为,不影响主转发链路
- 如果暂时取不到坐标:
- 不影响基站上传
- 不影响普通挂载点分发
- 只会影响地图展示和
NEAREST选站候选
- 后台也支持手动录入坐标,保存后写回
config.yaml
Web 管理后台
默认地址:
http://127.0.0.1:8080/
当前页面包括:
- 总览
- 基站
- 流动站
- 日志
- 后台管理
默认管理员账号:
- 用户名:
admin - 密码:
Bone1644
目录结构
rtk_caster/
config.yaml
config.yaml.example
main.go
README.md
internal/
api/
config/
hub/
ingest/
model/
ntrip/
rtcm/
util/
编译与启动
Windows
go build -o rtk-server.exe .
.\rtk-server.exe -config config.yaml
Linux / macOS
go build -o rtk-server .
./rtk-server -config config.yaml
配置文件
示例见 config.yaml.example。
当前推荐配置结构:
admin:
username: admin
password: "Bone1644"
server:
base_ingest_port: 9000
ntrip_port: 2101
api_port: 8080
base_stations: []
rovers:
- username: rover
password: "123456"
display_name: 默认流动站
allowed_mountpoints: []
note: ""
nearest:
mountpoint: NEAREST
admin
username- 后台管理员账号
password- 后台管理员密码
说明:
- 当前默认值固定为
admin / Bone1644 - 后台改密后会写回
config.yaml - 管理员账号也可以直接用于 NTRIP 鉴权
server
base_ingest_port- 基站上传端口,默认
9000
- 基站上传端口,默认
ntrip_port- NTRIP 端口,默认
2101
- NTRIP 端口,默认
api_port- 后台和 API 端口,默认
8080
- 后台和 API 端口,默认
base_stations
每个基站可包含:
station_idmountpointlatlonheight
说明:
- 当前不再要求手工维护大量静态坐标
base_stations主要用于:- 手动录入坐标后的持久化
- 保留固定挂载点名称
- 兼容已有静态配置
- 动态基站仍可正常接入
rovers
每个 rover 账号包含:
usernamepassworddisplay_nameallowed_mountpointsnote
说明:
- 当前实现中,所有已认证 rover 默认都可访问全部挂载点
allowed_mountpoints字段仍保留在配置和接口中,主要用于兼容旧配置- 后台当前不再提供挂载点白名单编辑入口
- rover 密码会明文返回到后台页面,符合当前内部使用场景
nearest
mountpoint- 最近站虚拟挂载点名称,默认
NEAREST
- 最近站虚拟挂载点名称,默认
后台说明
总览
优先展示:
- 在线基站数
- 在线 rover 数
- 已获坐标数
- 实时吞吐
- 关键告警
- 基站状态摘要
基站
可查看:
- 在线 / 离线状态
- 实时输入速率
- 累计流量
- 客户端数
- 最后在线时间
- 离线时长
- 坐标来源
- 地图位置
并支持:
- 自动坐标展示
- 手动坐标录入并保存到
config.yaml
流动站
可操作:
- 新增 rover 账号
- 编辑 rover 账号
- 删除 rover 账号
- 直接复制单账号连接信息
说明:
- 页面顶部会额外显示一个只读的
adminNTRIP 卡片 admin只读卡片只支持复制信息,不支持编辑或删除
日志
- 支持按级别筛选
- 支持关键词搜索
- 前端区分
INFO / WARN / ERROR
后台管理
- 查看当前管理员账号
- 修改管理员密码
- 退出登录
协议说明
基站上传协议
保持不变:
BASE <station_id>\n
<后续持续发送 RTCM 原始字节流>
注意:
BASE必须大写station_id前只有一个空格- 首行必须以
\n结束
Rover NTRIP 协议
保持不变:
GET /<mountpoint> HTTP/1.0
Authorization: Basic ...
最近站示例:
GET /NEAREST HTTP/1.0
Authorization: Basic ...
连接后继续发送 GGA,例如:
$GNGGA,025959.00,2230.0000,N,11354.0000,E,1,12,0.9,10.0,M,0.0,M,,*00
当前实现中,NEAREST 连接建立后会持续等待 GGA,不再使用固定超时限制。
运行时行为
动态基站
如果某个 station_id 不在 config.yaml 中:
- 仍允许接入
- 会自动创建动态基站
- 默认挂载点名为
station_id
坐标提取节流
- 基站上线后会开启一个短暂解析窗口
- 窗口内持续喂入后续 RTCM 数据,便于拼完整
1005 / 1006 - 成功解析后进入 30 秒冷却
- 这样比“首包未成功就整段冷却”更稳妥
配置保存
保存 config.yaml 时:
- 先写
config.yaml.tmp - 同时保留
config.yaml.bak - Linux / macOS 使用重命名替换
- Windows 使用更稳妥的 swap 替换流程,避免先截断原文件
当前限制
- 管理员密码当前仍是明文保存在配置文件中
- rover 密码会明文显示在后台页面
- 地图底图依赖 OpenStreetMap 在线瓦片服务
- RTCM 自动坐标提取当前只做轻量参考站坐标解析,不做全量 RTCM 解码
Description
Lightweight private RTK/NTRIP server with dashboard
189 KiB
0 Stars
1 Watchers
0 Forks