跳转到内容
RailWise KB已发布

视频教程:TSM 平台 Docker Compose 部署

本教程配套文档演示 RAILWISE-TSM 全站仪自动化变形监测平台的 Docker Compose 部署流程,涵盖环境准备、配置修改、服务启动、验证测试及常见问题排查。

复核 2026-07-09入门公开可引用RailWise 技术团队
learning-path

视频教程:TSM 平台 Docker Compose 部署

Section titled “视频教程:TSM 平台 Docker Compose 部署”

视频时长:约 18 分钟
难度:中级(需具备 Linux 基础操作能力)
目标:在本地或服务器完成 TSM 全栈部署并验证全站仪连接


本视频面向运维工程师、IT 管理员和项目经理,演示 RAILWISE-TSM 全站仪自动化监测平台的 Docker Compose 部署流程。通过本教程,您将学会:

  1. 准备部署环境(Docker、Docker Compose、Git)
  2. 获取并配置部署脚本
  3. 修改环境变量(数据库、安全密钥等)
  4. 启动服务并验证各组件状态
  5. 配置全站仪连接与测试通信
章节 时间点 内容
架构概览 00:00 - 01:30 TSM 架构介绍、组件说明、部署模式
环境准备 01:30 - 03:30 系统要求、Docker 安装、Git 安装
获取部署脚本 03:30 - 04:30 克隆仓库、目录结构、文件说明
配置环境变量 04:30 - 07:30 .env 配置、密码生成、域名配置
启动服务 07:30 - 10:00 启动命令、健康检查、日志查看
验证部署 10:00 - 12:30 Web 访问、API 测试、数据库验证
全站仪连接 12:30 - 15:00 添加仪器、配置参数、测试连接
生产加固 15:00 - 16:30 SSL 配置、备份策略、监控集成
常见问题 16:30 - 17:30 启动失败、连接失败、权限问题
课后练习 17:30 - 18:00 练习任务布置

  1. 具备 Linux 基础操作能力(命令行、文件编辑)
  2. 了解 Docker 和容器化的基本概念
  3. 了解网络基础(IP 地址、端口、防火墙)
  4. 拥有一台满足最低配置要求的服务器或虚拟机

步骤 1:架构概览(00:00 - 01:30)

Section titled “步骤 1:架构概览(00:00 - 01:30)”

视频画面: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 实时计算引擎 │ │ │
│ │ │ (坐标转换 / 平差计算 / 变形检测) │ │ │
│ │ └─────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
组件 技术 用途 端口
Web 前端 Next.js 用户界面 3001
API 服务 NestJS 业务逻辑 3000
数据库 PostgreSQL 业务数据 5432
缓存 Redis 缓存/队列 6379
对象存储 MinIO 文件/报告 9000/9001
网关 Nginx 反向代理 80/443
边缘网关 Rust 全站仪通信 50051

[截图占位符:TSM 架构图,各组件标注]


步骤 2:环境准备(01:30 - 03:30)

Section titled “步骤 2:环境准备(01:30 - 03:30)”

视频画面:终端命令执行,版本检查,Docker 安装过程

环境 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 万兆
Terminal window
# 更新系统包
sudo apt update && sudo apt upgrade -y
# 安装 Docker(Ubuntu/Debian)
curl -fsSL https://get.docker.com | sh
# 启动 Docker 服务
sudo systemctl start docker
sudo systemctl enable docker
# 验证安装
docker --version
# 预期输出:Docker version 24.0.x 或更高
Terminal window
# 安装 Docker Compose 插件(Docker 24.0+ 已内置)
docker compose version
# 预期输出:Docker Compose version v2.20.x 或更高
# 如未安装,手动安装
sudo apt install docker-compose-plugin
Terminal window
# 安装 Git
sudo apt install git -y
# 验证安装
git --version
# 预期输出:git version 2.30.x 或更高

[截图占位符:Docker 和 Docker Compose 版本输出]


步骤 3:获取部署脚本(03:30 - 04:30)

Section titled “步骤 3:获取部署脚本(03:30 - 04:30)”

视频画面:Git 克隆仓库,目录结构展示

Terminal window
# 克隆部署仓库
git clone https://github.com/railwise/tsm-deploy.git
cd tsm-deploy
# 查看目录结构
ls -la
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 # 数据备份

[截图占位符:目录结构展示]


步骤 4:配置环境变量(04:30 - 07:30)

Section titled “步骤 4:配置环境变量(04:30 - 07:30)”

