视频教程:TSM 平台 Docker Compose 部署
本教程配套文档演示 RAILWISE-TSM 全站仪自动化变形监测平台的 Docker Compose 部署流程,涵盖环境准备、配置修改、服务启动、验证测试及常见问题排查。
视频教程:TSM 平台 Docker Compose 部署
Section titled “视频教程:TSM 平台 Docker Compose 部署”视频时长:约 18 分钟
难度:中级(需具备 Linux 基础操作能力)
目标:在本地或服务器完成 TSM 全栈部署并验证全站仪连接
本视频面向运维工程师、IT 管理员和项目经理,演示 RAILWISE-TSM 全站仪自动化监测平台的 Docker Compose 部署流程。通过本教程,您将学会:
- 准备部署环境(Docker、Docker Compose、Git)
- 获取并配置部署脚本
- 修改环境变量(数据库、安全密钥等)
- 启动服务并验证各组件状态
- 配置全站仪连接与测试通信
视频内容结构
Section titled “视频内容结构”| 章节 | 时间点 | 内容 |
|---|---|---|
| 架构概览 | 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 | 练习任务布置 |
- 具备 Linux 基础操作能力(命令行、文件编辑)
- 了解 Docker 和容器化的基本概念
- 了解网络基础(IP 地址、端口、防火墙)
- 拥有一台满足最低配置要求的服务器或虚拟机
步骤 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 安装过程
2.1 服务器配置要求
Section titled “2.1 服务器配置要求”| 环境 | 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 | 万兆 |
2.2 安装 Docker
Section titled “2.2 安装 Docker”# 更新系统包sudo apt update && sudo apt upgrade -y
# 安装 Docker(Ubuntu/Debian)curl -fsSL https://get.docker.com | sh
# 启动 Docker 服务sudo systemctl start dockersudo systemctl enable docker
# 验证安装docker --version# 预期输出:Docker version 24.0.x 或更高2.3 安装 Docker Compose
Section titled “2.3 安装 Docker Compose”# 安装 Docker Compose 插件(Docker 24.0+ 已内置)docker compose version# 预期输出:Docker Compose version v2.20.x 或更高
# 如未安装,手动安装sudo apt install docker-compose-plugin2.4 安装 Git
Section titled “2.4 安装 Git”# 安装 Gitsudo 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 克隆仓库,目录结构展示
# 克隆部署仓库git clone https://github.com/railwise/tsm-deploy.gitcd tsm-deploy
# 查看目录结构ls -latsm-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 文件编辑,密码生成,配置项说明
4.1 复制环境变量模板
Section titled “4.1 复制环境变量模板”# 复制模板文件cp .env.example .env
# 编辑环境变量nano .env # 或 vim / 任意编辑器4.2 生成安全密码
Section titled “4.2 生成安全密码”# 生成随机密码(推荐)openssl rand -base64 32
# 生成多个密码for name in postgres redis minio jwt apikey; do echo "${name}_password: $(openssl rand -base64 32)"done4.3 核心配置项
Section titled “4.3 核心配置项”# ==========================================# 基础配置# ==========================================COMPOSE_PROJECT_NAME=railwise-tsmTZ=Asia/Shanghai
# ==========================================# 数据库配置# ==========================================POSTGRES_HOST=postgresPOSTGRES_PORT=5432POSTGRES_DB=railwise_tsmPOSTGRES_USER=railwise# ⚠️ 必须修改:使用 openssl rand -base64 32 生成POSTGRES_PASSWORD=YOUR_GENERATED_PASSWORD_HERE
# ==========================================# Redis 配置# ==========================================REDIS_HOST=redisREDIS_PORT=6379# ⚠️ 必须修改REDIS_PASSWORD=YOUR_GENERATED_PASSWORD_HERE
# ==========================================# MinIO 对象存储配置# ==========================================MINIO_ROOT_USER=railwise# ⚠️ 必须修改MINIO_ROOT_PASSWORD=YOUR_GENERATED_PASSWORD_HEREMINIO_BUCKET_NAME=tsm-data
# ==========================================# API 服务配置# ==========================================API_PORT=3000# ⚠️ 必须修改:32位以上随机字符串API_JWT_SECRET=YOUR_GENERATED_JWT_SECRET_HEREAPI_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 位以上随机字符串。
切勿使用示例中的默认密码!
4.4 配置项说明
Section titled “4.4 配置项说明”| 配置项 | 说明 | 修改建议 |
|---|---|---|
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)”视频画面:执行启动脚本,服务启动过程,健康检查输出
5.1 添加执行权限并启动
Section titled “5.1 添加执行权限并启动”# 添加脚本执行权限chmod +x scripts/*.sh
# 执行启动脚本./scripts/start.sh5.2 启动脚本执行流程
Section titled “5.2 启动脚本执行流程”start.sh 执行流程:
- 检查 Docker 与 Docker Compose 可用性
- 加载
.env环境变量 - 创建必要的本地目录(数据卷、日志目录)
- 拉取最新镜像(首次)或构建本地镜像(开发模式)
- 按依赖顺序启动服务:PostgreSQL → Redis → MinIO → API → Web → Gateway
- 等待健康检查通过
- 输出访问地址与初始账号信息
5.3 预期输出
Section titled “5.3 预期输出”[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 测试命令,数据库验证
6.1 访问 Web 控制台
Section titled “6.1 访问 Web 控制台”- 打开浏览器
- 访问
http://localhost:3001(或服务器 IP + 端口) - 使用初始管理员账号登录
- 验证界面正常加载
6.2 验证 API 服务
Section titled “6.2 验证 API 服务”# 测试 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" }}6.3 验证数据库
Section titled “6.3 验证数据库”# 查看数据库表列表docker compose exec postgres psql -U railwise -d railwise_tsm -c "\dt"应输出已初始化的表列表。
6.4 查看服务状态
Section titled “6.4 查看服务状态”# 查看所有容器状态docker compose ps
# 查看资源使用情况docker stats --no-stream[截图占位符:Web 控制台登录界面、API 健康检查响应]
步骤 7:全站仪连接配置(12:30 - 15:00)
Section titled “步骤 7:全站仪连接配置(12:30 - 15:00)”视频画面:Web 控制台操作,添加仪器、配置参数、测试连接
7.1 进入仪器管理
Section titled “7.1 进入仪器管理”- 登录 Web 控制台
- 点击 系统设置 → 仪器管理
- 点击 添加仪器 按钮
7.2 填写仪器参数
Section titled “7.2 填写仪器参数”| 字段 | 示例值 | 说明 |
|---|---|---|
| 仪器名称 | TS-16-001 | 自定义标识 |
| 品牌型号 | Leica TS16 | 下拉选择 |
| 连接方式 | TCP/IP | TCP / Serial / Bluetooth |
| IP 地址 | 192.168.1.100 | 全站仪网络地址 |
| 端口 | 8080 | GeoCOM 端口 |
| 测站编号 | ZD01 | 对应监测方案中的测站 |
| 坐标系统 | CGCS2000 | 与项目一致 |
7.3 测试连接
Section titled “7.3 测试连接”- 点击 测试连接 按钮
- 系统将发送
GET_INSTRUMENT_NAME指令验证通信 - 预期响应:仪器型号和序列号
[截图占位符:Web 控制台仪器配置界面,测试连接成功提示]
步骤 8:生产环境加固(15:00 - 16:30)
Section titled “步骤 8:生产环境加固(15:00 - 16:30)”视频画面:SSL 证书配置、备份脚本、监控配置
8.1 SSL 证书配置
Section titled “8.1 SSL 证书配置”# 将证书文件放入 nginx/ssl/ 目录mkdir -p nginx/sslcp /path/to/your/cert.crt nginx/ssl/tsm.yourdomain.com.crtcp /path/to/your/key.key nginx/ssl/tsm.yourdomain.com.key
# 编辑 nginx/nginx.conf 启用 HTTPS 监听# 取消注释 SSL 相关配置8.2 数据库备份策略
Section titled “8.2 数据库备份策略”# 添加定时任务(crontab)crontab -e
# 添加以下行(每天凌晨 2 点自动备份)0 2 * * * /opt/tsm-deploy/scripts/backup.sh >> /var/log/tsm-backup.log 2>&18.3 监控集成(可选)
Section titled “8.3 监控集成(可选)”# 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 监控面板]
关键操作要点
Section titled “关键操作要点”要点 1:环境变量安全
Section titled “要点 1:环境变量安全”# 生成高强度密码的脚本#!/bin/bashecho "=== 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 文件对应位置"要点 2:服务管理命令
Section titled “要点 2:服务管理命令”| 操作 | 命令 | 说明 |
|---|---|---|
| 启动 | ./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 |
拉取最新镜像并重启 |
要点 3:日志路径
Section titled “要点 3:日志路径”| 服务 | 容器内路径 | 宿主机映射路径 |
|---|---|---|
| API | /app/logs/ |
./logs/api/ |
| Gateway | /app/logs/ |
./logs/gateway/ |
| Nginx | /var/log/nginx/ |
./logs/nginx/ |
| PostgreSQL | /var/lib/postgresql/data/log/ |
./logs/postgres/ |
要点 4:数据持久化
Section titled “要点 4:数据持久化”# 数据卷目录结构data/├── postgres/ # PostgreSQL 数据├── redis/ # Redis 数据├── minio/ # MinIO 对象存储└── logs/ # 各服务日志
# 备份数据卷docker compose exec postgres pg_dump -U railwise railwise_tsm > backup.sql常见问题(FAQ)
Section titled “常见问题(FAQ)”Q1: 启动时 PostgreSQL 报 “Permission denied”?
Section titled “Q1: 启动时 PostgreSQL 报 “Permission denied”?”原因:数据目录权限不足。
解决:
# 修复权限(999 是 postgres 容器内用户的 UID)sudo chown -R 999:999 ./data/postgres
# 重新启动./scripts/start.shQ2: Web 页面加载空白?
Section titled “Q2: Web 页面加载空白?”原因:前端 API 地址配置错误。
解决:
- 检查
.env中的NEXT_PUBLIC_API_URL是否指向正确的 API 地址 - 确保 API 服务已启动:
docker compose ps api - 检查浏览器开发者工具(F12)中的网络请求错误
Q3: 全站仪连接成功但无数据返回?
Section titled “Q3: 全站仪连接成功但无数据返回?”原因:仪器未正确设站或目标棱镜未对准。
解决:
- 在仪器本地确认已完成设站(后视定向)
- 确认目标棱镜在视场内
- 检查 Gateway 日志中的详细通信报文:
Terminal window docker compose logs -f gateway
Q4: 如何更新 TSM 到最新版本?
Section titled “Q4: 如何更新 TSM 到最新版本?”# 拉取最新镜像docker compose pull
# 重启服务./scripts/start.sh
# 如需数据库迁移,执行:docker compose run --rm api npx prisma migrate deployQ5: 如何查看实时监测数据?
Section titled “Q5: 如何查看实时监测数据?”# 查看 Gateway 实时日志docker compose logs -f gateway
# 查看 API 数据接收日志docker compose logs -f api | grep "measurement"Q6: 部署后如何修改配置?
Section titled “Q6: 部署后如何修改配置?”# 1. 修改 .env 文件nano .env
# 2. 重新加载配置并重启服务docker compose up -d --force-recreate练习 1:修改默认密码
Section titled “练习 1:修改默认密码”- 登录 Web 控制台(
http://localhost:3001) - 使用初始管理员账号登录
- 进入 系统设置 → 用户管理
- 修改管理员密码为高强度密码
- 创建一个新的项目管理员账号
练习 2:配置 SSL 证书
Section titled “练习 2:配置 SSL 证书”- 准备域名和 SSL 证书(可使用 Let’s Encrypt 免费证书)
- 将证书放入
nginx/ssl/目录 - 修改
nginx/nginx.conf启用 HTTPS - 重新启动 Nginx 服务:
docker compose restart nginx - 验证 HTTPS 访问正常
练习 3:配置自动备份
Section titled “练习 3:配置自动备份”- 编辑
scripts/backup.sh,修改备份目录和保留策略 - 添加 crontab 定时任务,每天凌晨 2 点执行备份
- 手动执行一次备份脚本,验证备份文件生成
- 检查备份日志:
cat /var/log/tsm-backup.log
练习 4:添加第二台全站仪
Section titled “练习 4:添加第二台全站仪”- 在 Web 控制台中进入 仪器管理
- 点击 添加仪器
- 配置第二台全站仪的参数(不同 IP 地址)
- 测试连接并验证通信正常
相关文档链接
Section titled “相关文档链接”- TSM 平台快速部署指南 — 更详细的图文版部署指南
- TSM 系统管理与运维指南 — 系统管理、备份恢复、性能监控
- TSM 全站仪自动化监测平台概述 — 产品功能与架构介绍
- TSM 数据导出与第三方系统集成 — 数据导出与集成指南
- 视频文件:
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 | 宁波睿威工程技术有限公司 版权所有
