diff --git a/README.md b/README.md index 2a1d3ef1..7120f8c1 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ ### 一、项目简介 -1. 物美智能 [wumei-smart](http://wumei.live/) 是一个简单易用的生活物联网平台。可用于搭建物联网平台以及二次开发和学习。 +###### 1. 物美智能 [wumei-smart](http://wumei.live/) 是一个简单易用的生活物联网平台。可用于搭建物联网平台以及二次开发和学习。 -2. 设备接入使用EMQX消息服务器,认证采用EMQX内置的Http插件对称加密认证。后端采用Spring boot;前端采用Vue;移动端采用Uniapp;数据库采用Mysql、Redis和TDengine;设备端支持硬件SDK生成,例如ESP32、ESP8266、树莓派等;设备模拟器采用Android和WPF框架,不仅能模拟硬件设备,还可以控制和监测电脑、手机。系统架构图如下: -![系统架构图](https://gitee.com/kerwincui/wumei-smart/raw/master/document/sys.png) +###### 2. 设备接入使用EMQX消息服务器,认证采用EMQX内置的Http插件对称加密认证。后端采用Spring boot;前端采用Vue;移动端采用Uniapp;数据库采用Mysql、Redis和TDengine;设备端支持硬件SDK生成,例如ESP32、ESP8266、树莓派等;设备模拟器采用Android和WPF框架,不仅能模拟硬件设备,还可以控制和监测电脑、手机。系统架构图如下: + ### 二、功能 diff --git a/docker/Dockerfile b/docker/Dockerfile index 59b9807e..39caa472 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,25 +1,31 @@ -FROM openjdk:8u322-jre-buster +FROM openjdk:8u322-jre-slim-buster -ENV VERSION 1.1 -ENV AUTHOR kerwincui -ENV INFO wumei smart open source living iot platform +ENV VERSION 1.1 +ENV AUTHOR kerwincui +ENV INFO wumei smart open source living iot platform +ENV SERVERS nginx:1.14.2, redis-server:5.0.14, emqx:4.0, openjdk:8u322-jre-slim-buster -# 安装工具和设置时区 apt install curl -y --no-install-recommends && \ apt-get install vim -y --no-install-recommends && \ -RUN apt-get update && \ - apt-get install wget -y --no-install-recommends && \ - ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime +# mysql环境变量 +ENV DB_HOST localhost +ENV DB_NAME wumei +ENV DB_USER root +ENV DB_PASSWORD admin -#更换国内源 -RUN wget http://qiniu.xiwen.online/Debian10.list && \ +RUN apt-get update && \ + # 安装网络工具和设置时区 + apt-get install wget -y --no-install-recommends && \ + ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ + # 更换国内源 + wget http://qiniu.xiwen.online/Debian10.list && \ mv Debian10.list /etc/apt/sources.list && \ - apt update && apt upgrade -y - -# 安装nginx和redis -RUN apt-get install nginx -y --no-install-recommends && \ - apt-get install redis-server -y --no-install-recommends - -# 安装 emqx -RUN apt update && apt install -y \ + apt update && apt upgrade -y && \ + # 安装压缩工具 + apt install zip -y && \ + # 安装nginx和redis + apt-get install nginx -y --no-install-recommends && \ + apt-get install redis-server -y --no-install-recommends && \ + # 安装 emqx + apt update && apt install -y \ apt-transport-https \ ca-certificates \ curl \ @@ -31,27 +37,25 @@ RUN apt update && apt install -y \ ./bionic \ stable" && \ apt update && \ - apt install emqx=4.0.0 -y --no-install-recommends - -# 修改redis配置 -RUN sed -i "s/# requirepass foobared/requirepass wumei/g" /etc/redis/redis.conf + apt install emqx=4.0.0 -y --no-install-recommends && \ + # 修改redis配置 + sed -i "s/# requirepass foobared/requirepass wumei-smart/g" /etc/redis/redis.conf && \ + sed -i "s/bind 127.0.0.1/# bind 127.0.0.1/g" /etc/redis/redis.conf # 复制emqx和Nginx的配置文件 COPY ./emqx4.0/emqx.conf /etc/emqx/emqx.conf COPY ./emqx4.0/emqx_auth_http.conf /etc/emqx/plugins/emqx_auth_http.conf COPY ./emqx4.0/emqx_web_hook.conf /etc/emqx/plugins/emqx_web_hook.conf +COPY ./emqx4.0/loaded_plugins /var/lib/emqx/loaded_plugins COPY ./nginx.conf /etc/nginx/nginx.conf - -# 挂载卷 -VOLUME /var/wumei-smart +# 拷贝前后端压缩文件到容器,容器内解压后删除 +COPY ./wumei-smart.tar /var/ +RUN cd /var && tar -xvf wumei-smart.tar && rm wumei-smart.tar # 启动脚本 COPY docker-entrypoint.sh / ENTRYPOINT ["/docker-entrypoint.sh"] -# 拷贝前后端压缩文件到容器,容器内解压后删除 -COPY ./wumei-smart.tar /var/ -RUN cd /var && tar -xvf wumei-smart.tar && rm wumei-smart.tar +# 映射端口 +EXPOSE 80 1883 8083 -# 映射端口,可选:8081、8883、18083、8083 -EXPOSE 80 1883 8083 \ No newline at end of file diff --git a/docker/description.txt b/docker/description.txt index a821dfc8..715608d8 100644 --- a/docker/description.txt +++ b/docker/description.txt @@ -19,66 +19,30 @@ docker push kerwinci/wumei-smart:1.0 # 容器运行 docker run \ --name wumei-smart \ +--env DB_HOST=wumei.live:3306 \ +--env DB_NAME=wumei-smart \ +--env DB_USER=root \ +--env DB_PASSWORD=wumei-smart \ --publish 80:80 \ ---publish 18083:18083 \ --publish 1883:1883 \ ---publish 3306:3306 \ ---publish 6379:6379 \ ---restart always \ +--publish 8083:8083 \ +--volume /var/wumei-smart/java/uploadPath:/var/wumei-smart/java/uploadPath \ +--restart unless-stopped \ --detach \ -kerwincui/wumei-smart:1.0 +kerwincui/wumei-smart:1.1 -docker run ^ ---name wumei-smart ^ ---publish 80:80 ^ ---publish 18083:18083 ^ ---publish 1883:1883 ^ ---publish 3306:3306 ^ ---publish 6379:6379 ^ ---restart always ^ ---detach ^ -kerwincui/wumei-smart:1.0 +--publish 18083:18083 \ +--publish 8084:8084 \ +--publish 8883:8883 \ +--publish 8081:8081 \ +--publish 6379:6379 \ +--publish 8080:8080 \ +--volume /var/wumei-smart/java/logs:/var/wumei-smart/java/logs \ +--volume /var/wumei-smart/nginx/nginx.conf:/etc/nginx/nginx.conf \ +--volume /var/wumei-smart/nginx/error.log:/var/log/nginx/error.log \ +--volume /var/wumei-smart/redis/redis.conf:/etc/redis/redis.conf \ +--volume /var/wumei-smart/redis/redis-server.log:/var/log/redis/redis-server.log \ +--volume /var/wumei-smart/emqx/emqx.conf:/etc/emqx/emqx.conf \ +--volume /var/wumei-smart/emqx/log:/var/log/emqx \ - -########################容器内处理########################## - -# 配置redis -# vim /etc/redis/redis.conf ,取消注释requirepass admin123,注释 bind:127.0.0.1 - -# 配置docker-entrypoint.sh -# vim /docker-entrypoint.sh 启动mysql和java app - -# 配置nginx -# vim /etc/nginx/nginx.conf,nginx服务配置 - -http { - include mime.types; - default_type application/octet-stream; - sendfile on; - keepalive_timeout 65; - - server { - listen 80; - server_name localhost; - - location / { - root /var/wumei-smart/vue; - try_files $uri $uri/ /index.html; - index index.html index.htm; - } - - location /prod-api/{ - proxy_set_header Host $http_host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header REMOTE-HOST $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_pass http://localhost:8080/; - } - - error_page 500 502 503 504 /50x.html; - location = /50x.html { - root html; - } - } -} diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh index a5e401da..a3628120 100644 --- a/docker/docker-entrypoint.sh +++ b/docker/docker-entrypoint.sh @@ -2,12 +2,24 @@ # start service startTime=$(date "+%Y-%m-%d %H:%M:%S") -echo $startTime : wumei-smart is starting... +echo $startTime : wumei-smart is starting, please waiting ... + +# 提取jar包配置文件 +cd /var/wumei-smart/java +unzip app.jar BOOT-INF/classes/application-druid.yml +# 修改mysql配置 +sed -i "s/{DB_HOST}/$DB_HOST/g" BOOT-INF/classes/application-druid.yml +sed -i "s/{DB_NAME}/$DB_NAME/g" BOOT-INF/classes/application-druid.yml +sed -i "s/{DB_USER}/$DB_USER/g" BOOT-INF/classes/application-druid.yml +sed -i "s/{DB_PASSWORD}/$DB_PASSWORD/g" BOOT-INF/classes/application-druid.yml +# 配置文件写入jar包,并删除提取的配置 +zip app.jar BOOT-INF/classes/application-druid.yml +rm -rf BOOT-INF service nginx start service redis-server start emqx start -#java -jar /var/wumei-smart/java/app.jar +java -jar /var/wumei-smart/java/app.jar while true diff --git a/docker/emqx4.0/emqx.conf b/docker/emqx4.0/emqx.conf index fe44c8eb..c277a165 100644 --- a/docker/emqx4.0/emqx.conf +++ b/docker/emqx4.0/emqx.conf @@ -127,18 +127,18 @@ cluster.autoclean = 5m ## Path to a file containing the client's private PEM-encoded key. ## ## Value: File -## cluster.etcd.ssl.keyfile = etc/certs/client-key.pem +## cluster.etcd.ssl.keyfile = /etc/emqx/certs/client-key.pem ## The path to a file containing the client's certificate. ## ## Value: File -## cluster.etcd.ssl.certfile = etc/certs/client.pem +## cluster.etcd.ssl.certfile = /etc/emqx/certs/client.pem ## Path to the file containing PEM-encoded CA certificates. The CA certificates ## are used during server authentication and when building the client certificate chain. ## ## Value: File -## cluster.etcd.ssl.cacertfile = etc/certs/ca.pem +## cluster.etcd.ssl.cacertfile = /etc/emqx/certs/ca.pem ##-------------------------------------------------------------------- ## Cluster using Kubernates @@ -194,7 +194,7 @@ node.cookie = emqxsecretcookie ## Data dir for the node ## ## Value: Folder -node.data_dir = data +node.data_dir = /var/lib/emqx ## Heartbeat monitoring of an Erlang runtime system. Comment the line to disable ## heartbeat, or set the value as 'on' @@ -259,14 +259,14 @@ node.fullsweep_after = 1000 ## Crash dump log file. ## ## Value: Log file -node.crash_dump = log/crash.dump +node.crash_dump = /var/log/emqx/crash.dump ## Specify SSL Options in the file if using SSL for Erlang Distribution. ## ## Value: File ## ## vm.args: -ssl_dist_optfile -## node.ssl_dist_optfile = etc/ssl_dist.conf +## node.ssl_dist_optfile = /etc/emqx/ssl_dist.conf ## Sets the net_kernel tick time. TickTime is specified in seconds. ## Notice that all communicating nodes are to have the same TickTime @@ -397,7 +397,7 @@ log.level = warning ## The dir for log files. ## ## Value: Folder -log.dir = log +log.dir = /var/log/emqx ## The log filename for logs of level specified in "log.level". ## @@ -454,7 +454,7 @@ acl_nomatch = allow ## Default ACL File. ## ## Value: File Name -acl_file = etc/acl.conf +acl_file = /etc/emqx/acl.conf ## Whether to enable ACL cache. ## @@ -1167,20 +1167,20 @@ listener.ssl.external.handshake_timeout = 15s ## See: http://erlang.org/doc/man/ssl.html ## ## Value: File -listener.ssl.external.keyfile = etc/certs/key.pem +listener.ssl.external.keyfile = /etc/emqx/certs/key.pem ## Path to a file containing the user certificate. ## ## See: http://erlang.org/doc/man/ssl.html ## ## Value: File -listener.ssl.external.certfile = etc/certs/cert.pem +listener.ssl.external.certfile = /etc/emqx/certs/cert.pem ## Path to the file containing PEM-encoded CA certificates. The CA certificates ## are used during server authentication and when building the client certificate chain. ## ## Value: File -## listener.ssl.external.cacertfile = etc/certs/cacert.pem +## listener.ssl.external.cacertfile = /etc/emqx/certs/cacert.pem ## The Ephemeral Diffie-Helman key exchange is a very effective way of ## ensuring Forward Secrecy by exchanging a set of keys that never hit @@ -1197,7 +1197,7 @@ listener.ssl.external.certfile = etc/certs/cert.pem ## openssl dhparam -out dh-params.pem 2048 ## ## Value: File -## listener.ssl.external.dhfile = etc/certs/dh-params.pem +## listener.ssl.external.dhfile = /etc/emqx/certs/dh-params.pem ## A server only does x509-path validation in mode verify_peer, ## as it then sends a certificate request to the client (this @@ -1640,26 +1640,26 @@ listener.wss.external.verify_protocol_header = on ## See: listener.ssl.$name.keyfile ## ## Value: File -listener.wss.external.keyfile = etc/certs/key.pem +listener.wss.external.keyfile = /etc/emqx/certs/key.pem ## Path to a file containing the user certificate. ## ## See: listener.ssl.$name.certfile ## ## Value: File -listener.wss.external.certfile = etc/certs/cert.pem +listener.wss.external.certfile = /etc/emqx/certs/cert.pem ## Path to the file containing PEM-encoded CA certificates. ## ## See: listener.ssl.$name.cacert ## ## Value: File -## listener.wss.external.cacertfile = etc/certs/cacert.pem +## listener.wss.external.cacertfile = /etc/emqx/certs/cacert.pem ## See: listener.ssl.$name.dhfile ## ## Value: File -## listener.ssl.external.dhfile = etc/certs/dh-params.pem +## listener.ssl.external.dhfile = /etc/emqx/certs/dh-params.pem ## See: listener.ssl.$name.vefify ## @@ -1871,15 +1871,15 @@ module.rewrite = off ## The etc dir for plugins' config. ## ## Value: Folder -plugins.etc_dir = etc/plugins/ +plugins.etc_dir = /etc/emqx/plugins/ ## The file to store loaded plugin names. ## ## Value: File -plugins.loaded_file = data/loaded_plugins +plugins.loaded_file = /var/lib/emqx/loaded_plugins ## File to store loaded plugin names. -plugins.expand_plugins_dir = plugins/ +plugins.expand_plugins_dir = /var/lib/emqx/plugins/ ##-------------------------------------------------------------------- ## Broker diff --git a/docker/emqx4.0/emqx_auth_http.conf b/docker/emqx4.0/emqx_auth_http.conf index 0366654d..ca54b13b 100644 --- a/docker/emqx4.0/emqx_auth_http.conf +++ b/docker/emqx4.0/emqx_auth_http.conf @@ -10,17 +10,17 @@ ## are used during server authentication and when building the client certificate chain. ## ## Value: File -## auth.http.ssl.cacertfile = etc/certs/ca.pem +## auth.http.ssl.cacertfile = /etc/emqx/certs/ca.pem ## The path to a file containing the client's certificate. ## ## Value: File -## auth.http.ssl.certfile = etc/certs/client-cert.pem +## auth.http.ssl.certfile = /etc/emqx/certs/client-cert.pem ## Path to a file containing the client's private PEM-encoded key. ## ## Value: File -## auth.http.ssl.keyfile = etc/certs/client-key.pem +## auth.http.ssl.keyfile = /etc/emqx/certs/client-key.pem ##-------------------------------------------------------------------- ## HTTP Request Headers diff --git a/docker/emqx4.0/loaded_plugins b/docker/emqx4.0/loaded_plugins new file mode 100644 index 00000000..91b5ed86 --- /dev/null +++ b/docker/emqx4.0/loaded_plugins @@ -0,0 +1,8 @@ +{emqx_management,true}. +{emqx_recon,true}. +{emqx_retainer,true}. +{emqx_dashboard,true}. +{emqx_rule_engine,true}. +{emqx_bridge_mqtt,false}. +{emqx_auth_http,true}. +{emqx_web_hook,true}. diff --git a/docker/nginx.conf b/docker/nginx.conf index 9e44a220..202372e3 100644 --- a/docker/nginx.conf +++ b/docker/nginx.conf @@ -26,7 +26,7 @@ http { charset utf-8; location / { - root /var/data/wumei/vue; + root /var/wumei-smart/vue; try_files $uri $uri/ /index.html; index index.html index.htm; } @@ -37,7 +37,15 @@ http { proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://localhost:8080/; - } + } + + location /api/v4/ { + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header REMOTE-HOST $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_pass http://localhost:8081/api/v4/; + } error_page 500 502 503 504 /50x.html; location = /50x.html { diff --git a/docker/wumei-smart/java/放置后端java程序.txt b/docker/wumei-smart/java/java.txt similarity index 100% rename from docker/wumei-smart/java/放置后端java程序.txt rename to docker/wumei-smart/java/java.txt diff --git a/docker/wumei-smart/vue/放置前端vue程序.txt b/docker/wumei-smart/vue/vue.txt similarity index 100% rename from docker/wumei-smart/vue/放置前端vue程序.txt rename to docker/wumei-smart/vue/vue.txt diff --git a/document/integrated.png b/document/integrated.png new file mode 100644 index 00000000..241a337c Binary files /dev/null and b/document/integrated.png differ diff --git a/document/message.png b/document/message.png index cee726b1..da53b281 100644 Binary files a/document/message.png and b/document/message.png differ diff --git a/document/process.png b/document/process.png index d9f3a359..9327bfa5 100644 Binary files a/document/process.png and b/document/process.png differ diff --git a/springboot/sql/wumei.sql b/springboot/sql/wumei-smart.sql similarity index 100% rename from springboot/sql/wumei.sql rename to springboot/sql/wumei-smart.sql diff --git a/springboot/wumei-admin/src/main/resources/application-druid.yml b/springboot/wumei-admin/src/main/resources/application-druid.yml index 424bb77b..9a303472 100644 --- a/springboot/wumei-admin/src/main/resources/application-druid.yml +++ b/springboot/wumei-admin/src/main/resources/application-druid.yml @@ -43,8 +43,8 @@ spring: allow: url-pattern: /druid/* # 控制台管理用户名和密码 - login-username: admin - login-password: admin123 + login-username: wumei-smart + login-password: wumei-smart filter: stat: enabled: true diff --git a/springboot/wumei-admin/src/main/resources/application.yml b/springboot/wumei-admin/src/main/resources/application.yml index edf3d4ad..609849d1 100644 --- a/springboot/wumei-admin/src/main/resources/application.yml +++ b/springboot/wumei-admin/src/main/resources/application.yml @@ -8,8 +8,8 @@ ruoyi: copyrightYear: 2021 # 实例演示开关 demoEnabled: true - # 文件路径 示例( Windows配置D:/wumei/uploadPath,Linux配置 /home/ruoyi/uploadPath) - profile: D:\project\github\wumei-smart\springboot\uploadpath + # 文件路径 示例( Windows配置D:/wumei-smart/uploadPath,Linux配置 /var/wumei-smart/java/uploadPath) + profile: /var/wumei-smart/java/uploadPath # 获取ip地址开关 addressEnabled: true # 验证码类型 math 数组计算 char 字符验证 @@ -87,16 +87,6 @@ spring: default-topic: test # 默认主题 timeout: 60000 # 超时时间 keepalive: 30 # 保持连接 - clearSession: false - isShared: false - isSharedGroup: false - task: - execution: - pool: - core-size: 10 #最小连接数 - max-size: 20 #最大连接数 - queue-capacity: 25 #设置队列容量为2000个 - # token配置 token: diff --git a/vue/src/views/iot/device/index.vue b/vue/src/views/iot/device/index.vue index c10a0710..b246f9ff 100644 --- a/vue/src/views/iot/device/index.vue +++ b/vue/src/views/iot/device/index.vue @@ -571,7 +571,7 @@ export default { name: this.monitorThings[i].name, type: 'line', showSymbol: false, - data: this.dataList[i].data + data: [] }] }; option && this.chart[i].setOption(option);