视频画面:.env 文件编辑,密码生成,配置项说明

Terminal window
# 复制模板文件
cp .env.example .env
# 编辑环境变量
nano .env # 或 vim / 任意编辑器
Terminal window
# 生成随机密码(推荐)
openssl rand -base64 32
# 生成多个密码
for name in postgres redis minio jwt apikey; do
echo "${name}_password: $(openssl rand -base64 32)"
done
Terminal window
# ==========================================
# 基础配置
# ==========================================
COMPOSE_PROJECT_NAME=railwise-tsm
TZ=Asia/Shanghai
# ==========================================
# 数据库配置
# ==========================================
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
POSTGRES_DB=railwise_tsm
POSTGRES_USER=railwise
# ⚠️ 必须修改:使用 openssl rand -base64 32 生成
POSTGRES_PASSWORD=YOUR_GENERATED_PASSWORD_HERE
# ==========================================
# Redis 配置
# ==========================================
REDIS_HOST=redis
REDIS_PORT=6379
# ⚠️ 必须修改
REDIS_PASSWORD=YOUR_GENERATED_PASSWORD_HERE
# ==========================================
# MinIO 对象存储配置
# ==========================================
MINIO_ROOT_USER=railwise
# ⚠️ 必须修改
MINIO_ROOT_PASSWORD=YOUR_GENERATED_PASSWORD_HERE
MINIO_BUCKET_NAME=tsm-data
# ==========================================
# API 服务配置
# ==========================================
API_PORT=3000
# ⚠️ 必须修改:32位以上随机字符串
API_JWT_SECRET=YOUR_GENERATED_JWT_SECRET_HERE
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 位以上随机字符串。

切勿使用示例中的默认密码!

配置项 说明 修改建议
POSTGRES_PASSWORD 数据库密码 必须修改,32位随机字符串
REDIS_PASSWORD 缓存密码 必须修改,32位随机字符串
MINIO_ROOT_PASSWORD 对象存储密码 必须修改,32位随机字符串
API_JWT_SECRET JWT 签名密钥 必须修改,32位以上随机字符串
API_CORS_ORIGIN 允许跨域来源 修改为实际域名
NEXT_PUBLIC_API_URL 前端 API 地址 修改为实际域名

[截图占位符:.env 文件编辑界面,关键配置项高亮]


步骤 5:启动服务(07:30 - 10:00)

Section titled “步骤 5:启动服务(07:30 - 10:00)”

视频画面:执行启动脚本,服务启动过程,健康检查输出

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
请立即登录并修改默认密码!
═══════════════════════════════════════════

首次部署成功后,请立即使用初始管理员账号登录 Web 控制台,修改默认密码以确保系统安全。

[截图占位符:启动成功后的终端输出]


步骤 6:验证部署(10:00 - 12:30)

Section titled “步骤 6:验证部署(10:00 - 12:30)”

视频画面:浏览器访问 Web 控制台,API 测试命令,数据库验证

  1. 打开浏览器
  2. 访问 http://localhost:3001(或服务器 IP + 端口)
  3. 使用初始管理员账号登录
  4. 验证界面正常加载
Terminal window
# 测试 API 健康检查
curl http://localhost:3000/api/health

预期响应:

