RTK-Caster Lite

轻量 RTK / NTRIP Caster,面向小团队内部自建差分服务。

当前职责:

  • 接收基站上传的 RTCM 原始字节流
  • 通过 NTRIP 向 rover 分发 RTCM
  • 提供内嵌 Web 管理后台

项目保持轻量:

  • 不依赖数据库
  • 不依赖 Redis、消息队列、Prometheus
  • 不使用前端框架或打包工具
  • 管理后台使用内嵌静态页面
  • 地图使用本地 Leaflet 资源和 OpenStreetMap 在线底图

默认端口

  • Web / API:17001/TCP
  • NTRIP:17002/TCP
  • 基站上传:17003/TCP

协议约定

基站上传

保持私有 TCP 上传协议不变:

BASE <station_id>\n
<后续持续发送 RTCM 原始字节流>

说明:

  • BASE 必须大写
  • 首行格式不能改
  • 基站首包有 15 秒超时;超过 15 秒仍未发送 BASE <station_id> 会自动断开

Rover NTRIP

保持标准 NTRIP Client 接入方式:

GET /<mountpoint>
Authorization: Basic ...

成功响应继续兼容:

  • ICY 200 OK
  • HTTP/1.0 200 OK
  • HTTP/1.1 200 OK

NEAREST

  • 默认虚拟挂载点名:NEAREST
  • rover 连接 NEAREST 后持续回传 GGA
  • 服务端根据 GGA 从在线且有坐标的基站中选择最近站
  • 当前不再使用固定 GGA 超时限制

账号约定

管理员

  • 用户名:admin
  • 密码:Bone1644

说明:

  • 该账号可登录 Web 后台
  • 该账号也可直接用于 NTRIP 鉴权
  • 后台修改管理员密码后会写回 config.yaml

Rover

  • rover 账号用于 NTRIP 鉴权
  • 后台支持新增、编辑、删除 rover
  • rover 密码在后台明文展示,符合当前内部使用场景
  • 编辑 rover 时,密码留空表示保持原密码不变
  • 当前所有已认证账号默认可访问全部挂载点

allowed_mountpoints 字段仍保留在配置和接口结构中,主要用于兼容旧配置;当前后台不再提供挂载点白名单编辑入口。

基站坐标

当前优先级:

  1. 在线基站 RTCM 自动提取参考站坐标
  2. 自动提取不到时,在后台手动录入
  3. 重启后从 config.yaml 中恢复已保存坐标

说明:

  • 当前轻量解析 RTCM 1005 / 1006
  • 解析走低频旁路,不影响主转发链路
  • 自动解析成功后会写回当前配置文件
  • Docker 部署时写回的是 /data/config.yaml
  • 坐标暂时取不到时,不影响基站上传和普通挂载点分发,只影响地图显示和 NEAREST 候选

手动坐标接口:

  • POST /api/stations/coords

管理后台

默认地址:

http://127.0.0.1:17001/

页面包括:

  • 总览
  • 基站
  • 流动站
  • 日志
  • 后台管理

当前后台行为:

  • 默认关闭自动刷新
  • 可点击按钮手动刷新数据
  • 如需实时刷新,可在页面上手动打开自动刷新
  • 地图不会主动切换为其他地图源
  • 地图底图为 OpenStreetMap 标准道路图
  • 地图缩放和拖动视角会在页面内刷新时尽量保持

动态基站

如果某个 station_id 不在 config.yaml 中:

  • 仍然允许接入
  • 会自动出现在运行时基站列表中
  • 默认挂载点名与 station_id 一致

当前不要求手工维护大量基站样板。

配置保存

保存 config.yaml 时:

  • 先写 config.yaml.tmp
  • 保留 config.yaml.bak
  • Linux / macOS 使用 rename 替换
  • Windows 使用 swap 替换,避免先截断原文件

会触发配置写回的操作:

  • 修改管理员密码
  • 新增、编辑、删除 rover
  • 手动录入基站坐标
  • RTCM 自动解析到新的基站坐标

示例配置

参见 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 部署

仓库已提供:

推荐部署目录:

/root/clear_ntrip/
  Dockerfile
  docker-compose.yml
  data/
    config.yaml

准备配置:

mkdir -p data
cp config.yaml.example data/config.yaml

启动:

docker compose up -d --build

停止:

docker compose down

查看:

docker compose ps
docker compose logs -f

更新:

docker compose up -d --build

如果只修改了 data/config.yaml:

docker compose restart

说明:

  • 容器默认读取 /data/config.yaml
  • 后台写配置时会继续写回这个挂载文件
  • 裸机时代的顶层 config.yaml 不应再作为 Docker 主配置使用

当前限制

  • 管理员密码当前仍以明文保存在配置文件中
  • rover 密码当前也会明文显示在后台
  • 地图底图依赖 OpenStreetMap 在线瓦片
  • RTCM 自动坐标提取只做轻量参考站坐标解析,不做全量 RTCM 解码
S
Description
Lightweight private RTK/NTRIP server with dashboard
Readme
189 KiB
0 Stars 1 Watchers 0 Forks
1.0.11
Latest
2026-06-08 15:16:04 +08:00
Languages
Go 46.7%
JavaScript 36.5%
CSS 16.2%
Dockerfile 0.4%
HTML 0.2%