在物联网(IoT)项目快速落地的今天,将开源物联网平台部署到高性能、低功耗的ARM边缘设备上,已成为一种高效且经济的方案。本文将以搭载瑞芯微RK3588八核处理器的Ubuntu 20.04系统为例,手把手带你完成JetLinks社区版(v2.10.0)的完整部署。我们将重点攻克ARM架构下PostgreSQL数据库与时序数据库插件TimescaleDB的编译与适配难题,为你提供一份详尽、可复现的后端架构部署指南。
一、环境准备与JetLinks源码编译
部署的第一步是准备好JetLinks的运行环境。由于RK3588基于ARM64架构,与常见的x86环境存在差异,因此我们需要从源码开始编译。首先,确保你的系统已安装Java 17(或更高版本)和Maven 3.6+。接着,克隆JetLinks社区版的对应版本仓库:
2.10.0克隆完成后,你可以通过以下命令查看项目结构:

接下来进入关键的编译环节。利用RK3588强大的8核性能,我们可以通过配置Maven参数来大幅加速编译过程。执行以下编译命令:
mvn clean install -T 12C这里我们通过-T 12C参数指定了12个线程进行并行编译,这能充分利用多核CPU,显著缩短等待时间。编译过程会下载大量依赖,请保持网络通畅。
root@zhongrui:/work/jetlinks/jetlinks-community-me# mvn -v
Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 17.0.15, vendor: Ubuntu, runtime: /usr/lib/jvm/java-17-openjdk-arm64
Default locale: en_US, platform encoding: ANSI_X3.4-1968
OS name: "linux", version: "5.10.160", arch: "aarch64", family: "unix"
root@zhongrui:/work/jetlinks/jetlinks-community-me#
编译成功后,你会在target目录下找到生成的jar包。同时,我们需要关注application.yml配置文件,为后续连接数据库做好准备。关键的数据库连接配置项如下所示:

至此,JetLinks平台的核心服务端程序已准备就绪。[AFFILIATE_SLOT_1]
二、PostgreSQL数据库安装与配置
JetLinks的稳定运行高度依赖PostgreSQL及其时序扩展。在Ubuntu 20.04上,我们可以通过APT包管理器轻松安装特定版本的PostgreSQL。执行以下命令安装PostgreSQL 12:
postgresql安装完成后,确认安装的版本是否为12.22:
12.22
root@zhongrui:/work/jetlinks/jetlinks-community-me# psql --version
psql (PostgreSQL) 12.22 (Ubuntu 12.22-0ubuntu0.20.04.4)
root@zhongrui:/work/jetlinks/jetlinks-community-me#
接下来,我们需要为JetLinks创建专用的数据库和用户。以管理员身份登录PostgreSQL,执行以下SQL命令:
# 1. 切换到postgres系统用户(默认无密码)
su - postgres
# 2. 进入psql命令行
psql
CREATE DATABASE jetlinks WITH ENCODING 'UTF8';
CREATE USER jetlinks WITH PASSWORD 'JetLinks@123456';
GRANT ALL PRIVILEGES ON DATABASE jetlinks TO jetlinks;
\q
这条命令创建了一个名为jetlinks的数据库,以及一个同名用户并设置了密码。创建过程如下图所示:

创建完成后,使用\l和\du命令可以分别查看数据库列表和用户列表,以确认创建成功。
root@zhongrui:/work/jetlinks/jetlinks-community-me# su - postgres
postgres@zhongrui:~$ psql
psql (12.22 (Ubuntu 12.22-0ubuntu0.20.04.4))
Type "help" for help.
postgres=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
jetlinks | | {}
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-------------+----------+----------+---------+---------+-----------------------
jetlinks | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =Tc/postgres +
| | | | | postgres=CTc/postgres+
| | | | | jetlinks=CTc/postgres
postgres | postgres | UTF8 | C.UTF-8 | C.UTF-8 |
template0 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
thingsboard | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =Tc/postgres +
| | | | | postgres=CTc/postgres
(5 rows)
postgres=#

三、TimescaleDB插件的源码编译与安装
这是整个部署过程中最具挑战性的一环。由于ARM架构的官方二进制包支持有限,直接通过apt install安装TimescaleDB插件很可能失败。因此,源码编译成为了最可靠的方案。我们选择与PostgreSQL 12兼容的TimescaleDB 2.11.0版本。
2.11.0⚠️ 版本匹配至关重要:务必确保TimescaleDB版本与你的PostgreSQL主版本严格兼容,否则编译或运行时会出错。

