Baota部署
大约 14 分钟deploycode
运行环境要求
- Java: 17
- NodeJs: 18
- Maven: 3.8+
- MySql: 5.7+
- Redis: 5.0+
- TDengine 3.x
- InfluxDB: 1.8.x+
- IoTDB 1.3.x
中间件说明
- 采用Baota部署,Mysql与Redis可一键部署安装,TDengine需要单独手动安装。
注意点
- 喂饭级教程,全程干货,请千万不要跳着看哦
- 由于本文档包含较多动图,容量非常大,不同网络下载可能会较慢
- 大家请耐心等待动图下载完毕,等动图缓存后本文档观感更佳
一、Baota安装
1. 基础平台安装
服务器操作系统注意点
- 物联网平台的边缘网关(node-red)为nodejs项目,运行需要nodejs18版本,centos7版本较低无法安装
- 边缘网关若使用实体设备则不受影响,若使用node-red作为软件网关部署,则更推荐采用debian操作系统
- 准备好一个纯净的未使用过的linux服务器(切记不可安装在已经投入生产的服务器), 前往宝塔官网找到系统对应的脚本安装:点击查看
- 找到系统对应版本的脚本拷贝到服务器执行命令后一路按y便可(录制了完整流程,图片较大,请耐心等待加载完)
- 安装完毕后,大家可以看到如下打印日志
Congratulations! Installed successfully!
=============注意:首次打开面板浏览器将提示不安全=================
请选择以下其中一种方式解决不安全提醒
1、下载证书,地址:https://dg2.bt.cn/ssl/baota_root.pfx 双击安装,密码【www.bt.cn】
2、点击【高级】-【继续访问】或【接受风险并继续】访问
教程:https://www.bt.cn/bbs/thread-117246-1-1.html
mac用户请下载使用此证书:https://dg2.bt.cn/ssl/baota_root.crt
========================面板账户登录信息==========================
【云服务器】请在安全组放行 31120 端口
外网面板地址: https://47.239.205.65:31120/2c833229
内网面板地址: https://172.31.24.174:31120/2c833229
username: b41znykn
password: ffbbd6bf
- 按照指示下载ssl证书并安装。(可选可不选)
- 前往服务器安全策略,开通分配好的端口后访问【外网面板地址】,输入账号密码登录。(注意这里的端口、username、password等参数请务必保存好,不可泄露,本文档演示的测试服务器已释放所以直接暴露在外不会有影响。)
- 登录成功后同意用户协议,并且绑定宝塔账号(此账号需要在官网进行注册:https://www.bt.cn/register.html)
2. 基础环境安装
- 若检测到没有安装基础环境,系统会自动弹出如下的图,我们选择第三个
JAVA
环境(注意请将mysql选择为mysql8
,jdk选择为jdk17
,不要选错成jdk1.7
)
- 选择一键安装,等待系统加载进入安装界面后耐心等待结束即可,等待流程结束,java17、mysql8、nginx这几个核心的服务就自动安装好了。
3. Redis安装
- 前往软件商店安装Redis,注意密码一定要设置,端口也可以根据不同的情况修改一下(若无需远程连接redis的场景,端口最好不要对外开放)
- 单独设置redis的密码
4. TDengine安装
- 前往TDengine官网资源下载页:https://www.taosdata.com/tdengine-resources 下载安装包,并将安装包传递至服务器
- 根据不同类型的操作系统,执行不同的命令进行安装,安装成功后会自动打印地址与端口
- 运行官方提供的脚本一次性启动所有服务
- 云服务器和宝塔分别开放6060端口(建议设置ip白名单访问,降低被攻击的风险)
- 访问服务器外网ip+6060端口,绑定手机后用账号密码登录,默认账号:root,默认密码:taosdata (登录成功后建议修改密码)
二、数据库数据准备
1. 创建数据库并导入数据
- 前往
数据库
菜单,创建bladex_iot
数据库,密码可直接采用自动生成的。
- 上传工程/doc/sql目录下的两个数据库脚本,并导入新创建的
bladex_iot
数据库。
2. 开放端口权限
- 宝塔开放端口
- 云服务器开放端口
- 数据库开放访问权限(建议设置ip白名单访问,降低被攻击的风险)
3. 远程连接测试
- 用分配好的账号密码远程连接并查看数据
三、后端服务打包编译
1. 配置国密key与签名key
- blade-server服务配置如下(注意blade-broker与blade-server两个服务的sign-key需要配置成一致)
- blade-broker服务配置如下(注意blade-broker与blade-server两个服务的sign-key需要配置成一致)
2. 配置中间件连接信息
- redis、mysql、tdengine的连接信息均采用刚刚在宝塔部署地址与账号密码
- blade-broker服务的application-prod.yml配置文件修改后如下
#数据源配置
spring:
data:
redis:
##redis 单机环境配置
host: 127.0.0.1
port: 6379
password: bladexadmin
database: 0
ssl:
enabled: false
##redis 集群环境配置
#cluster:
# nodes: 127.0.0.1:7001,127.0.0.1:7002,127.0.0.1:7003
# commandTimeout: 5000
datasource:
url: jdbc:mysql://127.0.0.1:3306/bladex_iot?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8
username: bladex_iot
password: AXGFKJBnTkccYFkW
driver-class-name: com.mysql.cj.jdbc.Driver
#时序数据库配置
tdengine:
enabled: true # 是否开启,多个时序库插件依赖同时导入可采用此参数配置,开启的时序库
username: root
password: taosdata
database: links # 库名,会自动建库
jdbc-url: jdbc:TAOS-RS://127.0.0.1:6041?useSSL=false
# 数据精度,默认:毫秒
precision: ms
# 数据保存的天数,默认:10年
keep: 3650
# 批量写入相关配置
enable-batch: true # 开启批量写,默认:开
batch-size: 1000 # 批次大小,默认:1000
flush-duration: 1s # 批次写入时间,默认:1s 写入一次
# 连接池相关配置,都采用的 Druid 默认配置,可按需求进行配置,建议改大一些
initial-size: 0 # 初始化的连接数,默认:0
max-active: 8 # 最大活跃连接数,默认:8
min-idle: 0 # 最小活跃连接数,默认:0
max-wait: -1 # 最大等待时间,默认:-1 不限制
#mqtt配置
mqtt:
server:
enabled: true # 是否开启服务端,默认:true
port: 1883 # 端口,默认:1883
name: BladeX-Mqtt-Server # 名称,默认:Mica-Mqtt-Server
heartbeat-timeout: 120000 # 心跳超时,单位毫秒,默认: 1000 * 120
read-buffer-size: 8KB # 接收数据的 buffer size,默认:8k
max-bytes-in-message: 10MB # 消息解析最大 bytes 长度,默认:10M
auth:
enable: false # 是否开启 mqtt 认证
debug: true # 如果开启 prometheus 指标收集建议关闭
stat-enable: true # 开启指标收集,debug 和 prometheus 开启时需要打开,默认开启,关闭节省内存
web-port: 8083 # http、websocket 端口,默认:8083
websocket-enable: true # 是否开启 websocket,默认: true
http-enable: false # 是否开启 http api,默认: false
ssl: # mqtt tcp ssl 认证
enabled: false # 是否开启 ssl 认证,2.1.0 开始支持双向认证
keystore-path: # 必须参数:ssl keystore 目录,支持 classpath:/ 路径。
keystore-pass: # 必选参数:ssl keystore 密码
truststore-path: # 可选参数:ssl 双向认证 truststore 目录,支持 classpath:/ 路径。
truststore-pass: # 可选参数:ssl 双向认证 truststore 密码
client-auth: none # 是否需要客户端认证(双向认证),默认:NONE(不需要)
#blade配置
blade:
iot:
# 外网ip或者域名
mqtt-ip: 47.239.205.65
# 外网可用的端口
mqtt-port: 1883
- blade-server服务的application-prod.yml配置文件修改后如下 (注意oss需要单独配置,文档演示为阿里云oss)
#数据源配置
spring:
data:
redis:
##redis 单机环境配置
host: 127.0.0.1
port: 6379
password: bladexadmin
database: 0
ssl:
enabled: false
##redis 集群环境配置
#cluster:
# nodes: 127.0.0.1:7001,127.0.0.1:7002,127.0.0.1:7003
# commandTimeout: 5000
datasource:
url: jdbc:mysql://127.0.0.1:3306/bladex_iot?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8
username: bladex_iot
password: AXGFKJBnTkccYFkW
driver-class-name: com.mysql.cj.jdbc.Driver
#时序数据库配置
tdengine:
enabled: true # 是否开启,多个时序库插件依赖同时导入可采用此参数配置,开启的时序库
username: root
password: taosdata
database: links # 库名,会自动建库
jdbc-url: jdbc:TAOS-RS://127.0.0.1:6041?useSSL=false
# 数据精度,默认:毫秒
precision: ms
# 数据保存的天数,默认:10年
keep: 3650
# 批量写入相关配置
enable-batch: true # 开启批量写,默认:开
batch-size: 1000 # 批次大小,默认:1000
flush-duration: 1s # 批次写入时间,默认:1s 写入一次
# 连接池相关配置,都采用的 Druid 默认配置,可按需求进行配置,建议改大一些
initial-size: 0 # 初始化的连接数,默认:0
max-active: 8 # 最大活跃连接数,默认:8
min-idle: 0 # 最小活跃连接数,默认:0
max-wait: -1 # 最大等待时间,默认:-1 不限制
#阿里云oss
oss:
enabled: true
name: alioss
tenant-mode: false
endpoint: https://oss-cn-hangzhou.aliyuncs.com
bucket-name: blade-iot
access-key: LTAI5*******YYe99qe
secret-key: OmwUq**************VNG0Bi
#iot配置
blade:
iot:
# 外网ip或者域名
mqtt-ip: 47.239.205.65
# 外网可用的端口
mqtt-port: 1883
# broker服务ip或域名
broker-ip: blade-broker
# broker服务端口
broker-port: 8888
3. 项目打包编译并上传
- 根目录下执行
mvn clean package -DskipTests
命令进行打包构建
- 将
blade-broker.jar
与blade-server.jar
依次上传至对应目录(注意每个jar包都需要单独建文件夹,否则运行生成的target文件夹会冲突)
4. 启动jar包服务
- 前往添加Java项目,创建
blade-broker
与blade-server
两个服务
- 由于jdk17的缘故,在启动jar包时需要增加启动命令参数:
--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED
- 关于jdk17参数的详细说明请看:文档说明
- 由于模拟生产部署,则需要额外增加命令指定为prod环境变量:
--spring.profiles.active=prod
- 为了防止
blade-server
服务的80端口冲突,通过命令修改端口号:--server.port=8800
- 完整的命令参考如下(注意只有blade-server需要另外指定端口号,blade-broker无需重新指定):
/www/server/java/jdk-17.0.8/bin/java \ --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED \ -jar \ -Xmx1024M \ -Xms256M \ /www/wwwroot/bladex/links/blade-server/blade-server.jar \ --server.port=8800 --spring.profiles.active=prod
- 查看两个服务的运行日志,可以看到均运行成功无报错
- 打开首页查看内存占用,可以看到包含全套中间件以及两个java服务,占用内存不超过2g,所以8g内存服务器用于小型场景生产使用完全无压力
四、边缘网关打包编译
注意点
- 若采用边缘网关的实体设备,则本章节可直接跳过无需部署
- 软件边缘网关(node-red)为nodejs项目,运行需要nodejs18版本,centos7版本较低无法安装
1. 下载压缩包并上传
- 前往bladex的中央仓库下载边缘网关压缩包
- 上传至服务器对应目录
- 解压后修改数据库连接信息(node-red-pro/packages/node_modules/node-red/settings.js)
2. 配置Nodejs环境
- 安装Nodejs环境(node-red需要nodejs18,centos7最高仅可安装nodejs16)
- 进入终端后找到上传目录,在根目录下先执行命令
npm install
编译工程,后执行npm run build
命令打包工程,生成对应的配置文件。
3. 创建Nodejs项目
- 创建Nodejs项目(注意新版node-red-pro需要使用nodejs18才可以启动运行)
- 配置反向代理,防止websocket模块无法正常使用
- 配置域名HTTPS访问
4. 原生启动服务(原生部署方式,与Nodejs项目方法二选一)
- 修改node-red-pro根目录的
node-red.service
中的运行用户和目录 - 执行命令拷贝服务
cp node-red.service /etc/systemd/system/
- 执行命令设置开机自启动
systemctl enable node-red.service
- 执行命令直接正式启动服务
systemctl start node-red.service
- 注意⚠️:部署node-red工程并采用nginx反向代理,需要开启websocket配置,nginx参考配置如下:
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
location / {
proxy_pass http://localhost:1880;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 着重关注这三行配置,必须要有
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
五、前端服务打包编译
1. 打包编译
- 修改website.js内的publicKey,使其的值与后端配置的值一致
- 执行命令进行打包,并上传至服务器后解压缩
2. 创建Nginx项目
- 打开Html项目,配置地址和域名(域名请提前做好映射)
- 访问设置好的域名项目,查看已经可以正常展示
3. 配置域名HTTPS
- 打开配置好的项目,选择ssl证书申请
- 可以看到,https已经生效
4. 上传前端部署包并设置反向代理
- 将部署包上传至刚刚创建的nginx项目
links.bladex.vip
- 配置nginx反向代理与伪静态,核心配置如下(proxy_pass指定的8800端口就是之前部署blade-server时手动指定的端口)
# 静态文件服务
location / {
index index.html;
error_page 404 /index.html; # 错误页面跳转
}
# API 反向代理配置
location /api/ {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8800/;
client_max_body_size 1000m;
}
- 为了加速前端页面的访问,需要配置gzip模式,核心配置如下
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6]\.";
- 具体配置如下
六、访问验证系统部署
1. 访问验证
- 访问
https://links.bladex.vip
,可以看到系统已经能正常登录(注意生产系统一定要把默认的admin密码修改)
- 前往产品管理,将每个物模型重新发布一遍(TDengine需要创建超级表,为了提高性能,超级表只在发布物模型的时候进行操作,其他的时序库暂时无需这个操作)
2. broker反向代理并开启https
- 配置好域名解析
- 配置反向代理并开启https(mqtt的1883端口反向代理也是同样的操作方式,不再赘述)
3. 设备模拟上报
- 测试设备数据上报
- 查看TDengine的数据采集
- 至此宝塔部署完美结束,全套中间件加系统服务,部署后内存占用2.3G,大家以后版本更新只需替换jar包以及前端部署包就可以很轻松地运维了