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