基于 docker-compose.yml
文件(包含 emqx(MQTT服务)、backend(后端服务)、mysql(数据库))的详细运行、调试、增改删操作说明,结合流程图示意(使用PlantUML语法)。
一、开发环境准备
1. 安装基础工具
Docker:官网下载
Docker Compose:官网安装
代码编辑器:VS Code/WebStorm(推荐安装Docker插件)
数据库可视化工具:MySQL Workbench/Navicat/DBeaver(用于数据库操作)
后端调试工具:Node.js调试插件(如VS Code的
JavaScript Debug Terminal
)
2. 代码目录结构
项目根目录/
├── backend/ # 后端代码
│ ├── app/ # 业务代码
│ ├── start-system.bat # 启动脚本(Windows)
│ └── Dockerfile # 后端Docker构建文件
├── docker-compose.yml # 服务编排文件
├── .env # 环境变量配置(示例)
└── README.md # 说明文档
二、服务运行流程
1. 启动服务(按依赖顺序)
# 1. 拉取/构建镜像(首次运行)
docker-compose up -d --build# 2. 查看服务状态
docker-compose ps# 3. 验证健康检查(backend依赖emqx和mysql健康)
docker-compose logs backend | grep "服务依赖状态"
2. 服务依赖逻辑
emqx:独立运行,提供MQTT通信(无健康依赖)
mysql:需初始化数据库(通过环境变量
MYSQL_DATABASE
创建库)backend:依赖
emqx
和mysql
服务健康后启动(通过depends_on
条件控制)
三、开发调试指南
1. 后端服务(Backend)
▶ 运行与调试
本地开发(非Docker环境,需配置
.env
):# Windows(使用start-system.bat) ./start-system.bat# Linux/macOS(需修改脚本权限) chmod +x start-system.bat ./start-system.bat
Docker内调试:
进入容器:
docker exec -it backend_container_name bash
使用IDE远程调试(VS Code配置
launch.json
):{"type": "node","request": "attach","name": "Attach to Backend","address": "localhost","port": 9229,"localRoot": "${workspaceFolder}/backend","remoteRoot": "/app" }
▶ 代码修改
热更新:修改代码后重启容器(需配置Dockerfile的
VOLUME
挂载):docker-compose restart backend
依赖安装:在
backend/Dockerfile
中添加npm install
步骤。
2. 数据库服务(MySQL)
▶ 连接与操作
命令行连接:
mysql -h localhost -P ${MYSQL_PORT} -u ${MYSQL_USER} -p${MYSQL_PASSWORD}
数据操作示例:
-- 创建表 CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(255));-- 增删改查 INSERT INTO users VALUES (1, 'test'); DELETE FROM users WHERE id=1; UPDATE users SET name='new' WHERE id=1; SELECT * FROM users;
▶ 数据库迁移
使用工具如
Sequelize
/Knex
编写迁移脚本(推荐在backend
中集成ORM):// 示例:Sequelize迁移文件 module.exports = {up: async (queryInterface, Sequelize) => {await queryInterface.createTable('users', { /* 表结构 */ });},down: async (queryInterface, Sequelize) => {await queryInterface.dropTable('users');} };
3. MQTT服务(EMQX)
▶ 功能验证
连接测试:使用MQTT客户端工具(如MQTTX)连接
emqx:1883
,验证发布/订阅功能。日志查看:
docker-compose logs emqx | grep "连接状态"
四、增改删操作分类说明
1. 前端代码增改删(假设前端代码在backend/app
中)
操作类型 | 步骤 |
---|---|
新增接口 | 1. 编写API路由(如 |
修改逻辑 | 1. 直接编辑代码文件 |
删除功能 | 1. 移除对应代码文件 |
2. 后端代码增改删
操作类型 | 步骤 |
---|---|
新增模块 | 1. 在 |
修改业务逻辑 | 1. 编辑 |
删除冗余代码 | 1. 确认无依赖后删除文件 |
3. 数据库增改删
操作类型 | 步骤 |
---|---|
新增表/字段 | 1. 编写ORM迁移脚本 |
修改数据 | 1. 通过SQL语句或ORM模型操作 |
删除数据 | 1. 先备份重要数据 |
五、流程图示意(PlantUML)
@startuml
' 环境准备阶段
actor User
participant "Docker/Docker Compose" as DC
participant "IDE" as IDE
participant "MySQL Workbench" as MySQLTool' 运行服务流程
User -> DC: 执行 `docker-compose up -d --build`
DC --> IDE: 查看服务日志
DC --> MySQLTool: 连接数据库初始化' 开发调试流程
alt 后端调试User -> IDE: 编辑 backend 代码IDE --> DC: 重启 backend 容器DC --> IDE: 查看健康检查状态(emqx/mysql 是否健康)
else 数据库调试User -> MySQLTool: 执行 SQL 脚本MySQLTool --> DC: 验证数据变更
end' 增改删操作流程
User -> IDE: 前端代码修改
IDE --> DC: 重新构建前端资源(若有)
User -> IDE: 后端代码修改
IDE --> DC: 重启 backend 服务
User -> MySQLTool: 数据库表/数据操作
MySQLTool --> DC: 验证接口响应' 部署更新流程
User -> DC: 执行 `docker-compose down`
User -> DC: 打包新镜像
User -> DC: 执行 `docker-compose up -d`
DC --> User: 验证全链路功能@enduml
六、注意事项
环境变量管理:通过
.env
文件配置敏感信息(如数据库密码),避免硬编码。健康检查机制:
backend
服务依赖emqx
和mysql
的健康状态,修改依赖服务后需等待健康检查通过。数据备份:定期备份
mysql
数据(可通过Docker卷挂载到宿主机):docker run --rm -v mysqldata:/var/lib/mysql -v $(pwd)/backup:/backup ubuntu tar -cvf /backup/mysql_backup.tar /var/lib/mysql
通过以上步骤,可系统化地管理前后端及数据库的开发、调试和数据操作,结合Docker容器化部署实现环境一致性和快速迭代。