{
"status": "ok",
"version": "2.3.1",
"timestamp": "2025-06-15T14: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"

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

Terminal window
# 查看所有容器状态
docker compose ps
# 查看资源使用情况
docker stats --no-stream

[截图占位符:Web 控制台登录界面、API 健康检查响应]


步骤 7:全站仪连接配置(12:30 - 15:00)

Section titled “步骤 7:全站仪连接配置(12:30 - 15:00)”

视频画面:Web 控制台操作,添加仪器、配置参数、测试连接

  1. 登录 Web 控制台
  2. 点击 系统设置 → 仪器管理
  3. 点击 添加仪器 按钮
字段 示例值 说明
仪器名称 TS-16-001 自定义标识
品牌型号 Leica TS16 下拉选择
连接方式 TCP/IP TCP / Serial / Bluetooth
IP 地址 192.168.1.100 全站仪网络地址
端口 8080 GeoCOM 端口
测站编号 ZD01 对应监测方案中的测站
坐标系统 CGCS2000 与项目一致
  1. 点击 测试连接 按钮
  2. 系统将发送 GET_INSTRUMENT_NAME 指令验证通信
  3. 预期响应:仪器型号和序列号

[截图占位符:Web 控制台仪器配置界面,测试连接成功提示]


步骤 8:生产环境加固(15:00 - 16:30)

Section titled “步骤 8:生产环境加固(15:00 - 16:30)”

视频画面:SSL 证书配置、备份脚本、监控配置

Terminal window
# 将证书文件放入 nginx/ssl/ 目录
mkdir -p nginx/ssl
cp /path/to/your/cert.crt nginx/ssl/tsm.yourdomain.com.crt
cp /path/to/your/key.key nginx/ssl/tsm.yourdomain.com.key
# 编辑 nginx/nginx.conf 启用 HTTPS 监听
# 取消注释 SSL 相关配置
Terminal window
# 添加定时任务(crontab)
crontab -e
# 添加以下行(每天凌晨 2 点自动备份)
0 2 * * * /opt/tsm-deploy/scripts/backup.sh >> /var/log/tsm-backup.log 2>&1
# docker-compose.yml 追加监控服务
services:
prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus:/etc/prometheus
ports:
- "9090:9090"
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"

[截图占位符:SSL 证书目录、备份脚本执行、Grafana 监控面板]


generate-passwords.sh
# 生成高强度密码的脚本
#!/bin/bash
echo "=== TSM 密码生成脚本 ==="
echo ""
echo "POSTGRES_PASSWORD=$(openssl rand -base64 32)"
echo "REDIS_PASSWORD=$(openssl rand -base64 32)"
echo "MINIO_ROOT_PASSWORD=$(openssl rand -base64 32)"
echo "API_JWT_SECRET=$(openssl rand -base64 48)"
echo ""
echo "请将这些密码填入 .env 文件对应位置"
操作 命令 说明
启动 ./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/
Terminal window
# 数据卷目录结构
data/
├── postgres/ # PostgreSQL 数据
├── redis/ # Redis 数据
├── minio/ # MinIO 对象存储
└── logs/ # 各服务日志
# 备份数据卷
docker compose exec postgres pg_dump -U railwise railwise_tsm > backup.sql

Q1: 启动时 PostgreSQL 报 “Permission denied”?

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

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

解决

Terminal window
# 修复权限(999 是 postgres 容器内用户的 UID)
sudo chown -R 999:999 ./data/postgres
# 重新启动
./scripts/start.sh

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

解决

  1. 检查 .env 中的 NEXT_PUBLIC_API_URL 是否指向正确的 API 地址
  2. 确保 API 服务已启动:docker compose ps api
  3. 检查浏览器开发者工具(F12)中的网络请求错误

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

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

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

解决

  1. 在仪器本地确认已完成设站(后视定向)
  2. 确认目标棱镜在视场内
  3. 检查 Gateway 日志中的详细通信报文:
    Terminal window
    docker compose logs -f gateway
Terminal window
# 拉取最新镜像
docker compose pull
# 重启服务
./scripts/start.sh
# 如需数据库迁移,执行:
docker compose run --rm api npx prisma migrate deploy
Terminal window
# 查看 Gateway 实时日志
docker compose logs -f gateway
# 查看 API 数据接收日志
docker compose logs -f api | grep "measurement"
Terminal window
# 1. 修改 .env 文件
nano .env
# 2. 重新加载配置并重启服务
docker compose up -d --force-recreate

  1. 登录 Web 控制台(http://localhost:3001
  2. 使用初始管理员账号登录
  3. 进入 系统设置 → 用户管理
  4. 修改管理员密码为高强度密码
  5. 创建一个新的项目管理员账号
  1. 准备域名和 SSL 证书(可使用 Let’s Encrypt 免费证书)
  2. 将证书放入 nginx/ssl/ 目录
  3. 修改 nginx/nginx.conf 启用 HTTPS
  4. 重新启动 Nginx 服务:docker compose restart nginx
  5. 验证 HTTPS 访问正常
  1. 编辑 scripts/backup.sh,修改备份目录和保留策略
  2. 添加 crontab 定时任务,每天凌晨 2 点执行备份
  3. 手动执行一次备份脚本,验证备份文件生成
  4. 检查备份日志:cat /var/log/tsm-backup.log
  1. 在 Web 控制台中进入 仪器管理
  2. 点击 添加仪器
  3. 配置第二台全站仪的参数(不同 IP 地址)
  4. 测试连接并验证通信正常


  • 视频文件video-tsm-01-docker-deploy.mp4
  • 部署脚本包tsm-deploy-sample.zip
  • 讲义下载handout-tsm-01.pdf
  • 字幕文件video-tsm-01-docker-deploy.srt


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