JetLinks安装 运行
它要依赖如下软件,先要安装这4个镜像
编排一下:D:\WHU\Docker-Compose\docker-compose.yml
version: '3'
services:# 1. Redis 服务redis:image: redis:5.0.4container_name: my-redisports:- "6379:6379"volumes:- redis-data:/datacommand: redis-server --appendonly yesrestart: unless-stopped# 2. PostgreSQL 服务postgres:image: postgres:11-alpinecontainer_name: my-postgresports:- "5432:5432"volumes:- postgres-data:/var/lib/postgresql/dataenvironment:- POSTGRES_PASSWORD=1restart: unless-stopped# 3. Elasticsearch 服务elasticsearch:image: elasticsearch:6.8.11container_name: my-esports:- "9200:9200"- "9300:9300"volumes:- es-data:/usr/share/elasticsearch/dataenvironment:- discovery.type=single-node- ES_JAVA_OPTS=-Xms512m -Xmx512mulimits:memlock:soft: -1hard: -1restart: unless-stopped# 4. Kibana 服务(依赖 Elasticsearch)kibana:image: kibana:6.8.11container_name: my-kibanaports:- "5601:5601"environment:- ELASTICSEARCH_HOSTS=http://elasticsearch:9200 # 直接用服务名"elasticsearch"做地址(Docker 内部网络自动解析)depends_on:- elasticsearchrestart: unless-stoppedvolumes:redis-data:postgres-data:es-data:
启动docker后接着启动四个容器:
Microsoft Windows [版本 10.0.26100.6584]
(c) Microsoft Corporation。保留所有权利。D:\WHU\Docker-Compose>docker-compose up -d
time="2025-10-06T17:02:23+08:00" level=warning msg="D:\\WHU\\Docker-Compose\\docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion"
[+] Running 4/4✔ Container my-es Started 0.8s✔ Container my-postgres Started 0.8s✔ Container my-redis Started 0.7s✔ Container my-kibana Started 0.9sD:\WHU\Docker-Compose>
基于四个服务运行 JetLink:
java 要求11的版本:
一、核心概念解释
基于 “Java 源码”“前端 Vue 源码”“docker-compose 基础服务”,本质是 JetLinks 前后端分离架构的组成部分,以及其运行依赖的 “基础设施”:
概念 | 作用 | 版本分支 “2.2” 的意义 |
JetLinks Java 源码 | 后端服务(用 Java 开发),负责核心逻辑:设备接入、数据存储、API 接口、权限控制等 | 前后端需用 相同版本分支(2.2),否则会出现兼容性问题(如接口不匹配) |
JetLinks UI Vue 源码 | 前端界面(用 Vue 开发),负责可视化操作:设备管理、监控仪表盘、指令下发等 | 必须与后端 2.2 分支配套,确保界面与后端接口能正常通信 |
docker-compose 基础服务 | JetLinks 运行依赖的 “底层支撑服务”(即你已启动的 Redis/PostgreSQL/Elasticsearch) | 官方推荐用 docker-compose 一键启动这些依赖,避免手动配置出错;也可逐步手动启动 |
简单说:JetLinks 是 “上层应用”,你启动的 4 个服务是 “底层支撑” —— 没有 Redis 缓存、PostgreSQL 存储、Elasticsearch 搜索,JetLinks 无法运行;而前端 Vue 是 JetLinks 的 “操作界面”,必须连接后端 Java 服务才能用。
二、基于你已启动的服务,运行 JetLinks(实操步骤)
你已手动启动了 JetLinks 依赖的所有基础服务(Redis/PostgreSQL/Elasticsearch),无需再用官方的 docker/dev-env/docker-compose.yml(该文件只是帮你自动启动这些基础服务,你已手动完成)。接下来重点是 拉取 JetLinks 2.2 分支源码 → 配置后端连接你的基础服务 → 启动前后端。
前置环境准备(Windows 需安装)
- Git:用于拉取源码(下载地址:https://git-scm.com/download/win)
- JDK 11:JetLinks 2.2 依赖 JDK 11(不能用更高版本,下载地址:https://www.oracle.com/java/technologies/downloads/#java11)
- Maven 3.6+:用于编译后端 Java 源码(下载地址:https://maven.apache.org/download.cgi)
- Node.js 14+:用于编译前端 Vue 源码(下载地址:https://nodejs.org/zh-cn/download/releases/,选 14.x 版本)
步骤 1:拉取 JetLinks 前后端源码(2.2 分支)
打开 Git Bash 或 Windows 终端,执行以下命令拉取源码(也可直接在 Gitee 下载 ZIP 包):
# 1. 拉取后端 Java 源码(切换到 2.2 分支)
git clone https://gitee.com/jetlinks/jetlinks-community.git
cd jetlinks-community
git checkout 2.2 # 切换到 2.2 版本分支
# 2. 拉取前端 Vue 源码(同样切换到 2.2 分支)
cd .. # 回到上一级目录
git clone https://gitee.com/jetlinks/jetlinks-ui-vue.git
cd jetlinks-ui-vue
git checkout 2.2
步骤 2:配置后端 Java 服务,连接你的基础服务
JetLinks 后端通过配置文件连接 Redis/PostgreSQL/Elasticsearch,需修改配置使其匹配你已启动的服务:
- 打开后端源码目录 jetlinks-community/jetlinks-server/src/main/resources/application.yml
- 找到 Redis、PostgreSQL、Elasticsearch 的配置段,修改为你的服务信息(你的服务都是本地启动,地址用 localhost,端口是默认值):
server:port: 8848spring:profiles: active: devapplication:name: jetlinks-platformjackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: Asia/Shanghaiserialization:WRITE_DATES_AS_TIMESTAMPS: truedefault-property-inclusion: non_nullcodec:max-in-memory-size: 100MBweb:resources:static-locations: file:./static/,/,classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/, classpath:/public/redis:host: 127.0.0.1port: 6379lettuce:pool:max-active: 1024timeout: 20s# database: 3# max-wait: 10sr2dbc:# 需要手动创建数据库,启动会自动创建表,修改了配置easyorm相关配置也要修改url: r2dbc:postgresql://127.0.0.1:5432/jetlinks# url: r2dbc:mysql://127.0.0.1:3306/jetlinks?ssl=false&serverZoneId=Asia/Shanghai # 修改了配置easyorm相关配置也要修改username: postgrespassword: 1pool:max-size: 32max-idle-time: 2m # 值不能大于mysql server的wait_timeout配置max-life-time: 10macquire-retry: 3reactor:debug-agent:enabled: falseelasticsearch:uris: 127.0.0.1:9200socket-timeout: 10sconnection-timeout: 15swebclient:max-in-memory-size: 100MB
easyorm:default-schema: public # 数据库默认的schemadialect: postgres #数据库方言
tdengine:enabled: falsedatabase: jetlinksrestful:endpoints:- http://127.0.0.1:6041/username: rootpassword: taosdata
elasticsearch:embedded:enabled: false # 为true时使用内嵌的elasticsearch,不建议在生产环境中使用data-path: ./data/elasticsearchport: 9200host: 0.0.0.0index:default-strategy: time-by-month #默认es的索引按月进行分表, direct则为直接操作索引.settings:number-of-shards: 1 # es 分片数量number-of-replicas: 0 # 副本数量
device:message:writer:time-series:enabled: true #对设备数据进行持久化
captcha:enabled: false # 开启验证码ttl: 2m #验证码过期时间,2分钟
hsweb:cors:enable: trueconfigs:- path: /**allowed-headers: "*"allowed-methods: [ "GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS" ]allowed-origins: [ "*" ] ## 生产环境请替换为具体的域名端口如: http://xxxxxmax-age: 1800dict:enum-packages: org.jetlinksfile:upload:static-file-path: ./static/uploadstatic-location: http://127.0.0.1:${server.port}/uploadwebflux:response-wrapper:enabled: true #开启响应包装器(将返回值包装为ResponseMessage)excludes: # 这下包下的接口不包装- org.springdoc# auth: #默认的用户配置# users:# admin:# username: admin# password: admin# name: 超级管理员authorize:auto-parse: true
# user-token:
# allopatric-login-mode: offlineOther # 设置异地登录模式为 将其他地方登录的相同用户踢下线
# allopatric-login-modes:
# app: offlineOtherpermission:filter:enabled: true # 设置为true开启权限过滤,赋权时,不能赋予比自己多的权限.exclude-username: admin # admin用户不受上述限制un-auth-strategy: ignore # error表示:发生越权时,抛出403错误. ignore表示会忽略越权的赋权.cache:type: redisredis:local-cache-type: guava
file:manager:storage-base-path: ./data/files
api:# 访问api接口的根地址base-path: http://127.0.0.1:${server.port}jetlinks:server-id: ${spring.application.name}:${server.port} #设备服务网关服务ID,不同服务请设置不同的IDlogging:system:context:server: ${spring.application.name}protocol:spi:enabled: true # 为true时开启自动加载通过依赖引入的协议包
logging:level:org.jetlinks: debugrule.engine: debugorg.hswebframework: debugorg.springframework.transaction: debugorg.springframework.data.r2dbc.connectionfactory: warnio.micrometer: warnorg.hswebframework.expands: errorsystem: debugorg.jetlinks.rule.engine: warnorg.jetlinks.supports.event: warnorg.springframework: warnorg.jetlinks.community.device.message.writer: warnorg.jetlinks.community.timeseries.micrometer: warnorg.jetlinks.community.elastic.search.service.reactive: traceorg.jetlinks.community.network: warnio.vertx.mqtt.impl: warnorg.jetlinks.supports.scalecube.rpc: warn"org.jetlinks.community.buffer": debugorg.elasticsearch: errororg.elasticsearch.deprecation: off"io.vertx.core.impl.ContextImpl": off"org.hswebframework.web.starter.jackson": warnconfig: classpath:logback-spring.xml
vertx:max-event-loop-execute-time-unit: secondsmax-event-loop-execute-time: 30max-worker-execute-time-unit: secondsmax-worker-execute-time: 30prefer-native-transport: true
micrometer:time-series:tags:server: ${spring.application.name}metrics:default:step: 30s
system:config:scopes:- id: frontname: 前端配置public-access: true- id: pathsname: 访问路径配置public-access: trueproperties:- key: base-pathname: 接口根路径default-value: http://127.0.0.1:9000/api- id: amapname: 高德地图配置public-access: falseproperties:- key: apiKey # 配置idname: 高德地图ApiKey # 名称
management:health:elasticsearch:enabled: false # 关闭elasticsearch健康检查
springdoc:swagger-ui:path: /swagger-ui.html# packages-to-scan: org.jetlinksgroup-configs:- group: 设备管理相关接口packages-to-scan:- org.jetlinks.community.devicepaths-to-exclude:- /device-instance/**- /device-product/**- /protocol/**- group: 规则引擎相关接口packages-to-scan: org.jetlinks.community.rule.engine.webpaths-to-exclude: /api/**- group: 通知管理相关接口packages-to-scan: org.jetlinks.community.notify.manager.web- group: 设备接入相关接口packages-to-scan:- org.jetlinks.community.network.manager.web- org.jetlinks.community.device.webpaths-to-match:- /gateway/**- /network/**- /protocol/**- group: 系统管理相关接口packages-to-scan:- org.jetlinks.community.auth- org.hswebframework.web.system.authorization.defaults.webflux- org.hswebframework.web.file- org.jetlinks.community.io.file.web- org.hswebframework.web.authorization.basic.web- org.jetlinks.community.logging.controllercache:disabled: false
network:resources:- 1883-1890- 8800-8810- 5060-5061
这个配置 重点关注redis、postgres 、Elasticsearch
的配置,主要postgres 中创建的数据库 用户名 密码必须和这个配置文件的内容一致。
# -------------------------- Redis 配置(你的 Redis 无密码,需删除 password 配置)--------------------------
spring:
redis:
host: localhost # 你的 Redis 地址(本地)
port: 6379 # 你的 Redis 端口(默认)
# password: xxx # 你的 Redis 未设密码,注释或删除这行(你之前启动命令没设密码,默认无密码)
database: 0
# -------------------------- PostgreSQL 配置(你的密码是 mysecretpassword)--------------------------
datasource:
url: jdbc:postgresql://localhost:5432/postgres # 数据库名默认是 postgres(你未指定自定义库,用默认)
username: postgres # PostgreSQL 默认用户名
password: mysecretpassword # 你启动时设置的密码(mysecretpassword)
driver-class-name: org.postgresql.Driver
# -------------------------- Elasticsearch 配置(你的 ES 无密码,端口 9200)--------------------------
jetlinks:
elasticsearch:
clients:
default:
hosts: localhost:9200 # 你的 ES 地址+端口(本地 9200)
# username: xxx # 你的 ES 未设密码,注释或删除
# password: xxx
步骤 3:启动 JetLinks 后端 Java 服务
- 打开终端,进入后端源码根目录 jetlinks-community
- 执行 Maven 命令编译并启动服务(首次启动会下载依赖,需等几分钟):
# 编译并启动后端服务(Windows 终端直接执行)
mvn clean package -DskipTests
java -jar D:\WHU\workspace\jetlinks-community\jetlinks-standalone\target\jetlinks-standalone.jar
验证一下:
D:\WHU\Docker-Compose>netstat -ano | findstr "8848"
TCP 0.0.0.0:8848 0.0.0.0:0 LISTENING 3464
TCP [::]:8848 [::]:0 LISTENING 3464
D:\WHU\Docker-Compose>
步骤 4:配置并启动 JetLinks 前端 Vue 服务
前端需要连接后端的 8848 端口,确保能通信:
- 打开前端源码目录 jetlinks-ui-vue/.env.development
- 修改后端 API 地址为你的后端地址(本地后端,地址是 http://localhost:8848):
# 后端 API 基础地址(修改为你的后端地址)
VUE_APP_API_BASE_URL=http://localhost:8848
- 打开终端,进入前端源码根目录 jetlinks-ui-vue,执行命令安装依赖并启动:
# 安装前端依赖(首次执行,需下载依赖,耐心等) 用pnpm下载吧。
pnpm install
# 启动前端服务
pnpm run dev
第一次启动的时候 可能有包不匹配, 或者个别文件要调整等问题,如代码中类似 vue3-json-viewer/dist/index.css 调整为 vue3-json-viewer/dist/vue3-json-viewer.css
还有如:
# 在前端目录 D:\WHU\workspace\jetlinks-ui-vue 执行
pnpm uninstall jsencrypt
# 在前端目录 D:\WHU\workspace\jetlinks-ui-vue 执行
pnpm uninstall jsencrypt
# 安装指定版本的 jsencrypt
pnpm install jsencrypt@3.3.2 --save
# 在前端端目录 D:\WHU\workspace\jetlinks-ui-vue 执行
pnpm install vue3-json-viewer --save
这些问题,问问豆包都能解决。
用户名 密码 初始admin /admin
- 启动成功标志:终端输出 App running at: - Local: http://localhost:8080/
- 访问前端:打开浏览器输入 http://localhost:8080,默认账号 admin,密码 jetlinks123(JetLinks 2.2 默认密码)
三、关键验证:确保全链路连通
- 基础服务连通:确认 Redis(6379)、PostgreSQL(5432)、Elasticsearch(9200)均处于 Up 状态(docker ps 查看)。
- 后端连通:访问 http://localhost:8848/doc.html,能打开 API 文档说明后端正常。
- 前后端连通:访问 http://localhost:8080,用 admin/jetlinks123 登录成功,说明前端能连接后端。
- 依赖服务连通:登录后进入 JetLinks 后台 → 系统设置 → 基础设施,查看 Redis/PostgreSQL/Elasticsearch 的 “连接状态”,显示 “在线” 即全部正常。
四、常见问题解决
- 后端启动失败:数据库连接超时
-
- 检查 PostgreSQL 是否启动(docker restart my-postgres),密码是否与 application.yml 一致(mysecretpassword)。
- 前端启动失败:npm install 报错
-
- 确保 Node.js 是 14.x 版本(高版本可能不兼容),用 node -v 确认;重新执行 npm install --registry=https://registry.npm.taobao.org。
- 登录后基础设施显示 “离线”
-
- 检查 application.yml 中 Elasticsearch/Redis 的地址是否正确(本地用 localhost,不要用 127.0.0.1 或局域网 IP);重启后端服务。