跳到主要内容

部署指南

将 RTKHUB 部署到生产环境。

准备工作

  1. 下载 RTKHUB 发布包或准备 Docker 镜像
  2. 准备配置文件
  3. 准备服务器环境

选择部署方式

安全提醒

不要将 RTKHUB 的 5426 端口直接暴露到公网。生产环境务必使用反向代理(Nginx/Cloudflare Tunnel)并启用 HTTPS。详见 安全与权限

方式适合场景说明
Windows 单机本机试运行、Windows Server 生产部署使用 Release x64 包,配合 NSSM 或计划任务管理
Docker云服务器、标准化交付、测试环境推荐挂载 conf/database/log/result/
反向代理需要 HTTPS 或统一域名入口使用 Nginx、Cloudflare Tunnel 或 VPN,不建议直接公网暴露 5426

Docker 详细配置见 Docker 部署

本地部署

1. 解压文件

# 解压到目标目录
Expand-Archive rtkhub-vX.Y.Z.zip D:\rtkhub\
cd D:\rtkhub

2. 创建配置

参考 配置指南

3. 启动服务

.\rtkhub.exe -s -k conf\rtkhub.list

Windows 服务

创建服务

# 使用 NSSM
nssm install RTKHUB "D:\rtkhub\rtkhub.exe"
nssm set RTKHUB AppParameters "-s -k conf\rtkhub.list"
nssm set RTKHUB AppDirectory "D:\rtkhub"
nssm set RTKHUB Start SERVICE_AUTO_START

# 启动服务
nssm start RTKHUB

管理服务

# 停止
nssm stop RTKHUB

# 重启
nssm restart RTKHUB

# 删除
nssm remove RTKHUB confirm

Nginx 反向代理

配置 HTTPS

