mqtt消息记录优化,控制台页面样式优化

This commit is contained in:
2025-05-23 13:52:01 +08:00
parent 021f9f0e0d
commit c849d989fe
5 changed files with 576 additions and 6 deletions

124
docker-compose.yml Normal file
View File

@@ -0,0 +1,124 @@
version: '3.8'
services:
# MySQL Database Service
mysql-db:
image: mysql:8.0
container_name: mqtt_mysql_db
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-supersecretpassword} # 请通过环境变量或OneDev Secrets在生产中设置此密码
MYSQL_DATABASE: ${MYSQL_DATABASE:-mqtt_power}
MYSQL_USER: ${MYSQL_USER:-appuser}
MYSQL_PASSWORD: ${MYSQL_PASSWORD:-apppassword} # 请通过环境变量或OneDev Secrets在生产中设置此密码
ports:
# 仅在需要从外部直接访问数据库时暴露端口 (例如用于调试或外部工具)
# 对于应用容器它们将通过Docker内部网络连接
- "33061:3306" # 示例将容器的3306映射到主机的33061
volumes:
- mysql_data:/var/lib/mysql
# 如果有初始化脚本,可以挂载:
# - ./sql/init.sql:/docker-entrypoint-initdb.d/init.sql
networks:
- app-network
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost", "-u$$MYSQL_USER", "-p$$MYSQL_PASSWORD"]
interval: 10s
timeout: 5s
retries: 5
# EMQX MQTT Broker Service
emqx:
image: emqx/emqx:5.6.0 # 使用较新的 EMQX 5 版本
container_name: mqtt_emqx_broker
restart: unless-stopped
ports:
- "1883:1883" # MQTT default port
- "8083:8083" # MQTT over WebSocket
- "8084:8084" # MQTT over SSL/TLS WebSocket
- "8883:8883" # MQTT over SSL/TLS
- "18083:18083" # EMQX Dashboard / HTTP API
volumes:
- emqx_data:/opt/emqx/data
- emqx_log:/opt/emqx/log
# 如果有自定义配置,可以挂载 emqx.conf 或 mounted_plugins 等
# - ./emqx_conf/emqx.conf:/opt/emqx/etc/emqx.conf
networks:
- app-network
healthcheck:
test: ["CMD", "/opt/emqx/bin/emqx_ctl", "status"]
interval: 30s
timeout: 10s
retries: 3
environment:
EMQX_NODE_NAME: "emqx@node1.emqx.io" # 可以自定义节点名
EMQX_LISTENER__TCP__EXTERNAL: "1883"
EMQX_LISTENER__WS__EXTERNAL: "8083"
EMQX_DASHBOARD__LISTENER__HTTP: "18083"
# 更多 EMQX 配置可以通过环境变量设置,参考 EMQX 文档
# Backend Spring Boot Application Service
backend-app:
image: your-docker-registry/mqtt-springboot-app:latest # 将在 CI/CD 中构建和推送
container_name: mqtt_springboot_app_prod
restart: unless-stopped
depends_on:
mysql-db: # 确保数据库先启动并健康
condition: service_healthy
emqx: # 确保 MQTT Broker 先启动并健康
condition: service_healthy
ports:
- "7529:7529"
environment:
# Spring Boot Profile
SPRING_PROFILES_ACTIVE: prod # 或者其他生产环境profile
# Database connection (连接到此 compose 文件中的 mysql-db 服务)
DB_HOST: mysql-db
DB_PORT: 3306
DB_NAME: ${MYSQL_DATABASE:-mqtt_power}
DB_USER: ${MYSQL_USER:-appuser}
DB_PASSWORD: ${MYSQL_PASSWORD:-apppassword} # 确保与 mysql-db 中 MYSQL_PASSWORD 一致
# MQTT Broker connection (连接到此 compose 文件中的 emqx 服务)
MQTT_BROKER_URL: tcp://emqx:1883
# MQTT_USERNAME: # 如果 EMQX 设置了认证
# MQTT_PASSWORD: # 如果 EMQX 设置了认证
# 其他后端应用所需的环境变量
# ...
networks:
- app-network
# 如果需要,可以添加 healthcheck
# healthcheck:
# test: ["CMD", "curl", "-f", "http://localhost:7529/api/actuator/health"] # 假设有 actuator health 端点
# interval: 30s
# timeout: 10s
# retries: 3
# Frontend Next.js Application Service
frontend-app:
image: your-docker-registry/mqtt-nextjs-app:latest # 将在 CI/CD 中构建和推送
container_name: mqtt_nextjs_app_prod
restart: unless-stopped
ports:
- "3000:3000"
environment:
# API 地址,指向后端服务的容器名和端口 (如果前端直接调用API)
# 如果 Next.js 使用了 next.config.js/mjs 中的 rewrites 代理 /api 到后端,则这里可能不需要
# NEXT_PUBLIC_API_URL: http://backend-app:7529/api
# 如果前端需要连接 MQTT Broker (例如通过 WebSocket)
NEXT_PUBLIC_MQTT_WS_URL: ws://emqx:8083/mqtt # 指向 EMQX 的 WebSocket 端口
# 其他前端应用所需的环境变量
# ...
networks:
- app-network
depends_on: # 可选,如果前端启动时需要后端已启动
- backend-app
# - emqx # 如果前端直接依赖 MQTT Broker
volumes:
mysql_data: # 持久化 MySQL 数据
emqx_data: # 持久化 EMQX 数据
emqx_log: # 持久化 EMQX 日志
networks:
app-network:
driver: bridge