--- title: 启动与验证 description: 首次启动流程、状态检查与验证清单 outline: deep --- # 启动与验证 ## 启动 ```bash git clone <部署仓地址> iotlcm-deploy cd iotlcm-deploy # 首次部署建议前台启动,便于观察初始化过程 docker compose up # 确认无误后转后台 docker compose up -d ``` 不需要复制或修改任何文件,配置已带可用默认值。 ### 首次启动发生什么 1. **MySQL 建库并导入 schema**(约 1~2 分钟) `schema/` 下 13 个脚本按文件名顺序执行:建表 → 结构补齐 → 创建应用账号 → 重置种子账号口令 → 导入通道模板/字典/菜单等种子数据 2. MySQL 通过健康检查后,`admin-svr`、`openapi`、`worker-svr` 依次启动 3. 各服务向 Consul 注册 观察初始化进度: ```bash docker compose logs -f mysql ``` 看到 `[initdb] 应用账号 u_iotlcm 已创建` 与 `[initdb] 种子账号口令已统一重置` 表示初始化完成。 ::: warning 初始化失败需清空数据卷 MySQL 只在 `data/mysql` 为空时执行 `schema/`。若中途失败,改完脚本必须清空卷才会重跑: ```bash docker compose down sudo rm -rf ./data/mysql docker compose up -d ``` 这会删除全部数据,仅限首次部署阶段使用。 ::: ## 检查状态 ```bash 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` 需查日志: ```bash docker compose logs --tail=100 <服务名> ``` ## 验证清单 按顺序逐项确认,任一步失败先解决再继续。 ### 1. 数据库表数量 ```bash docker compose exec mysql sh -c \ 'mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e \ "SELECT COUNT(*) AS tables FROM information_schema.tables WHERE table_schema=\"db_iotlcm\";"' ``` 预期 `tables` = **89**。 ### 2. 种子数据 ```bash docker compose exec mysql sh -c \ 'mysql -uroot -p"$MYSQL_ROOT_PASSWORD" db_iotlcm -e \ "SELECT (SELECT COUNT(*) FROM sys_menu) AS menus, (SELECT COUNT(*) FROM sys_user) AS users;"' ``` 预期菜单约 **447** 条,账号 **18** 个。 ### 3. 管理端后端 ```bash curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8008/api.json ``` 预期 `200`。 ### 4. 管理端前端 ```bash curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8009/ ``` 预期 `200`。 ### 5. 对外 API ```bash curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8000/api.json ``` 预期 `200`。 ### 6. 短信服务 ```bash curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:11190/healthz ``` 预期 `200`。 ### 7. 浏览器登录 访问 `http://<宿主机IP>:8009`: | 项 | 值 | | --- | --- | | 账号 | `admin` | | 口令 | `docker-compose.yml` 中 admin 的默认口令(首次登录后立即修改) | 能进入首页工作台、左侧菜单完整显示即部署成功。 ## 首次登录后必做 1. **修改 admin 口令**:右上角个人中心 → 安全设置 2. **处理其余种子账号**:`user02`、`2admin` 等 17 个账号默认与 admin 同一口令,不使用请停用或删除 3. **确认字典与菜单加载**:进入「卡信息」页,确认筛选下拉选项不为空 ## 后端自检 ```bash # admin-svr 是否连上数据库 docker compose logs admin-svr | grep -iE '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`。 ## 停止与重启 ```bash docker compose stop # 停止,保留数据 docker compose restart # 重启全部 docker compose restart admin-svr # 重启单个 docker compose down # 停止并删除容器(./data 不受影响) ``` ::: danger 不要执行 down -v `-v` 会删除命名数据卷。本编排数据都在 `./data` 宿主机目录,但 `-v` 仍可能影响同项目的其他卷。停止服务用 `down` 即可。 ::: ## 下一步 - 需要运营商挡板联调 → [可选服务](optional) - 需要域名访问 → [可选服务](optional) 的反向代理章节 - 遇到报错 → [故障排查](troubleshooting)