跳转到内容
产品文档已发布

TSM 平台快速部署

RAILWISE-TSM 全站仪自动化变形监测平台的 Docker Compose 部署、环境配置、服务启停及初始化的完整操作指南。

复核 2026-07-09入门公开可引用RailWise 技术团队
产品文档

预计阅读时间: 25 分钟
目标: 在本地或服务器完成 RAILWISE-TSM 全栈部署并验证全站仪连接


RAILWISE-TSM 采用前后端分离 + 边缘计算架构:

┌─────────────────────────────────────────────────────────────┐
│ 用户层 │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Web 控制台 │ │ WorkWise │ │ CLI 工具 │ │
│ │ (Next.js) │ │ 桌面端 │ │ (Bun/TS) │ │
│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
└─────────┼─────────────────┼─────────────────┼───────────────┘
│ │ │
└─────────────────┼─────────────────┘
│ HTTPS / WebSocket
┌───────────────────────────┼─────────────────────────────────┐
│ API 网关层 │
│ ┌─────────────────────────┐ │
│ │ Nginx (反向代理) │ │
│ │ + SSL 终结 │ │
│ └────────────┬────────────┘ │
└───────────────────────────┼─────────────────────────────────┘
┌───────────────────────────┼─────────────────────────────────┐
│ 应用服务层 (NestJS) │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ 监测调度 │ │ 数据存储 │ │ 告警引擎 │ │
│ │ 服务 │ │ 服务 │ │ 服务 │ │
│ └────────────┘ └────────────┘ └────────────┘ │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ 用户权限 │ │ 报告生成 │ │ WebSocket │ │
│ │ 服务 │ │ 服务 │ │ 推送服务 │ │
│ └────────────┘ └────────────┘ └────────────┘ │
└───────────────────────────┼─────────────────────────────────┘
┌───────────────────────────┼─────────────────────────────────┐
│ 数据存储层 │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ PostgreSQL │ │ Redis │ │ MinIO │ │
│ │ (主数据库) │ │ (缓存/队列)│ │ (对象存储) │ │
│ └────────────┘ └────────────┘ └────────────┘ │
└───────────────────────────┼─────────────────────────────────┘
┌───────────────────────────┼─────────────────────────────────┐
│ 边缘计算层 (Rust/WASM) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 全站仪通信网关 (TS-Gateway) │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ Leica │ │ Topcon │ │ Sokkia │ ... │ │
│ │ │ 驱动 │ │ 驱动 │ │ 驱动 │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
│ │ ┌─────────────────────────────────────────────┐ │ │
│ │ │ WASM 实时计算引擎 │ │ │
│ │ │ (坐标转换 / 平差计算 / 变形检测) │ │ │
│ │ └─────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘

环境 CPU 内存 磁盘 网络
开发/测试 4 核 8 GB 50 GB SSD 百兆
生产(<50 测站) 8 核 16 GB 200 GB SSD 千兆
生产(50-200 测站) 16 核 32 GB 500 GB SSD 千兆
生产(200+ 测站) 32 核+ 64 GB+ 1 TB SSD 万兆
软件 最低版本 用途
Docker 24.0+ 容器运行时
Docker Compose 2.20+ 多服务编排
Git 2.30+ 拉取部署脚本

如未安装 Docker,请参考官方文档:


Terminal window
git clone https://github.com/railwise/tsm-deploy.git
cd tsm-deploy

目录结构:

tsm-deploy/
├── docker-compose.yml # 主编排文件
├── .env.example # 环境变量模板
├── nginx/
│ ├── nginx.conf # 反向代理配置
│ └── ssl/ # SSL 证书目录
├── init-scripts/
│ ├── init-db.sql # 数据库初始化
│ └── init-minio.sh # 对象存储初始化
└── scripts/
├── start.sh # 一键启动
├── stop.sh # 一键停止
└── backup.sh # 数据备份
Terminal window
cp .env.example .env
nano .env # 或 vim / 任意编辑器

核心配置项:

Terminal window
# ==========================================
# 基础配置
# ==========================================
COMPOSE_PROJECT_NAME=railwise-tsm
TZ=Asia/Shanghai
# ==========================================
# 数据库配置
# ==========================================
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
POSTGRES_DB=railwise_tsm
POSTGRES_USER=railwise
POSTGRES_PASSWORD=CHANGE_THIS_STRONG_PASSWORD
# ==========================================
# Redis 配置
# ==========================================
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=CHANGE_THIS_REDIS_PASSWORD
# ==========================================
# MinIO 对象存储配置
# ==========================================
MINIO_ROOT_USER=railwise
MINIO_ROOT_PASSWORD=CHANGE_THIS_MINIO_PASSWORD
MINIO_BUCKET_NAME=tsm-data
# ==========================================
# API 服务配置
# ==========================================
API_PORT=3000
API_JWT_SECRET=CHANGE_THIS_JWT_SECRET_32_CHAR_MIN
API_CORS_ORIGIN=https://tsm.yourdomain.com
# ==========================================
# Web 前端配置
# ==========================================
WEB_PORT=3001
NEXT_PUBLIC_API_URL=https://tsm.yourdomain.com/api
# ==========================================
# 边缘网关配置
# ==========================================
GATEWAY_PORT=50051
GATEWAY_LOG_LEVEL=info