获取源码后,进入目录并执行编译安装命令。编译过程需要系统已安装必要的开发工具(如cmake, gcc)。
./bootstrap
cd ./build && make
make install # 安装
编译成功后的输出示意如下:

插件编译完成后,需要将其配置到PostgreSQL中。编辑PostgreSQL的共享库预加载配置文件:
/etc/postgresql/12/main/postgresql.conf在文件末尾添加 timescaledb,然后重启PostgreSQL服务使配置生效。
# default configuration for text search
default_text_search_config = 'pg_catalog.english'

四、数据库扩展启用与平台启动验证
插件加载后,我们需要在具体的数据库中启用TimescaleDB扩展。连接到之前创建的jetlinks数据库,执行启用命令:
\c jetlinks
CREATE EXTENSION IF NOT EXISTS timescaledb;
重要提示:扩展是以数据库为单位的。如果你有多个数据库需要使用时序功能,需要在每个数据库中分别执行CREATE EXTENSION IF NOT EXISTS timescaledb;。
启用成功后,可以查询已安装的扩展列表进行验证:
root@zhongrui:/work/jetlinks/timescaledb/build# su - postgres
postgres@zhongrui:~$ psql
psql (12.22 (Ubuntu 12.22-0ubuntu0.20.04.4))
Type "help" for help.
postgres=# \c jetlinks
You are now connected to database "jetlinks" as user "postgres".
jetlinks=# CREATE EXTENSION IF NOT EXISTS timescaledb;
NOTICE: extension "timescaledb" already exists, skipping
CREATE EXTENSION
jetlinks=# SELECT extname, extversion
jetlinks-# FROM pg_extension
jetlinks-# WHERE extname = 'timescaledb';
extname | extversion
-------------+------------
timescaledb | 2.11.0
(1 row)
jetlinks=#
验证结果应如下图所示,包含timescaledb:

所有后端依赖就绪后,终于可以启动JetLinks了。虽然官方要求Java 17,但在ARM环境下可能需要额外的JVM参数来保证兼容性。首先确认Java版本:
root@zhongrui:/work/jetlinks/timescaledb/build# java --version
openjdk 17.0.15 2025-04-15
OpenJDK Runtime Environment (build 17.0.15+6-Ubuntu-0ubuntu120.04)
OpenJDK 64-Bit Server VM (build 17.0.15+6-Ubuntu-0ubuntu120.04, mixed mode, sharing)
root@zhongrui:/work/jetlinks/timescaledb/build#
使用以下命令启动JetLinks应用。注意我们添加了一些--add-opens参数来解决可能出现的模块访问权限问题。
java --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.math=ALL-UNNAMED --add-opens java.base/java.util.concurrent=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.text=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED --add-opens java.base/java.nio=ALL-UNNAMED --add-opens java.base/sun.net=ALL-UNNAMED --add-opens java.base/sun.net.www.protocol=ALL-UNNAMED --add-opens java.base/sun.nio.ch=ALL-UNNAMED --add-opens java.base/sun.util.calendar=ALL-UNNAMED --add-opens java.base/sun.reflect=ALL-UNNAMED --add-opens java.base/jdk.internal.reflect=ALL-UNNAMED -jar target/application.jar
应用启动成功后,控制台会输出类似以下的日志信息:

此时,打开浏览器,访问 http://你的设备IP:8848,使用默认账号密码即可登录JetLinks管理后台。
admin
JetLinks.C0mmVn1ty
[AFFILIATE_SLOT_2]
五、总结与优化建议
通过以上步骤,我们成功在RK3588+Ubuntu 20.04的ARM平台上完成了JetLinks物联网平台的完整部署。回顾整个过程,有几个核心要点:
- 环境适配是前提:确定了JetLinks 2.10.0 + PostgreSQL 12.22 + TimescaleDB 2.11.0这一经过验证的版本组合,确保了组件间的兼容性。
- 编译优化提效率:充分利用RK3588的8核性能,通过Maven的
-T参数进行并行编译,显著提升了效率。 - 源码编译破壁垒:在官方二进制包支持不足的情况下,采用源码编译TimescaleDB插件是解决ARM架构兼容性问题的关键。
- 配置生效靠重启:无论是修改PostgreSQL配置还是启用扩展,完成后务必重启相关服务,确保配置被正确加载。
最终部署成功的JetLinks平台Web界面如下:

这套部署方案不仅适用于RK3588,其思路和方法也可为其他ARM架构边缘设备(如树莓派、Jetson系列)部署复杂的Java微服务应用提供有价值的参考。未来,你可以在此基础上进一步探索容器化部署、集群化配置,以构建更健壮、可扩展的物联网服务端架构。
浙公网安备 33010602011771号