1.0.5
RTK-Caster Lite
轻量 RTK / NTRIP Caster,适合小团队内部自建差分服务。
当前实现重点解决三件事:
- 接收基站上传的 RTCM 原始字节流
- 通过 NTRIP 向 rover 分发 RTCM
- 提供内嵌 Web 管理后台
项目保持轻量:
- 不依赖数据库
- 不依赖 Redis、消息队列、Prometheus
- 管理后台使用内嵌静态页面
- 地图使用本地 Leaflet 资源和 OpenStreetMap 在线底图
默认端口
- 基站上传:
17003/TCP - NTRIP:
17002/TCP - Web / API:
17001/TCP
协议约定
基站上传协议
保持不变:
BASE <station_id>\n
<后续持续发送 RTCM 原始字节流>
说明:
BASE必须大写- 首行格式不能改
- 基站首包有 15 秒超时,超时未发
BASE <station_id>会断开
Rover NTRIP 协议
保持不变:
GET /<mountpoint>
Authorization: Basic ...
成功响应继续兼容:
ICY 200 OKHTTP/1.0 200 OKHTTP/1.1 200 OK
最近站 NEAREST
- 默认虚拟挂载点名:
NEAREST - rover 连接
NEAREST后继续回传 GGA - 服务端根据 GGA 从在线且有坐标的基站中选择最近站
- 当前不再使用固定 GGA 超时限制,连接建立后会持续等待 GGA
当前账号约定
管理员
- 用户名:
admin - 密码:
Bone1644
说明:
- 这个账号可登录 Web 后台
- 这个账号当前也可直接用于 NTRIP 鉴权
- 后台改密后会写回
config.yaml
Rover
- rover 账号用于 NTRIP 鉴权
- 当前后台支持新增、编辑、删除 rover 账号
- rover 密码会明文展示在后台页面,符合当前内部使用场景
- 编辑 rover 时,密码可留空,表示保持原密码不变
挂载点权限现状
- 当前所有已认证成功的账号默认都可访问全部挂载点
allowed_mountpoints字段仍保留在配置和接口结构中,主要用于兼容旧配置- 当前后台不再提供挂载点白名单编辑入口
基站坐标
当前优先级:
- 优先使用在线基站 RTCM 中自动提取的参考站坐标
- 若暂时取不到,可在后台手动录入并写回
config.yaml
说明:
- 当前轻量解析 RTCM
1005 / 1006 - 解析是低频、旁路进行,不影响主转发链路
- 自动坐标暂时取不到时:
- 不影响基站上传
- 不影响普通挂载点分发
- 只影响地图展示和
NEAREST选站候选
相关接口:
POST /api/stations/coords
管理后台
默认地址:
http://127.0.0.1:17001/
当前页面包括:
- 总览
- 基站
- 流动站
- 日志
- 后台管理
总览
优先显示:
- 在线基站数
- 在线 rover 数
- 已获坐标数
- 实时吞吐
- 关键告警
- 基站状态摘要
基站
支持查看:
- 在线 / 离线状态
- 实时输入速率
- 累计流量
- 客户端数
- 最后在线时间
- 坐标来源
- 地图位置
支持操作:
- 手动录入坐标并写回
config.yaml
流动站
支持操作:
- 新增 rover 账号
- 编辑 rover 账号
- 删除 rover 账号
- 复制账号连接信息
说明:
- 页面顶部会额外显示一个只读的
adminNTRIP 卡片 - 当前会显示可用挂载点信息,并在复制时一起带上
日志
支持:
- 按级别筛选
- 按关键字搜索
- 前端区分
INFO / WARN / ERROR / FATAL
后台管理
支持:
- 查看当前管理员账号
- 修改管理员密码
- 退出登录
动态基站行为
如果某个 station_id 不在 config.yaml 中:
- 仍允许接入
- 会自动出现在运行时基站列表中
- 默认挂载点名与
station_id一致
也就是说,当前不再要求手工维护大量模拟基站样板。
坐标提取节流逻辑
当前逻辑不是“首包没成功就冷却 30 秒”,而是:
- 基站上线后开启一个短暂解析窗口
- 窗口内持续喂后续 RTCM 数据,便于拼完整
1005 / 1006 - 成功解析后进入冷却期
这样比“第一次 chunk 不够就整段暂停”更容易成功。
配置保存策略
保存 config.yaml 时:
- 先写
config.yaml.tmp - 同时保留
config.yaml.bak - Linux / macOS 使用 rename 替换
- Windows 使用 swap 替换,避免先截断原文件
目标是尽量兼顾 Windows 和 Linux 的稳妥性。
示例配置
参见 D:\ClearCore\开发工作\ClearPro2026\ClearRTK\rtk_caster\config.yaml.example。
当前推荐最小配置:
admin:
username: admin
password: "Bone1644"
server:
base_ingest_port: 17003
ntrip_port: 17002
api_port: 17001
base_stations: []
rovers:
- username: rover
password: "123456"
display_name: "默认流动站"
allowed_mountpoints: []
note: ""
nearest:
mountpoint: NEAREST
编译与启动
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
Docker 部署
这套服务很适合 Docker 部署。相比直接在宿主机安装 Go 并本地编译,Docker 的优点是:
- 宿主机环境更干净
- 部署方式更容易复制
- 升级和回滚更直观
- 迁移服务器时更省心
当前仓库已提供:
- D:\ClearCore\开发工作\ClearPro2026\ClearRTK\rtk_caster\Dockerfile
- D:\ClearCore\开发工作\ClearPro2026\ClearRTK\rtk_caster\docker-compose.yml
- D:\ClearCore\开发工作\ClearPro2026\ClearRTK\rtk_caster.dockerignore
目录准备
建议在部署目录中保留一个可写的 data 目录,用来放配置文件及其运行时备份文件:
mkdir -p data
cp config.yaml.example data/config.yaml
说明:
- 容器默认读取
/data/config.yaml - 后台改密、手动录入基站坐标时,会继续把修改写回这个文件
config.yaml.tmp、config.yaml.bak也会写在这个挂载目录内
启动方式
docker compose up -d --build
停止方式
docker compose down
端口映射
17001:1700117002:1700217003:17003
从当前 systemd 平滑切到 Docker
如果宿主机上已经有一个裸机版 rtk_caster 正在运行,切到 Docker 前先停掉旧服务,否则端口会冲突:
systemctl stop clear_ntrip.service
docker compose up -d --build
确认容器版正常后,如需彻底停用旧方式:
systemctl disable clear_ntrip.service
容器版配置更新
如果修改了镜像或源码:
docker compose up -d --build
如果只改了 data/config.yaml:
- 一般重启容器即可
docker compose restart
当前限制
- 管理员密码当前仍是明文保存在配置文件中
- rover 密码当前也会明文显示在后台
- 地图底图依赖 OpenStreetMap 在线瓦片
- RTCM 自动坐标提取当前只做轻量参考站坐标解析,不做全量 RTCM 解码
Description
Lightweight private RTK/NTRIP server with dashboard
189 KiB
0 Stars
1 Watchers
0 Forks