server {
listen 443 ssl;
server_name rtkhub.example.com;

ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;

location / {
proxy_pass http://127.0.0.1:5426;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}

# HTTP 重定向到 HTTPS
server {
listen 80;
server_name rtkhub.example.com;
return 301 https://$server_name$request_uri;
}

Docker 部署

如果你需要用容器统一部署,优先阅读 Docker 部署。核心原则是:

  • 只把镜像当作运行环境,不把配置和结果文件写入镜像层。
  • conf/database/log/result/ 挂载到宿主机。
  • 当前主项目提供 Dockerfile,可本地构建 rtkhub:latest;未来正式镜像发布后再替换 image
  • 生产环境固定镜像版本,并保留旧镜像用于回滚。
  • 串口或 USB 设备需要额外映射和权限验证。

最小 Compose 形态:

services:
rtkhub:
build:
context: .
dockerfile: Dockerfile
image: rtkhub:latest
restart: unless-stopped
ports:
- "127.0.0.1:5426:5426"
volumes:
- ./conf:/app/conf
- ./database:/app/database
- ./log:/app/log
- ./result:/app/result

防火墙配置

Windows 防火墙

New-NetFirewallRule -DisplayName "RTKHUB" `
-Direction Inbound `
-Protocol TCP `
-LocalPort 5426 `
-Action Allow

Linux iptables

sudo iptables -A INPUT -p tcp --dport 5426 -j ACCEPT
sudo iptables-save > /etc/iptables/rules.v4

自动备份

备份脚本

# backup.ps1
$date = Get-Date -Format "yyyyMMdd"
$backupPath = "E:\backups\rtkhub_$date"

# 停止服务
nssm stop RTKHUB

# 备份
Copy-Item D:\rtkhub\conf $backupPath\conf -Recurse
Copy-Item D:\rtkhub\database $backupPath\database -Recurse

# 启动服务
nssm start RTKHUB

# 压缩
Compress-Archive $backupPath "$backupPath.zip"
Remove-Item $backupPath -Recurse

定时任务

# 每天凌晨 2 点备份
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" `
-Argument "-File D:\rtkhub\backup.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At 2AM
Register-ScheduledTask -TaskName "RTKHUB Backup" `
-Action $action -Trigger $trigger

监控告警

进程监控

# monitor.ps1
if (!(Get-Process rtkhub -ErrorAction SilentlyContinue)) {
# 发送告警邮件
Send-MailMessage -To "admin@example.com" `
-Subject "RTKHUB服务停止" `
-Body "RTKHUB服务异常停止,已自动重启" `
-SmtpServer "smtp.example.com"

# 重启服务
nssm start RTKHUB
}

性能优化

系统调优

  1. 关闭不必要的服务
  2. 增加虚拟内存
  3. 使用 SSD 存储结果文件

RTKHUB 优化

  1. 调整日志级别(-t 0
  2. 减少历史数据保留
  3. 定期清理日志

安全加固

  1. 修改默认密码
  2. 限制访问 IP
  3. 定期更新
  4. 启用 HTTPS
  5. 配置防火墙

故障恢复

数据恢复

# 从备份恢复
nssm stop RTKHUB
Remove-Item D:\rtkhub\database -Recurse
Expand-Archive E:\backups\rtkhub_YYYYMMDD.zip D:\rtkhub\
nssm start RTKHUB

从 v1.2.0 升级到 v1.3.0

v1.3.0 版本修复了多个安全漏洞(2 个 P0 严重、1 个 P1 高危、1 个 P2 中危),强烈建议所有生产环境用户升级。

升级前准备

兼容性说明

v1.3.0 完全兼容 v1.2.0 的配置文件和数据库,无需任何迁移操作。升级后 EPHUB 流会自动重连。

备份关键数据

# 创建升级前备份
$date = Get-Date -Format "yyyyMMdd_HHmmss"
$backupPath = "E:\backups\rtkhub_v1.2.0_$date"

# 停止服务
nssm stop RTKHUB

# 备份配置、数据库和日志
Copy-Item D:\rtkhub\conf $backupPath\conf -Recurse
Copy-Item D:\rtkhub\database $backupPath\database -Recurse
Copy-Item D:\rtkhub\log $backupPath\log -Recurse

# 备份当前二进制文件(用于回滚)
Copy-Item D:\rtkhub\rtkhub.exe $backupPath\rtkhub.exe.v1.2.0

# 压缩备份
Compress-Archive $backupPath "$backupPath.zip"
Remove-Item $backupPath -Recurse

Write-Host "备份完成: $backupPath.zip"

升级步骤

  1. 下载 v1.3.0 发布包
# 从 GitHub Releases 下载
# https://github.com/apkpai/rtkhub/releases/tag/v1.3.0
  1. 替换二进制文件
# 解压新版本(假设已下载到 Downloads 目录)
Expand-Archive "$env:USERPROFILE\Downloads\rtkhub-v1.3.0.zip" D:\rtkhub_v1.3.0

# 替换主程序
Copy-Item D:\rtkhub_v1.3.0\rtkhub.exe D:\rtkhub\rtkhub.exe -Force

# 如果使用 STRHUB/EPHUB,也需要替换
Copy-Item D:\rtkhub_v1.3.0\strhub.exe D:\rtkhub\strhub.exe -Force
Copy-Item D:\rtkhub_v1.3.0\ephub.exe D:\rtkhub\ephub.exe -Force
  1. 启动新版本
# 启动服务
nssm start RTKHUB

# 检查服务状态
nssm status RTKHUB

# 查看日志确认启动正常
Get-Content D:\rtkhub\log\rtkhub.log -Tail 20

验证检查

升级验证清单

升级完成后,依次验证以下功能确保系统正常运行:

1. Web 访问验证

# 访问 Web 界面
Start-Process "http://127.0.0.1:5426"

# 检查登录和会话功能
# - 登录成功后应生成新的会话 ID(P1 修复验证)
# - 查看浏览器开发者工具 > Application > Cookies > rtkhub_session

2. API 功能测试

# 测试基本 API
curl http://127.0.0.1:5426/api/status

# 测试路径遍历防护(应返回 400 或 403)
curl "http://127.0.0.1:5426/api/..%2F..%2Fsecret.txt"
curl "http://127.0.0.1:5426/api/..%5c..%5csecret.txt"

3. EPHUB 热更新测试(如果使用 EPHUB)

访问 EPHUB 管理页面 http://127.0.0.1:5428,测试:

  • 添加输入流(CLI: add input <path>
  • 添加输出流(CLI: add output <path>
  • 保存配置(CLI: save

4. 安全功能验证

# 测试登录速率限制(连续 6 次失败登录应触发 429)
for ($i=1; $i -le 6; $i++) {
curl -X POST http://127.0.0.1:5426/api/login `
-H "Content-Type: application/json" `
-d '{"username":"test","password":"wrong"}'
Start-Sleep -Seconds 1
}
# 第 6 次应返回 HTTP 429 Too Many Requests

5. 日志检查

# 检查是否有启动错误
Get-Content D:\rtkhub\log\rtkhub.log -Tail 50 | Select-String -Pattern "error|fail|crash"

# 确认版本号
Get-Content D:\rtkhub\log\rtkhub.log | Select-String -Pattern "v1.3.0"

回滚步骤

回滚说明

如果升级后遇到问题,可以回退到 v1.2.0。回滚不会丢失数据,因为 v1.3.0 没有修改数据库结构。

# 1. 停止服务
nssm stop RTKHUB

# 2. 恢复旧版本二进制(从升级前备份中提取)
$backupZip = "E:\backups\rtkhub_v1.2.0_YYYYMMDD_HHmmss.zip"
Expand-Archive $backupZip "D:\rtkhub_restore" -Force
Copy-Item D:\rtkhub_restore\rtkhub.exe.v1.2.0 D:\rtkhub\rtkhub.exe -Force

# 3. 启动服务
nssm start RTKHUB

# 4. 验证回滚成功
Get-Content D:\rtkhub\log\rtkhub.log -Tail 20 | Select-String -Pattern "v1.2.0"
回滚后注意事项
  • 回滚后系统会重新暴露 v1.2.0 的安全漏洞,应尽快诊断升级失败原因并重新升级
  • 如果回滚后问题仍然存在,说明问题可能与版本无关,需要检查配置或环境
  • 回滚不会影响配置文件和数据库,但会丢失 v1.3.0 引入的新功能(如 EPHUB 热更新)

已知问题和解决方案

问题 1:升级后 EPHUB 流无法连接

# 检查 EPHUB 日志
Get-Content D:\rtkhub\log\ephub.log -Tail 50

# 通常是流配置路径问题,尝试重启 EPHUB
nssm restart EPHUB

问题 2:Web 界面无法访问

# 检查端口占用
netstat -ano | findstr "5426"

# 检查防火墙规则
Get-NetFirewallRule -DisplayName "RTKHUB"

# 尝试重启服务
nssm restart RTKHUB

问题 3:登录后立即退出

这可能是会话 ID 重新生成机制导致的兼容性问题(P1 修复副作用)。检查:

# 清除浏览器 Cookie 后重新登录
# Chrome: 开发者工具 > Application > Cookies > 右键删除 rtkhub_session

# 如果问题持续,检查日志
Get-Content D:\rtkhub\log\rtkhub.log | Select-String -Pattern "session"

技术支持

如遇升级问题,请在 GitHub Issues 提供以下信息:

  • 操作系统版本和架构
  • v1.2.0 和 v1.3.0 的完整日志文件(已脱敏)
  • 详细的错误信息或异常行为描述
  • 配置文件(已脱敏凭据)

下一步