生产环境请务必修改所有默认密码,尤其是 POSTGRES_PASSWORDJWT_SECRETMINIO_ROOT_PASSWORD。建议使用 32 位以上随机字符串。

Terminal window
chmod +x scripts/*.sh
./scripts/start.sh

start.sh 执行流程:

  1. 检查 Docker 与 Docker Compose 可用性
  2. 加载 .env 环境变量
  3. 创建必要的本地目录(数据卷、日志目录)
  4. 拉取最新镜像(首次)或构建本地镜像(开发模式)
  5. 按依赖顺序启动服务:PostgreSQL → Redis → MinIO → API → Web → Gateway
  6. 等待健康检查通过
  7. 输出访问地址与初始账号信息

预期输出:

[RailWise TSM] 启动中...
✓ Docker 版本: 26.1.0
✓ Docker Compose 版本: 2.27.0
✓ 环境变量加载完成
✓ 数据目录创建完成
✓ 镜像拉取完成
✓ PostgreSQL 健康检查通过 (3/3)
✓ Redis 健康检查通过 (3/3)
✓ MinIO 健康检查通过 (3/3)
✓ API 服务健康检查通过 (5/5)
✓ Web 服务健康检查通过 (5/5)
✓ Gateway 服务健康检查通过 (5/5)
═══════════════════════════════════════════
RAILWISE-TSM 部署成功
═══════════════════════════════════════════
Web 控制台: http://localhost:3001
API 文档: http://localhost:3000/api/docs
MinIO 控制台: http://localhost:9001
初始管理员账号:
用户名: admin@railwise.cn
密码: RailWise@2025
请立即登录并修改默认密码!
═══════════════════════════════════════════

打开浏览器访问 http://localhost:3001,使用初始账号登录。

Terminal window
curl http://localhost:3000/api/health

预期响应:

{
"status": "ok",
"version": "2.3.1",
"timestamp": "2025-06-05T14:32:18+08:00",
"services": {
"database": "connected",
"redis": "connected",
"minio": "connected",
"gateway": "connected"
}
}
Terminal window
docker compose exec postgres psql -U railwise -d railwise_tsm -c "\dt"

应输出已初始化的表列表。


操作 命令 说明
启动 ./scripts/start.sh 启动所有服务
停止 ./scripts/stop.sh 停止所有服务
重启 docker compose restart api 重启单个服务
查看日志 docker compose logs -f api 实时查看 API 日志
查看全部日志 docker compose logs -f 实时查看所有服务日志
进入容器 docker compose exec api sh 进入 API 容器调试
数据备份 ./scripts/backup.sh 备份数据库与对象存储
更新版本 ./scripts/update.sh 拉取最新镜像并重启
服务 容器内路径 宿主机映射路径
API /app/logs/ ./logs/api/
Gateway /app/logs/ ./logs/gateway/
Nginx /var/log/nginx/ ./logs/nginx/
PostgreSQL /var/lib/postgresql/data/log/ ./logs/postgres/

登录 Web 控制台 → 系统设置 → 仪器管理 → 添加仪器

字段 示例值 说明
仪器名称 TS-16-001 自定义标识
品牌型号 Leica TS16 下拉选择
连接方式 TCP/IP TCP / Serial / Bluetooth
IP 地址 192.168.1.100 全站仪网络地址
端口 8080 GeoCOM 端口
测站编号 ZD01 对应监测方案中的测站
坐标系统 CGCS2000 与项目一致

点击 “测试连接” 按钮,控制台将发送 GET_INSTRUMENT_NAME 指令验证通信。


将证书文件放入 nginx/ssl/ 目录:

nginx/ssl/
├── tsm.yourdomain.com.crt
└── tsm.yourdomain.com.key

编辑 nginx/nginx.conf 启用 HTTPS 监听。

添加定时任务(crontab):

Terminal window
# 每天凌晨 2 点自动备份
0 2 * * * /opt/tsm-deploy/scripts/backup.sh >> /var/log/tsm-backup.log 2>&1

建议集成 Prometheus + Grafana 监控容器资源:

# docker-compose.yml 追加
prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus:/etc/prometheus
ports:
- "9090:9090"
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"

Q1: 启动时 PostgreSQL 报 “Permission denied”

Section titled “Q1: 启动时 PostgreSQL 报 “Permission denied””

原因: 数据目录权限不足。

解决:

Terminal window
sudo chown -R 999:999 ./data/postgres
# 999 是 postgres 容器内用户的 UID

原因: 前端 API 地址配置错误。

解决: 检查 .env 中的 NEXT_PUBLIC_API_URL 是否指向正确的 API 地址。

Q3: 全站仪连接成功但无数据返回

Section titled “Q3: 全站仪连接成功但无数据返回”

原因: 仪器未正确设站或目标棱镜未对准。

解决:

  1. 在仪器本地确认已完成设站(后视定向)
  2. 确认目标棱镜在视场内
  3. 检查 Gateway 日志中的详细通信报文



本文档最后更新于 2025-06-05 | 版本 v1.0.0 | 宁波睿威工程技术有限公司 版权所有

引用与复核把知识带回真实工程判断

引用时保留页面与来源线索;涉及标准条文、阈值、频率和项目结论,请回到现行依据与责任人复核。

查看 Agent 使用规则