在物联网(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微服务应用提供有价值的参考。未来,你可以在此基础上进一步探索容器化部署、集群化配置,以构建更健壮、可扩展的物联网服务端架构。