系统部署
本页面只介绍新环境的首次部署。已有环境升级请阅读已有环境升级,出现异常需要恢复时请阅读异常回退。部署前请以交付清单确认版本、主机和网络地址;真实密码、人员资料和设备参数应保存在受控交付记录中,不写入公开手册。
部署范围
首次部署需要准备指定版本的镜像交付包、主机和网络信息。本页按“主机检查 → 加载镜像 → 空数据卷初始化 → 首次配置 → 上线验收”的顺序说明。
系统组成与端口
服务端由三个容器组成,录入端和大屏端安装在对应的 Android 终端。
| 组件 | 作用 | 默认入口 |
|---|---|---|
vittor_web | 提供管理页面并转发业务请求 | 宿主 HTTP 80,可用 WEB_PORT 修改 |
vittor_server | 提供业务接口、人员同步、识别事件和节点发现 | 容器 HTTP 8000;宿主 UDP 20785 |
vittor_mysql | 保存人员、空间、设备、识别事件和运行数据 | 容器 3306;宿主默认只绑定 127.0.0.1:3306 |
| 录入端 | 读取证件、采集照片并提交人员资料 | 终端管理 HTTP 8182;UDP 20785 |
| 大屏端 | 接收识别结果并展示现场状态 | 终端管理 HTTP 8181;按模式使用本地或云端接收端口 |
数据库、终端管理接口和 UDP 发现端口只应开放给需要的维护网络。中心服务中的人员同步和节点发现需要持续运行。
部署前检查
- 在主机安装 Docker Engine、Docker Compose v2、Bash 和 curl。
- 确认 Web 端口、数据库回环端口和 UDP
20785没有冲突;终端所在网络能够访问中心主机的局域网地址。 - 准备组织或主体、管理员、空间结构、录入端和识别设备的初始化资料。
- 确认数据库、人员照片和其他文件资源的保存位置与责任人;不要用清空数据卷的方式处理登录或业务数据问题。
- 将数据库密码、管理员凭证、设备密钥和人员照片保存在受控位置;对外分享截图、日志和导出包前先脱敏。
部署参数
部署脚本从当前终端会话读取参数。不要把真实密码写入 Compose 文件、脚本或公开文档。
| 参数 | 默认值 | 用途 |
|---|---|---|
MYSQL_ROOT_PASSWORD | 无默认值 | 首次启动必填;复用已有数据时必须与现有数据匹配 |
MYSQL_DATABASE | face_tp | 数据库名称 |
WEB_PORT | 80 | Web 宿主端口 |
MYSQL_PORT | 3306 | 数据库宿主端口,仅绑定 127.0.0.1 |
DISCOVERY_HOST | 自动检测 | 终端可访问的中心主机地址 |
DISCOVERY_HTTP_BASE_URL | 根据主机地址生成 | 广播给终端的完整中心地址 |
DISCOVERY_PORT | 20785 | 局域网发现 UDP 端口 |
DISCOVERY_TIMEOUT | 45 秒 | 超过该时间没有新广播时判为离线 |
VITTOR_PUSH_WORKER | 1 | 是否启动人员同步任务 |
VITTOR_PUSH_INTERVAL | 5 秒 | 人员同步任务间隔 |
VITTOR_DISCOVERY_WORKER | 1 | 是否启动节点发现任务 |
HUIYAN_URL | 空 | 默认慧眼或大屏地址 |
HEARTBEAT_TIMEOUT | 60 秒 | 服务心跳离线判断时间 |
多网卡、虚拟机或容器环境必须显式核对 DISCOVERY_HOST 和 DISCOVERY_HTTP_BASE_URL。不要把容器内部地址或 127.0.0.1 广播给其他终端。
使用镜像交付包
将交付清单指定的部署包复制到主机并进入该目录。下面示例使用 Bash:
cd /path/to/deployment-package
export MYSQL_ROOT_PASSWORD='请通过受控方式设置'
export DISCOVERY_HOST='192.168.1.20'
export DISCOVERY_HTTP_BASE_URL="http://${DISCOVERY_HOST}:${WEB_PORT:-80}"
# 加载镜像、创建数据卷并启动服务
bash deploy/load-and-start.sh如果镜像已经加载过,只需执行:
bash deploy/start.sh脚本会检查 Docker Compose、创建外部数据卷、等待数据库健康,并尝试访问心跳接口。默认从部署包内读取 vittor-images.tar.gz;镜像文件放在其他位置时,可通过 IMAGE_ARCHIVE 指定路径。
首次启动与初始化
首次使用空数据卷时,系统会按交付版本自动创建基础数据结构和初始配置;已有数据卷不会因更换镜像、修改环境变量或重启服务而重复初始化。
初始管理员仅用于首次进入系统。登录后立即修改密码,并确认组织、管理员权限、空间结构和设备配置。初始化完成不代表业务关系已经配置完成,仍需按“首次配置”和“上线验收”继续操作。
首次配置顺序
- 执行
bash deploy/status.sh,确认vittor_mysql、vittor_server和vittor_web稳定运行且没有持续重启。 - 登录 Web 管理端,确认组织、管理员权限和基础空间结构。
- 让录入端和大屏端连接同一局域网,检查它们是否通过 UDP
20785出现在“系统配置”中。 - 在“系统配置”中下发中心服务地址。录入端管理接口为
http://设备地址:8182/api/config,大屏端管理接口为http://设备地址:8181/api/config;修改后从终端确认保存结果。 - 按现场模式配置慧眼或大屏地址,保存后重新检查连接状态。
上线验收
从基础设施到现场业务按顺序验收:
| 层级 | 检查 | 通过标准 |
|---|---|---|
| 服务 | docker compose ps、服务日志 | 三个服务稳定运行,数据库健康,无持续重启 |
| Web | 打开管理页面 | 实际操作电脑可以访问首页和登录页 |
| 中心服务 | GET /api/heartbeat | 返回 state=1,响应时间和服务信息正常 |
| 数据 | 登录后查询一条已知组织、空间和人员 | 数据正确,照片或文件资源可读取 |
| 节点发现 | GET /api/discovery/nodes | 录入端和大屏端能被发现,地址可从终端访问 |
| 终端配置 | 下发中心地址 | 两类终端保存配置并恢复连接 |
| 人员同步 | 新增或修改一名测试人员 | 中心记录、目标设备资料和处理结果一致 |
| 识别闭环 | 完成一次真实测试识别 | 接收端和大屏显示同一人员、设备和时间 |
默认 Web 端口下,可执行以下只读检查;修改端口后替换地址:
bash deploy/status.sh
curl --fail http://127.0.0.1/api/heartbeat
curl --fail http://127.0.0.1/api/device/online-count
curl --fail http://127.0.0.1/api/discovery/nodes首页能打开、数据库健康和心跳成功分别只证明单个环节,不能替代登录、数据、同步和识别验收。节点数量也不能直接等同于在线识别设备数量。
相关接口
| 接口 | 用途 | 说明 |
|---|---|---|
GET/POST /api/heartbeat | 中心服务心跳 | 不查库、不写业务数据 |
GET /api/discovery/nodes | 查看最近发现的系统节点 | 受 DISCOVERY_TIMEOUT 影响 |
POST /api/discovery/configure | 向已发现终端下发中心地址 | 仅限可信内网和管理员操作 |
GET/POST /api/huiyan/route | 查看或修改慧眼地址 | 需要管理员会话 |
GET /api/device/online-count | 查询已启用且在线的识别设备数量 | 用于大屏统计,不代表节点发现数量 |
详细的业务链路和故障分层见故障排查。