# IPM2020-java **Repository Path**: adidasshe/ipm2020-java ## Basic Information - **Project Name**: IPM2020-java - **Description**: IPM2020-java - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-01-14 - **Last Updated**: 2022-11-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 配电变压器智能管控系统 ##1.系统共分为6个模块: common公共模块提供统一的接口返回码及对redis缓存操作接口定义; security权限模块保护API接口资源,使用jwt-token令牌进行权限认证; mbg数据库操作模块,使用mybatis-plus提供数据库操作接口; mqtt模块,创建mqtt客户端接收topic消息存入缓存,再从缓存中读取数据写入mysql; admin模块,提供前端API接口调用。 license模块,软件许可功能 ##2.部署 ###安装docker容器(数据库及服务模块都可以用docker来安装部署) Docker环境安装(centos7.6为例) 安装yum-utils:yum install -y yum-utils device-mapper-persistent-data lvm2 为yum源添加docker仓库位置: `yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo ` 安装docker: `yum install docker-ce ` 启动docker:`systemctl start docker ` 设置开机启动:`systemctl enable docker.service ` docker容器设置自动启动:(启动时加)`--restart=always ` 如果已经启动的项目,则使用update更新:`docker update --restart=always ipm2020 ` mysql安装 下载docker镜像:`docker pull mysql:5.7 ` 使用docker命令启动: `docker run -p 3306:3306 --name mysql \ -v /mydata/mysql/log:/var/log/mysql \ -v /mydata/mysql/data:/var/lib/mysql \ -v /mydata/mysql/conf:/etc/mysql \ -e MYSQL_ROOT_PASSWORD=root \ -d mysql:5.7` 参数说明: -p 3306:3306:将容器的3306端口映射到主机的3306端口 -v /mydata/mysql/conf:/etc/mysql:将配置文件夹挂在到主机 -v /mydata/mysql/log:/var/log/mysql:将日志文件夹挂载到主机 -v /mydata/mysql/data:/var/lib/mysql/:将数据文件夹挂载到主机 -e MYSQL_ROOT_PASSWORD=root:初始化root用户的密码 Redis安装 下载redis3.2的docker镜像:`docker pull redis:3.2 ` 使用docker命令启动: `docker run -p 6379:6379 --name redis \ -v /mydata/redis/data:/data \ -d redis:3.2 redis-server --appendonly yes ` redis redis-server --appendonly yes表示开启持久化缓存模式,可以存到硬 系统服务模块部署 在服务器对应目录(可自选位置)创建mqtt,admin文件夹 分别在对应文件夹内创建run.sh命令文件(mqtt模块): `#!/usr/bin/env bash # 定义应用组名 group_name='mp' # 定义应用名称 app_name='mqtt' # 定义应用版本 app_version='0.0.1-SNAPSHOT' # 定义应用环境 profile_active='prod' echo '----copy jar----' docker stop ${app_name} echo '----stop container----' docker rm ${app_name} echo '----rm container----' docker rmi ${group_name}/${app_name}:${app_version} echo '----rm image----' # 打包编译docker镜像 docker build -t ${group_name}/${app_name}:${app_version} . echo '----build image----' docker run -p 8012:8012 --name ${app_name} \ -e 'spring.profiles.active'=${profile_active} \ -e TZ="Asia/Shanghai" \ -v /etc/localtime:/etc/localtime \ -v /opt/java/${app_name}/logs:/var/logs \ -d ${group_name}/${app_name}:${app_version} echo '----start container----' ` (admin模块): `#!/usr/bin/env bash # 定义应用组名 group_name='mp' # 定义应用名称 app_name='admin' # 定义应用版本 app_version='0.0.1-SNAPSHOT' # 定义应用环境 profile_active='prod' echo '----copy jar----' docker stop ${app_name} echo '----stop container----' docker rm ${app_name} echo '----rm container----' docker rmi ${group_name}/${app_name}:${app_version} echo '----rm image----' # 打包编译docker镜像 docker build -t ${group_name}/${app_name}:${app_version} . echo '----build image----' docker run -p 8082:8082 --name ${app_name} \ -e 'spring.profiles.active'=${profile_active} \ -e TZ="Asia/Shanghai" \ -v /etc/localtime:/etc/localtime \ -v /opt/java/${app_name}/logs:/var/logs \ -d ${group_name}/${app_name}:${app_version} echo '----start container----' ` 分别创建Dockerfile 文件:(mqtt模块) `# 该镜像需要依赖的基础镜像 FROM java:8 # 将当前目录下的jar包复制到docker容器的/目录下 ADD mqtt-0.0.1-SNAPSHOT.jar /mqtt.jar # 声明服务运行在8012端口 EXPOSE 8012 # 指定docker容器启动时运行jar包 ENTRYPOINT ["java", "-jar","/mqtt.jar"] # 指定维护者的名字 MAINTAINER adidasshe ` (admin模块): `# 该镜像需要依赖的基础镜像 FROM java:8 # 将当前目录下的jar包复制到docker容器的/目录下 ADD admin-0.0.1-SNAPSHOT.jar /admin.jar # 声明服务运行在8082端口 EXPOSE 8082 # 指定docker容器启动时运行jar包 ENTRYPOINT ["java", "-jar","/admin.jar"] # 指定维护者的名字 MAINTAINER adidasshe ` 使用maven打包项目 分别将mqtt-0.0.1-SNAPSHOT.jar 、admin-0.0.1-SNAPSHOT.jar 两个jar包上传到对应服务器创建的(mqtt,admin)文件夹内 进入对应的文件夹(执行:`chmod 777 run.sh ` 获取命令行执行权限) 执行命令行:`./run.sh ` 分别启动两个模块。 ##3.软件授权 使用JDK自带的 keytool 工具生成公私钥证书库: 在license模块resources/license(classpath:/license)目录下执行以下三条命令: #生成命令 keytool -genkeypair -keysize 1024 -validity 3650 -alias "privateKey" -keystore "privateKeys.keystore" -storepass "3538cef8e7" -keypass "5T7Zz5Y0dJFcqTxvzkH5LDGJJSGMzQ" -dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN" #导出命令 keytool -exportcert -alias "privateKey" -keystore "privateKeys.keystore" -storepass "3538cef8e7" -file "certfile.cer" #导入命令 keytool -import -alias "publicCert" -file "certfile.cer" -keystore "publicCerts.keystore" -storepass "3538cef8e7" 在当前路径下生成三个文件,分别是:privateKeys.keystore、publicCerts.keystore、certfile.cer。其中文件privateKeys.keystore用于当前的 admin 模块给客户生成license文件,而文件publicCerts.keystore则随应用代码部署到客户服务器, 用户解密license文件并校验其许可信息 生成license 1.启动license模块,在主页http://localhost:8888/,填入相应的信息点击软件授权,参数无误后会在resources/license目录下生成license.lic授权文件, 将该文件及当前目录之前生成的publicCerts.keystore一起拷贝到对应所需要授权验证的admin模块resources/license目录下 2.postman方式生成license参数: { "subject":"ipm2020", "privateAlias":"privateKey", "keyPass":"5T7Zz5Y0dJFcqTxvzkH5LDGJJSGMzQ", "storePass":"3538cef8e7", "licensePath":"E:/ys/ipm2019/java/ipm2020/license.lic", "privateKeysStorePath":"E:/ys/ipm2019/java/ipm2020/privateKeys.keystore", "issuedTime":"2020-06-30 09:48:12", "expiryTime":"2022-12-31 00:00:00", "consumerType":"User","consumerAmount":1, "description":"这是证书描述信息", "licenseCheckModel":{ "macAddress":[ "C0-B6-F9-42-25-CA", "00-50-56-C0-00-01", "00-50-56-C0-00-08" ], "cpuSerial":"", "mainBoardSerial":""} } license使用说明 完成上述步骤后,启动admin模块会同步安装lisense许可,同时对login接口进行license拦截;如果授权与服务器信息不匹配或者过期等情况会在此接口返回 软件授权失败提示