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

174 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 启动与验证
## 启动
```bash
# 前台启动(首次部署建议,便于观察初始化过程)
docker compose up
# 确认无误后改为后台
docker compose up -d
```
### 首次启动会发生什么
1. **MySQL 建库并导入 schema**(约 1~2 分钟)
`schema/` 下的 12 个脚本按文件名顺序自动执行:建表 → 结构补齐 → 创建应用账号 → 重置种子账号口令 → 导入通道模板/字典/菜单等种子数据
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_count FROM information_schema.tables WHERE table_schema=\"db_iotlcm\";"'
```
预期输出 `tables_count` 为 **89**。
```bash
# 确认种子数据
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. 管理端后端
```bash
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8008/api.json
```
预期 `200`。
### 3. 管理端前端
```bash
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8009/
```
预期 `200`。
### 4. 对外 API
```bash
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8000/api.json
```
预期 `200`。
### 5. 短信服务
```bash
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. **确认字典与菜单加载正常**:进入「卡信息」页,确认筛选下拉框选项不为空
## 后端服务自检
```bash
# 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`。
## 停止与重启
```bash
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` 即可。
:::
## 下一步
- 需要运营商挡板联调 → [可选服务](04-可选服务.md)
- 需要对外域名访问 → [可选服务](04-可选服务.md) 的反向代理章节
- 遇到报错 → [故障排查](06-故障排查.md)