Files
iotlcm/docs/03-启动与验证.md
T
MiFaZhan 503fe59fe7 docs: 部署文档
- README:项目概览、快速开始、目录结构、重要提示
- 01 环境准备:硬件/系统/Docker 版本、镜像仓库、端口、防火墙、可选外部服务
- 02 配置说明:.env 必填与可选项、10 份应用配置逐项说明、启动前自检
- 03 启动与验证:首次初始化流程、状态检查、6 步验证清单、首次登录必做项
- 04 可选服务:挡板 onelink-mock、飞书 bot、自带 nginx(含 HTTPS)、组合启动
- 05 升级与备份:版本固定、升级回滚、备份脚本与恢复、日志清理、监控指标
- 06 故障排查:启动/功能/性能/网络四类共 20 个问题
2026-10-28 13:54:39 +08:00

4.4 KiB
Raw Blame History

启动与验证

启动

# 前台启动(首次部署建议,便于观察初始化过程)
docker compose up

# 确认无误后改为后台
docker compose up -d

首次启动会发生什么

  1. MySQL 建库并导入 schema(约 1~2 分钟) schema/ 下的 12 个脚本按文件名顺序自动执行:建表 → 结构补齐 → 创建应用账号 → 重置种子账号口令 → 导入通道模板/字典/菜单等种子数据
  2. MySQL 通过健康检查后,admin-svr、openapi、worker-svr 等服务依次启动
  3. 各服务向 Consul 注册

观察初始化进度:

docker compose logs -f mysql

看到 [initdb] 应用账号 u_iotlcm 已创建 与 [initdb] 种子账号口令已统一重置 表示初始化完成。

::: warning 首次初始化失败的处理 MySQL 只在 data/mysql 为空时执行 schema/。若初始化中途失败,修改脚本后必须清空数据卷才会重跑:

docker compose down
sudo rm -rf ./data/mysql
docker compose up -d

这会删除全部数据,仅在首次部署阶段使用。 :::

检查运行状态

docker compose ps

期望结果:

服务 状态
iotlcm-mysql Up (healthy)
iotlcm-redis Up (healthy)
iotlcm-rabbitmq Up (healthy)
iotlcm-consul Up
iotlcm-admin-svr Up
iotlcm-admin-ui Up
iotlcm-openapi Up
iotlcm-upstream-chan Up
iotlcm-upstream-proxy Up
iotlcm-worker-svr Up
iotlcm-app-server Up
iotlcm-app-web Up
iotlcm-sms Up (healthy)
iotlcm-docs Up

任一服务显示 Restarting 或 Exited 需查日志:

docker compose logs --tail=100 <服务名>

验证清单

按顺序逐项确认,任一步失败先解决再继续。

1. 数据库

docker compose exec mysql sh -c \
  'mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "SELECT COUNT(*) AS tables_count FROM information_schema.tables WHERE table_schema=\"db_iotlcm\";"'

预期输出 tables_count 为 89。

# 确认种子数据
docker compose exec mysql sh -c \
  'mysql -uroot -p"$MYSQL_ROOT_PASSWORD" db_iotlcm -e "SELECT COUNT(*) AS menus FROM sys_menu; SELECT COUNT(*) AS users FROM sys_user;"'

预期:菜单约 447 条,账号 18 个。

2. 管理端后端

curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8008/api.json

预期 200。

3. 管理端前端

curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8009/

预期 200。

4. 对外 API

curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8000/api.json

预期 200。

5. 短信服务

curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:11190/healthz

预期 200。

6. 浏览器登录

访问 http://<宿主机IP>:8009:

项 值
账号 admin
口令 .env 里的 MYSQL_ADMIN_PASSWORD

能进入首页工作台、左侧菜单完整显示,即部署成功。

首次登录后必做

  1. 修改 admin 口令:右上角个人中心 → 安全设置
  2. 修改其余种子账号口令:种子账号(user02、2admin 等 17 个)默认与 admin 同一口令,如不使用请停用或删除
  3. 确认字典与菜单加载正常:进入「卡信息」页,确认筛选下拉框选项不为空

后端服务自检

# admin-svr 是否连上数据库
docker compose logs admin-svr | grep -i 'error\|panic' | tail -20

# worker-svr 是否连上 RabbitMQ
docker compose logs worker-svr | tail -30

# upstream-chan 是否连上 Redis 与 Consul
docker compose logs upstream-chan | tail -30

正常日志里不应出现 connection refused、access denied、panic。

停止与重启

docker compose stop          # 停止容器,保留数据
docker compose restart       # 重启全部
docker compose restart admin-svr   # 重启单个服务
docker compose down          # 停止并删除容器(数据卷在 ./data,不受影响)

::: danger 不要执行 docker compose down -v -v 会删除命名数据卷。虽然本编排的数据都在 ./data 宿主机目录下,但 down -v 仍可能影响其他同项目的卷。停止服务用 down 即可。 :::

下一步