Docker部署(单机模式)
大约 6 分钟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
中间件说明
- 采用Docker部署,无需安装中间件,直接通过
docker compose
一键启动即可。
一、Docker部署
1. 数据库构建
- 将开发完成的数据库脚本导出后命名为
init.sql
。 - 将
init.sql
拷贝至BladeX-Links/script/docker/database
目录下,覆盖默认的初始sql脚本。
2. 前端服务构建
- 修改
BladeX-Links-UI
项目的website.js
配置文件,指定publicKey配置,与后端保持一致。 - 部署时我们一般采用
prod
环境变量,所以需要修改.env.production
配置文件。 - 配置完毕后在项目根目录执行
pnpm run build:prod
命令,打包成功后根目录生成包含完整编译内容的dist
文件夹。 - 将
dist
文件夹下的内容拷贝至BladeX-Links/script/docker/nginx/html
目录下。
3. 边缘网关node-red-pro构建
注意
若没有二开改造,则建议使用bladex提供的node-red-pro镜像,可直接跳过此步骤,镜像地址: 点击访问。
- 将
node-red-pro
工程拷贝至服务器,进入对应目录,执行pnpm install
安装依赖,注意服务器需要先安装nodejs18
的环境。 - 修改
packages/node_modules/node-red/settings.js
数据库连接信息,执行pnpm run build
命令打包工程,生成对应的配置文件。 - 根目录给构建脚本赋予可执行权限
chmod +x docker-build.sh
- 根目录下执行命令
./docker-build.sh
进行构建镜像,构建成功后执行docker images
查看是否构建成功,注意需要先下载nodered/node-red:4.0.2-22
作为基础镜像来构建。⋊> ~/W/p/node-red-pro on dev ./docker-build.sh 22:47:53 Building Docker image bladex/node-red-pro:latest... [+] Building 0.6s (15/15) FINISHED docker:desktop-linux => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 1.79kB 0.0s => [internal] load metadata for docker.io/nodered/node-red:4.0.2-22 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [ 1/10] FROM docker.io/nodered/node-red:4.0.2-22 0.0s => [internal] load build context 0.5s => => transferring context: 1.62MB 0.5s => CACHED [ 2/10] WORKDIR /usr/src/node-red 0.0s => CACHED [ 3/10] COPY ./package.json ./package.json 0.0s => CACHED [ 4/10] COPY ./package-lock.json ./package-lock.json 0.0s => CACHED [ 5/10] COPY ./node_modules ./node_modules 0.0s => CACHED [ 6/10] COPY ./packages ./packages 0.0s => CACHED [ 7/10] COPY ./docker-entrypoint.sh ./entrypoint.sh 0.0s => CACHED [ 8/10] RUN npm config set loglevel=http && npm config set registry https://registry.npmmirror.com && npm config set cache /data/.npm --global 0.0s => CACHED [ 9/10] RUN npm install --unsafe-perm --no-update-notifier --no-audit --no-fund --only=production 0.0s => CACHED [10/10] RUN chown -R node-red:root . && chmod +x entrypoint.sh 0.0s => exporting to image 0.0s => => exporting layers 0.0s => => writing image sha256:104b4ddf3e29bb8d48c8d31b3e2d580136146e4e5c4a7eb3f2615d471bb711c9 0.0s => => naming to docker.io/bladex/node-red-pro:latest 0.0s ⋊> ~/W/p/node-red-pro on dev docker images 22:48:02 REPOSITORY TAG IMAGE ID CREATED SIZE bladex/node-red-pro latest 104b4ddf3e29 About an hour ago 953MB nodered/node-red 4.0.2-22 565a3c5e0aba 2 weeks ago 587MB
4. 后端服务构建
- 执行
BladeX-Links
项目的Sm2KeyGenerator
和SignKeyGenerator
,执行后将结果配置到/script/docker/.env
文件。同时配置好其他对应的环境变量。BLADE_PROFILES_ACTIVE=prod BLADE_OAUTH2_PUBLIC_KEY=国密公钥需自行填写 BLADE_OAUTH2_PRIVATE_KEY=国密私钥需自行填写 BLADE_TOKEN_SIGN_KEY=令牌密钥需自行填写 HOST_IP=宿主机IP需自行填写 MQTT_IP=宿主机IP需自行填写 MQTT_PORT=MQTT端口需自行填写(默认1883) MYSQL_ROOT_PASSWORD=MYSQL的ROOT密码需自行填写
- 配置工程根目录的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>
- 将源码拷贝至服务器,服务器需要提前安装docker、docker-compose、maven、java17、nodejs18等环境,这里不再赘述。
- 若无需采用docker私有仓库,可以直接忽略,但需要额外执行
docker pull bladex/alpine-java:openjdk17_cn_slim
,docker pull nginx:stable-alpine-perl
命令拉取镜像(否则构建命令会从默认的docker私服地址找镜像,又因为没有配置私服会导致找不到镜像而报错)。 - 配置完毕后在项目根目录执行
mvn clean package -DskipTests docker:build
命令,打包成功后执行docker images
命令查看镜像是否成功构建。⋊> ~/W/p/BladeX-Links on dev ◦ mvn clean package -DskipTests docker:build 11:20:39 [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Reactor Build Order: [INFO] [INFO] BladeX-Links [pom] [INFO] blade-core [pom] [INFO] blade-links-core [jar] [INFO] blade-links-base [jar] [INFO] blade-demo [pom] [INFO] device-simulator [jar] [INFO] relay-amqp [jar] [INFO] relay-mqtt [jar] [INFO] blade-broker-core [jar] [INFO] blade-tsdb-api [jar] [INFO] blade-data-core [jar] [INFO] blade-mq-api [jar] [INFO] blade-broker-local [jar] [INFO] blade-broker-cluster [jar] [INFO] blade-tsdb-influxdb [jar] [INFO] blade-tsdb-influxdb2 [jar] [INFO] blade-tsdb-iotdb [jar] [INFO] blade-tsdb-tdengine [jar] [INFO] blade-mq-kafka [jar] [INFO] blade-service [pom] [INFO] blade-broker [jar] [INFO] blade-data [jar] [INFO] blade-server [jar] [INFO] [================================日志过长 此处省略===============================] [INFO] [INFO] --- docker:0.42.0:build (default-cli) @ blade-server --- [INFO] Building tar: /Users/chill/Workspaces/product/BladeX-Links/blade-service/blade-server/target/docker/bladex/blade-server/2.0.0/tmp/docker-build.tar [INFO] DOCKER> [bladex/blade-server:2.0.0] "blade-server": Created docker-build.tar in 919 milliseconds [INFO] DOCKER> [bladex/blade-server:2.0.0] "blade-server": Built image sha256:588a8 [INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary for BladeX-Links 2.0.0: [INFO] [INFO] BladeX-Links ....................................... SUCCESS [ 0.638 s] [INFO] blade-core ......................................... SUCCESS [ 0.115 s] [INFO] blade-links-core ................................... SUCCESS [ 2.163 s] [INFO] blade-links-base ................................... SUCCESS [ 0.294 s] [INFO] blade-demo ......................................... SUCCESS [ 0.099 s] [INFO] device-simulator ................................... SUCCESS [ 3.531 s] [INFO] relay-amqp ......................................... SUCCESS [ 1.830 s] [INFO] relay-mqtt ......................................... SUCCESS [ 1.545 s] [INFO] blade-broker-core .................................. SUCCESS [ 1.179 s] [INFO] blade-tsdb-api ..................................... SUCCESS [ 1.732 s] [INFO] blade-data-core .................................... SUCCESS [ 0.370 s] [INFO] blade-mq-api ....................................... SUCCESS [ 0.214 s] [INFO] blade-broker-local ................................. SUCCESS [ 0.532 s] [INFO] blade-broker-cluster ............................... SUCCESS [ 0.521 s] [INFO] blade-tsdb-influxdb ................................ SUCCESS [ 0.476 s] [INFO] blade-tsdb-influxdb2 ............................... SUCCESS [ 0.516 s] [INFO] blade-tsdb-iotdb ................................... SUCCESS [ 0.556 s] [INFO] blade-tsdb-tdengine ................................ SUCCESS [ 0.547 s] [INFO] blade-mq-kafka ..................................... SUCCESS [ 0.444 s] [INFO] blade-service ...................................... SUCCESS [ 0.008 s] [INFO] blade-broker ....................................... SUCCESS [ 1.866 s] [INFO] blade-data ......................................... SUCCESS [ 1.989 s] [INFO] blade-server ....................................... SUCCESS [ 5.923 s] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 27.299 s [INFO] Finished at: 2025-03-07T11:21:12+08:00 [INFO] ------------------------------------------------------------------------ ⋊> ~/W/p/BladeX-Links on dev ◦ docker images 11:21:12 REPOSITORY TAG IMAGE ID CREATED SIZE bladex/blade-server 2.0.0 588a88bd6301 5 seconds ago 524MB bladex/blade-data 2.0.0 0e5db5f66e6c 11 seconds ago 425MB bladex/blade-broker 2.0.0 80c7823021b2 13 seconds ago 415MB bladex/relay-mqtt 2.0.0 d75882259959 22 seconds ago 407MB bladex/relay-amqp 2.0.0 32c70991c909 23 seconds ago 409MB bladex/device-simulator 2.0.0 d1c5445d04a5 25 seconds ago 407MB
- 若需要推送到docker私服,则命令多加一个
docker:push
,执行mvn clean package -DskipTests docker:build docker:push
命令便可
5. 一键部署
注意
- 新版的docker无需安装docker-compose命令,可直接
docker compose up -d
启动服务。 - 若依旧使用
docker-compose
命令 则需要在docker-compose.yml
顶部增加version: "3"
方可启动。
- 进入项目根目录的
/script/docker/docker-compose.yml
文件,若采用默认配置则无需修改,有变动的部分均已将配置交给.env
文件托管。 - 在
/script/docker
目录下执行docker compose up -d
命令即可启动服务。docker compose down -v
命令为停止删除服务。 - 完整操作流程请见下图
二、部署总结
注意
- 若是服务器部署,需要将服务器的888端口映射到外网,然后通过外网ip:888访问系统。
- 为了让外部连接到mqtt服务器,同时需要将1883、8083端口映射到外网,然后通过外网ip:端口进行连接。
- 工程默认将前端打包放到了
/script/docker/nginx/html
目录,若后续有二开,请在前端工程根目录执行yarn run build
命令,然后将dist目录下的文件拷贝到/script/docker/nginx/html
目录下即可。