产品文档已发布
TSM 平台快速部署
RAILWISE-TSM 全站仪自动化变形监测平台的 Docker Compose 部署、环境配置、服务启停及初始化的完整操作指南。
产品文档
TSM 平台快速部署
Section titled “TSM 平台快速部署”预计阅读时间: 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,请参考官方文档:
步骤 1:获取部署脚本
Section titled “步骤 1:获取部署脚本”git clone https://github.com/railwise/tsm-deploy.gitcd 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 # 数据备份步骤 2:配置环境变量
Section titled “步骤 2:配置环境变量”cp .env.example .envnano .env # 或 vim / 任意编辑器核心配置项:
# ==========================================# 基础配置# ==========================================COMPOSE_PROJECT_NAME=railwise-tsmTZ=Asia/Shanghai
# ==========================================# 数据库配置# ==========================================POSTGRES_HOST=postgresPOSTGRES_PORT=5432POSTGRES_DB=railwise_tsmPOSTGRES_USER=railwisePOSTGRES_PASSWORD=CHANGE_THIS_STRONG_PASSWORD
# ==========================================# Redis 配置# ==========================================REDIS_HOST=redisREDIS_PORT=6379REDIS_PASSWORD=CHANGE_THIS_REDIS_PASSWORD
# ==========================================# MinIO 对象存储配置# ==========================================MINIO_ROOT_USER=railwiseMINIO_ROOT_PASSWORD=CHANGE_THIS_MINIO_PASSWORDMINIO_BUCKET_NAME=tsm-data
# ==========================================# API 服务配置# ==========================================API_PORT=3000API_JWT_SECRET=CHANGE_THIS_JWT_SECRET_32_CHAR_MINAPI_CORS_ORIGIN=https://tsm.yourdomain.com
# ==========================================# Web 前端配置# ==========================================WEB_PORT=3001NEXT_PUBLIC_API_URL=https://tsm.yourdomain.com/api
# ==========================================# 边缘网关配置# ==========================================GATEWAY_PORT=50051GATEWAY_LOG_LEVEL=info生产环境请务必修改所有默认密码,尤其是 POSTGRES_PASSWORD、JWT_SECRET 和 MINIO_ROOT_PASSWORD。建议使用 32 位以上随机字符串。
步骤 3:启动服务
Section titled “步骤 3:启动服务”chmod +x scripts/*.sh./scripts/start.shstart.sh 执行流程:
- 检查 Docker 与 Docker Compose 可用性
- 加载
.env环境变量 - 创建必要的本地目录(数据卷、日志目录)
- 拉取最新镜像(首次)或构建本地镜像(开发模式)
- 按依赖顺序启动服务:PostgreSQL → Redis → MinIO → API → Web → Gateway
- 等待健康检查通过
- 输出访问地址与初始账号信息
预期输出:
[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
请立即登录并修改默认密码!═══════════════════════════════════════════步骤 4:验证部署
Section titled “步骤 4:验证部署”4.1 访问 Web 控制台
Section titled “4.1 访问 Web 控制台”打开浏览器访问 http://localhost:3001,使用初始账号登录。
4.2 验证 API 服务
Section titled “4.2 验证 API 服务”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" }}4.3 验证数据库
Section titled “4.3 验证数据库”docker compose exec postgres psql -U railwise -d railwise_tsm -c "\dt"应输出已初始化的表列表。
常用操作命令
Section titled “常用操作命令”| 操作 | 命令 | 说明 |
|---|---|---|
| 启动 | ./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/ |
全站仪连接配置
Section titled “全站仪连接配置”步骤 1:进入控制台添加仪器
Section titled “步骤 1:进入控制台添加仪器”登录 Web 控制台 → 系统设置 → 仪器管理 → 添加仪器
步骤 2:填写仪器参数
Section titled “步骤 2:填写仪器参数”| 字段 | 示例值 | 说明 |
|---|---|---|
| 仪器名称 | TS-16-001 | 自定义标识 |
| 品牌型号 | Leica TS16 | 下拉选择 |
| 连接方式 | TCP/IP | TCP / Serial / Bluetooth |
| IP 地址 | 192.168.1.100 | 全站仪网络地址 |
| 端口 | 8080 | GeoCOM 端口 |
| 测站编号 | ZD01 | 对应监测方案中的测站 |
| 坐标系统 | CGCS2000 | 与项目一致 |
步骤 3:测试连接
Section titled “步骤 3:测试连接”点击 “测试连接” 按钮,控制台将发送 GET_INSTRUMENT_NAME 指令验证通信。
生产环境加固
Section titled “生产环境加固”SSL 证书配置
Section titled “SSL 证书配置”将证书文件放入 nginx/ssl/ 目录:
nginx/ssl/├── tsm.yourdomain.com.crt└── tsm.yourdomain.com.key编辑 nginx/nginx.conf 启用 HTTPS 监听。
数据库备份策略
Section titled “数据库备份策略”添加定时任务(crontab):
# 每天凌晨 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””原因: 数据目录权限不足。
解决:
sudo chown -R 999:999 ./data/postgres# 999 是 postgres 容器内用户的 UIDQ2: Web 页面加载空白
Section titled “Q2: Web 页面加载空白”原因: 前端 API 地址配置错误。
解决: 检查 .env 中的 NEXT_PUBLIC_API_URL 是否指向正确的 API 地址。
Q3: 全站仪连接成功但无数据返回
Section titled “Q3: 全站仪连接成功但无数据返回”原因: 仪器未正确设站或目标棱镜未对准。
解决:
- 在仪器本地确认已完成设站(后视定向)
- 确认目标棱镜在视场内
- 检查 Gateway 日志中的详细通信报文
- CLI 快速入门 — 使用命令行工具批量处理监测数据
- 地铁保护区自动化监测规范 — 轨道交通场景监测方案配置
- TSM OpenAPI 文档 — 程序化接口调用指南
📋 元数据标签
Section titled “📋 元数据标签”本文档最后更新于 2025-06-05 | 版本 v1.0.0 | 宁波睿威工程技术有限公司 版权所有
