工程部署
大约 6 分钟quickstartcode
运行环境要求
- Java: 17
- NodeJs: 18
- Maven: 3.6+
- MySql: 5.7+
- Redis: 5.0+
- InfluxDB: 1.8.x+
中间件说明
- 若采用Jar包部署,则需要提前安装MySQL、Redis、InfluxDB等中间件。具体安装方法请参考官方文档。
- 若采用Docker部署,则无需安装中间件,直接通过docker-compose一键启动即可。
一、Jar包部署
1. 工程打包
- 修改
blade-server
和blade-broker
目录的application-xx.yml
配置文件,配置数据库、Redis、InfluxDB等信息。 - 部署时我们一般采用
prod
环境变量,所以需要修改application-prod.yml
配置文件。 - 配置完毕后在项目根目录执行
mvn clean package -DskipTests
命令,打包成功后会在target
目录下生成blade-server.jar
和blade-broker.jar
两个文件。
2. 部署包上传至服务器
- 将
target
目录下生成blade-server.jar
和blade-broker.jar
两个文件上传至服务器对应目录。 - 找到根目录
/script/start.sh
脚本,并上传至服务器/www/server/script/
目录。
3. 执行脚本启动服务
脚本已做好最基础的配置,采用prod环境变量,直接启动便会注册服务,无需额外操作
- 执行如下命令给脚本赋予权限:
chmod +x /www/server/script/start.sh
- 执行如下命令启动
server
服务:/www/server/script/start.sh blade-server startd
- 执行如下命令启动
broker
服务:/www/server/script/start.sh blade-broker startd
- 若配置连接参数无误,服务启动后,若无异常信息,则服务启动成功。
- 若服务启动失败,请查看对应错误日志再进行分析,一般是broker服务的mqtt地址或者中间件地址、账号密码未配置对导致,耐心查找问题所在。
二、Docker部署
1. 工程打包
- 修改
blade-server
和blade-broker
目录的application-xx.yml
配置文件,配置数据库、Redis、InfluxDB等信息。 - 部署时我们一般采用
prod
环境变量,所以需要修改application-prod.yml
配置文件。
注意
- 这一块具体可以参考
application-test.yml
的配置,采用docker-host
方式配置,这样在docker-compose
启动时会自动连接到对应的容器地址。 - Dockerfile默认的test环境变量,若正式部署,需要修改为prod,并且参考
application-test.yml
配置好application-prod.yml
文件。 - 初次部署,可以直接采用默认的环境变量和配置进行部署熟悉流程,成功后再进行修改为prod环境部署。
application-test.yml
的内容如下,几乎无需改动,(最下方的iot地址信息可以直接在docker-compose.yml配置覆盖,这里无需操作)#数据源配置 spring: data: redis: ##redis 单机环境配置 host: iot-redis port: 6379 password: bladexadmin database: 0 ssl: enabled: false datasource: url: jdbc:mysql://iot-db:3306/bladex_iot?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8 username: bladexadmin password: bladexadmin driver-class-name: com.mysql.cj.jdbc.Driver #时序库 influxdb: url: http://iot-influxdb:8086 username: admin password: links database: links enable-batch: false #oss配置 oss: enabled: true name: minio tenant-mode: true #oss服务地址,用于内网上传 endpoint: http://iot-oss:9000 #oss转换服务地址,用于内网上传后将返回地址改为转换的外网地址 transform-endpoint: https://oss.bladex.cn access-key: bladexadmin secret-key: bladexadmin bucket-name: bladex #iot配置 blade: preview: enabled: true iot: # 外网ip或者域名 mqtt-ip: 192.168.0.1 # 外网可用的端口 mqtt-port: 1883 # broker服务ip或域名 broker-ip: blade-broker # broker服务端口 broker-port: 8888
- 配置工程根目录的pom.xml,修改docker私有仓库的地址和账号密码。
<properties> <!-- docker --> <docker.registry.url>192.168.0.1</docker.registry.url> <docker.username>admin</docker.username> <docker.password>admin123456</docker.password> <docker.namespace>bladex</docker.namespace> <docker.fabric.skip>false</docker.fabric.skip> <docker.fabric.version>0.42.0</docker.fabric.version> </properties>
2. 服务器构建
- 将源码拷贝至服务器,服务器需要提前安装docker、docker-compose、maven、java17等环境,这里不再赘述。
- 若无需采用docker私有仓库,可以直接忽略,但需要额外执行
docker pull bladex/alpine-java:openjdk17_cn_slim
,docker pull nginx:stable-alpine-perl
命令拉取镜像(否则构建命令会从默认的docker私服地址找镜像,又因为没有配置私服会导致找不到镜像而报错)。 - 配置完毕后在项目根目录执行
mvn clean package -DskipTests docker:build
命令,打包成功后执行docker images
命令查看镜像是否成功构建。
4. 若需要推送到docker私服,则命令多加一个
docker:push
,执行mvn clean package -DskipTests docker:build docker:push
命令便可
3. 一键部署
注意
执行docker-compose构建后,需要连接mysql服务,并且导入数据库脚本,具体脚本在bladex-links
工程的/doc/sql
目录下。
- 进入项目根目录的
/script/docker/docker-compose.yml
文件,修改mqtt对外网映射的宿主机地址和端口,若不配置外网服务无法连接并上报数据。
version: "3"
networks:
blade_net:
external: false
services:
blade-broker:
image: bladex/blade-broker:1.0.0
container_name: blade-broker
restart: unless-stopped
networks:
- blade_net
ports:
- 8888:8888
- 1883:1883
- 8083:8083
command:
#指定服务运行的环境变量
- --spring.profiles.active=test
#broker-mqtt服务器对外开放的地址信息
- --blade.iot.mqtt-ip=192.168.0.1
- --blade.iot.mqtt-port=1883
depends_on:
- iot-db
- iot-amqp
blade-server:
image: bladex/blade-server:1.0.0
container_name: blade-server
restart: unless-stopped
networks:
- blade_net
ports:
- 8000:80
command:
#指定服务运行的环境变量
- --spring.profiles.active=test
#broker-mqtt服务器对外开放的地址信息
- --blade.iot.mqtt-ip=192.168.0.1
- --blade.iot.mqtt-port=1883
depends_on:
- iot-db
- iot-oss
iot-db:
image: mysql:8.3.0
container_name: iot-db
restart: unless-stopped
security_opt:
- seccomp:unconfined
environment:
- MYSQL_ROOT_PASSWORD=aJd7G081DytxutBZ
- MYSQL_USER=bladexadmin
- MYSQL_PASSWORD=bladexadmin
- MYSQL_DATABASE=bladex_iot
ports:
- 13306:3306
networks:
- blade_net
volumes:
- ./mysql:/var/lib/mysql
iot-influxdb:
image: influxdb:1.8.10
container_name: iot-influxdb
restart: unless-stopped
security_opt:
- seccomp:unconfined
environment:
- INFLUXDB_DB=links
- INFLUXDB_HTTP_AUTH_ENABLED=true
- INFLUXDB_ADMIN_USER=admin
- INFLUXDB_ADMIN_PASSWORD=links
ports:
- 18086:8086
networks:
- blade_net
volumes:
- ./mysql:/var/lib/mysql
iot-redis:
image: redis:7.2.5
container_name: iot-redis
environment:
- TZ=Asia/Shanghai
ports:
- 16379:6379
command: redis-server --appendonly yes --requirepass bladexadmin
privileged: true
restart: always
networks:
- blade_net
volumes:
- ./redis/data:/data
iot-oss:
image: minio/minio:RELEASE.2021-04-22T15-44-28Z.hotfix.56647434e
container_name: iot-oss
restart: unless-stopped
security_opt:
- seccomp:unconfined
environment:
- MINIO_ACCESS_KEY=bladexadmin
- MINIO_SECRET_KEY=bladexadmin
ports:
- 9000:9000
command: server /data --address '0.0.0.0:9000'
networks:
- blade_net
volumes:
- ./minio/data:/data
iot-nginx:
image: nginx:stable-alpine-perl
container_name: iot-nginx
environment:
- TZ=Asia/Shanghai
ports:
- 88:88
volumes:
- ./nginx/html:/usr/share/nginx/html
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
privileged: true
restart: always
networks:
- blade_net
- 修改地址完毕,执行
docker-compose up -d
命令即可启动服务。docker-compose stop
命令为停止服务,docker-compose rm
命令为删除服务。
3. 由于本次文档演示为mac本地开发机进行docker-compose部署,则可以直接通过
http://localhost:88
访问系统,若是服务器部署则需要通过服务器ip:88访问系统。
![系统界面5](https://blade-iot.oss-cn-hangzhou.aliyuncs.com/iot/tech/start/5.png)
4. 前往设备模拟器模块进行mqtt服务器连接,可以看到连接成功,说明
blade-broker
服务也正常启动。
5. 使用命令
docker logs -f iot-nginx
可以看到部署的nginx容器日志,可以发现反向代理没有问题,可以正常访问系统。
![系统界面8](https://blade-iot.oss-cn-hangzhou.aliyuncs.com/iot/tech/start/8.png)
三、部署总结
注意
- 若是服务器部署,需要将服务器的88端口映射到外网,然后通过外网ip:88访问系统。
- 为了让外部连接到mqtt服务器,同时需要将1883、8083端口映射到外网,然后通过外网ip:端口进行连接。
- 工程默认将前端打包放到了
/script/docker/nginx/html
目录,若后续有二开,请在前端工程根目录执行yarn run build
命令,然后将dist目录下的文件拷贝到/script/docker/nginx/html
目录下即可。