Ubuntu 24.04 安装 Para 1.57.0 指南

Ubuntu 24.04 从零安装 Para 1.57.0:官方 JAR 下载与 sha256 校验、专用系统用户、systemd 托管全流程实测,Docker 镜像运行对比方案、数据持久化、升级回滚与常见问题排障实录。

ParaJavaBaaS全文检索自托管2026/10/24

Ubuntu 24.04 安装 Para 1.57.0 指南

目标:在一台 Ubuntu 24.04 服务器上从零安装并托管 Para 1.57.0(Erudika 开源的多租户 BaaS 后端服务器)。主方案为「官方 JAR 下载 + sha256 校验 + 专用系统用户 + systemd 托管」,对比方案为「官方 Docker 镜像运行」。全流程命令与回显均已在 Ubuntu 24.04.3 LTS(主机名 para-server)上实测通过。

一、环境信息

本章列出本文实测所用的服务器环境与软件版本,所有命令与回显均基于下表环境执行。

项目值
操作系统Ubuntu 24.04.3 LTS(x86_64,主机名 para-server,systemd 托管)
Java(JAR 方案实测)OpenJDK 21.0.12.1(apt 安装 openjdk-21-jdk-headless 21.0.12.1+1-1~24.04.4)
Java(Docker 镜像内置,实测)OpenJDK 25.0.4.1
Para1.57.0(最新稳定版,官方发布于 2026-10-09)
JAR 文件para-1.57.0.jar,100511926 字节(约 95.9 MB)
sha256af68e52f0c1f5559991ec69142bf821530e169396ac8d62b36ecbf4638250976
部署目录(JAR 方案)/opt/para
服务账号para(系统用户,实测 uid=995 gid=994)
监听端口8080(默认,可配置)
实测日期2026-10-24

版本与发布日期核实自官方 releases.atom(查询日期 2026-10-24);Para 的背景、架构与同类选型对比见 《Para 1.57.0 介绍与选型指南》,配置参数逐项详解见 《Para 1.57.0 配置参数详解》。

二、前置条件

安装前需确认服务器的硬件资源、网络连通性与端口占用情况,避免安装过程中途失败。

2.1 硬件与系统要求

  • 内存:Para 1.57.0 默认堆内存较保守,本文实测以 -Xms256m -Xmx512m 运行,systemd 状态显示进程常驻内存约 470 MB(见 4.6 节实测回显);生产建议 2 GB 以上内存;
  • 磁盘:JAR 约 96 MB,加上默认内嵌 H2 数据库与 Lucene 索引的落盘数据,预留 1 GB 以上即可开始;
  • 系统:具备 systemd 的 Linux 发行版(本文为 Ubuntu 24.04),主方案依赖 systemd 托管服务。

2.2 网络与端口

Para 默认监听 8080 端口。安装前先确认端口未被占用:

ss -ltn | grep 8080 || echo "port 8080 is free"

实测回显(端口空闲时):

port 8080 is free

若端口已被占用,可通过配置项 para.port 换端口(见 7.2 节)。另外确认服务器能访问 GitHub Releases(JAR 下载源):

curl -sIL https://github.com/Erudika/para/releases/download/1.57.0/para-1.57.0.jar | grep -iE '^(HTTP|content-length)'

实测回显(302 跳转后 200,Content-Length 与 JAR 实际字节数一致):

HTTP/2 302
content-length: 0
HTTP/2 200
content-length: 100511926

⚠️ 注意:GitHub Releases 下载走 302 重定向到对象存储,curl 校验大小时必须带 -L 跟随重定向,否则只会看到 302 的 content-length: 0。

三、版本选型说明

安装前先确定要装的 Para 版本与运行时 Java 版本,两者都有明确的取舍依据。

3.1 Para 版本选择

以下版本信息取自官方 releases.atom(查询日期 2026-10-24):

版本发布日期(UTC)备注
1.57.0(最新稳定版)2026-10-09发布说明标注:修复一个影响多租户特性的严重漏洞,依赖多租户功能的用户应尽快升级
1.56.12026-10-01补丁版
1.56.02026-09-30功能版
1.55.32026-09-21补丁版

关键差异与如何选型:新装一律选最新稳定版 1.57.0——它包含安全修复,且 2026-09-21 至 2026-10-09 的 18 天内官方连续发布 4 个版本,维护活跃、补丁跟进快;仅当依赖了某个在升级中被移除的行为时才需要锁定旧版本,锁定旧版 JAR 的多版本共存方法见 7.4 节。

3.2 运行时 Java 版本选择

Para 基于 Spring Boot 体系(1.57.0 基于 Spring Boot 4.1.1),官方声明支持 JDK 8 及以上。本文实测了两种运行时:

运行时版本(实测)获取方式适用
OpenJDK 21(apt)21.0.12.1apt install openjdk-21-jdk-headlessJAR 方案,LTS 版本,长期支持
OpenJDK 25(镜像内置)25.0.4.1随官方 Docker 镜像自带Docker 方案,无需单独装 Java

关键差异与如何选型:JAR 方案推荐 OpenJDK 21 LTS(apt 直接可装、升级路径清晰);Docker 方案的 Java 由镜像内置,宿主机完全不需要安装 Java。官方路线图显示 Para 2.0 将仅支持 Java 25+,当前阶段选 21 LTS 与 25 均实测可正常运行 1.57.0。

四、方案 A:官方 JAR 手动安装与 systemd 托管(主方案)

4.1 方案说明

这是 Para 官方文档推荐的标准部署方式:从 GitHub Releases 下载可执行 fat JAR(内嵌 Jetty,无需外置 Web 服务器),放到独立目录、用专用低权限系统用户运行,再交给 systemd 托管实现开机自启与崩溃自动拉起。全程约 10 分钟,不依赖 Docker。

4.2 安装 Java 运行环境

本节安装 OpenJDK 21 运行时,这是运行 Para JAR 的前提。先刷新软件源索引再安装 headless 版 JDK(不含图形组件,服务器场景更小更快):

apt update && apt install -y openjdk-21-jdk-headless

实测回显(输出节选,实测首尾):

Selecting previously unselected package openjdk-21-jre-headless:amd64.
Preparing to unpack .../64-openjdk-21-jre-headless_21.0.12.1+1-1~24.04.4_amd64.deb ...
Unpacking openjdk-21-jre-headless:amd64 (21.0.12.1+1-1~24.04.4) ...
Selecting previously unselected package openjdk-21-jdk-headless:amd64.
Preparing to unpack .../65-openjdk-21-jdk-headless_21.0.12.1+1-1~24.04.4_amd64.deb ...
Unpacking openjdk-21-jdk-headless:amd64 (21.0.12.1+1-1~24.04.4) ...

验证 Java 版本:

java -version

实测回显:

openjdk version "21.0.12.1" 2026-08-18
OpenJDK Runtime Environment (build 21.0.12.1+1-1~24.04.4)
OpenJDK 64-Bit Server VM (build 21.0.12.1+1-1~24.04.4, mixed mode, sharing)

4.3 下载官方 JAR 并校验完整性

本节从官方 Releases 下载 1.57.0 的 JAR 并用 sha256 校验完整性——这是防止下载被篡改或传输损坏的关键一步。

mkdir -p /opt/para && cd /opt/para
wget https://github.com/Erudika/para/releases/download/1.57.0/para-1.57.0.jar

下载完成后校验 sha256 与文件大小:

sha256sum para-1.57.0.jar
ls -la para-1.57.0.jar

实测回显:

af68e52f0c1f5559991ec69142bf821530e169396ac8d62b36ecbf4638250976  para-1.57.0.jar
-rw-r--r-- 1 root root 100511926 Oct 23 21:18 para-1.57.0.jar

sha256 值与 2.2 节 curl -sIL 探测到的 content-length: 100511926 相互印证:文件字节数一致、校验值以官方 Releases 发行件为准(本文实测值前缀 af68e52f)。若你的校验值与此不符,先重新下载再怀疑其他环节。

4.4 创建专用系统用户与部署目录

本节创建无登录权限的系统用户 para 来运行服务,并把它设为部署目录的属主——避免用 root 跑服务,属于最小权限要求。

useradd -r -M -s /usr/sbin/nologin para
chown -R para:para /opt/para

验证用户与属主:

id para
ls -la /opt/para/

实测回显:

uid=995(para) gid=994(para) groups=994(para)
total 92
drwxr-xr-x  2 root root         4096 Oct 23 21:18 .
drwxr-xr-x  1 root root         4096 Oct 23 21:18 ..
-rw-r--r--  1 para para 100511926 Oct 23 21:18 para-1.57.0.jar

💡 技术拓展:创建运行账号时 -r 与普通账号的区别——-r 创建的是 system 账号(UID 从系统保留段分配,本文实测分到 995),不设密码过期、默认不可交互登录(配合 -s /usr/sbin/nologin 双保险);不加 -r 则是普通用户账号。运行后台服务的惯例是 system 账号 + nologin shell,本方案实际采用该组合。

4.5 首次启动与自动生成的凭据文件

本节先手动启动一次 Para,让它完成初始化并自动生成根应用凭据文件——正式交给 systemd 之前先确认 JAR 能独立运行。

以 para 用户身份在前台启动:

cd /opt/para && sudo -u para java -jar para-1.57.0.jar

实测回显(日志,输出节选,实测首尾):

2026-10-23 21:08:11,674 [INFO ] com.erudika.para.server.ParaServer - Starting ParaServer v1.57.0 using Java 21.0.12.1 with PID 3577 (/opt/para/para-1.57.0.jar started by root in /opt/para)
2026-10-23 21:08:11,678 [INFO ] com.erudika.para.server.ParaServer - The following 1 profile is active: "production"
2026-10-23 21:08:14,254 [INFO ] c.erudika.para.core.utils.CoreUtils - Loaded new DAO, Search and Cache implementations - H2DAO, LuceneSearch, CaffeineCache.
2026-10-23 21:08:14,503 [INFO ] c.e.para.server.persistence.H2Utils - Created H2 table 'para'.
2026-10-23 21:08:14,952 [INFO ] com.erudika.para.core.utils.Para - Created root app 'para', sharingTable = false, sharingIndex = false.
2026-10-23 21:08:14,954 [INFO ] c.e.para.server.utils.HealthUtils - Saved root app credentials to /opt/para/para-application.conf.
2026-10-23 21:08:14,960 [INFO ] com.erudika.para.server.ParaServer - Instance #1 initialized and listening on http://localhost:8080
2026-10-23 21:08:14,961 [INFO ] com.erudika.para.server.ParaServer - Started ParaServer in 3.633 seconds (process running for 4.267)

日志说明:默认运行模式为 production;默认后端为 H2DAO(内嵌 H2 数据库)+ LuceneSearch(内嵌 Lucene)+ CaffeineCache(本地缓存),开箱即用、无外部依赖;首次启动自动创建根应用 para 并把凭据写入 /opt/para/para-application.conf。

查看自动生成的凭据文件内容:

cat /opt/para/para-application.conf

实测回显(secretKey 为首次启动随机生成的 72 位 Base64 密钥,此处隐去,请勿外泄):

# Default configuration file for Para
para.env = "production"
para.dao = "H2DAO"
para.search = "LuceneSearch"

para.security.ignored = ["/", "/images/**", "/styles/**", "/scripts/**", "/v1/_setup", "/v1/_health", "/v1/_config/options", "/v1/_forms/**"]

para.root_access_key = "app:para"
para.root_secret_key = "(首次启动自动生成的 Base64 密钥,请妥善保管)"

确认服务可访问后按 Ctrl+C 停止前台进程,转入 systemd 托管:

curl -s http://localhost:8080/v1/_health

实测回显:

{"message":"healthy"}

4.6 systemd 托管

本节把 Para 注册为 systemd 服务,实现开机自启、崩溃自动重启与标准化日志收集。

创建服务单元文件 /etc/systemd/system/para.service,完整内容如下(逐项说明见代码块后):

[Unit]
Description=Para backend server (v1.57.0)
After=network.target

[Service]
Type=simple
User=para
Group=para
WorkingDirectory=/opt/para
Environment="JAVA_OPTS=-Xms256m -Xmx512m"
ExecStart=/usr/bin/java $JAVA_OPTS -Dconfig.file=/opt/para/application.conf -jar /opt/para/para-1.57.0.jar
ExecStop=/bin/kill -TERM $MAINPID
SuccessExitStatus=143
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

逐项说明:

  • Type=simple:ExecStart 进程本身即主进程,systemd 直接跟踪它,Para 不需要 fork 子进程,simple 最合适;
  • User=para / Group=para:以 4.4 节创建的专用系统用户运行,不用 root;
  • Environment="JAVA_OPTS=-Xms256m -Xmx512m":JVM 堆内存 256 MB 起步、上限 512 MB(每行只写一个 Environment=),小型服务器够用且可控,如需更大堆改此行即可;
  • ExecStart:-Dconfig.file=/opt/para/application.conf 显式指定配置文件(该文件可不放任何键,Para 会回落到内置默认值);$JAVA_OPTS 引用上面的 Environment;
  • ExecStop=/bin/kill -TERM $MAINPID + SuccessExitStatus=143:停止时发 SIGTERM,JVM 收到后以 143(128+15)退出,systemd 把 143 视为正常退出而不触发 Restart;
  • Restart=on-failure / RestartSec=10:异常退出后等 10 秒再拉起;
  • WantedBy=multi-user.target:开机自启挂载点多用户目标。

重载 systemd 并启用、启动服务:

systemctl daemon-reload
systemctl enable para
systemctl start para

systemctl enable 实测回显:

Synchronizing state of para.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
Executing /usr/lib/systemd/systemd-sysv-install enable para
Created symlink /etc/systemd/system/multi-user.target.wants/para.service → /usr/lib/systemd/system/para.service.

4.7 验证运行

本节用四条独立命令确认服务已由 systemd 正常托管、进程参数正确、HTTP 健康检查通过。

检查服务状态:

systemctl status para --no-pager

实测回显:

● para.service - Para backend server (v1.57.0)
     Loaded: loaded (/etc/systemd/system/para.service; enabled; preset: enabled)
     Active: active (running) since Fri 2026-10-23 21:20:33 UTC; 25s ago
   Main PID: 1593 (java)
      Tasks: 54 (limit: 94371)
     Memory: 470.1M (peak: 476.6M)
        CPU: 10.977s
     CGroup: /system.slice/para.service
             └─1593 /usr/bin/java -Xms256m -Xmx512m -Dconfig.file=/opt/para/application.conf -jar /opt/para/para-1.57.0.jar

状态输出验证了三点:active (running)、进程命令行里 -Xms256m -Xmx512m 确实生效(与单元文件的 Environment 一致)、常驻内存 470.1 MB 与 2.1 节的内存预估吻合。

systemctl is-active para && systemctl is-enabled para

实测回显:

active
enabled

查看服务日志(journalctl):

journalctl -u para --no-pager -n 3

实测回显:

2026-10-23T21:20:37+00:00 para-server java[1593]: 2026-10-23 21:20:37 [INFO ] Found root app 'para' and 0 existing child app(s).
2026-10-23T21:20:37+00:00 para-server java[1593]: 2026-10-23 21:20:37 [INFO ] Instance #1 initialized and listening on http://localhost:8080
2026-10-23T21:20:37+00:00 para-server java[1593]: 2026-10-23 21:20:37 [INFO ] Started ParaServer in 3.457 seconds (process running for 4.089)

健康检查:

curl -s http://localhost:8080/v1/_health

实测回显:

{"message":"healthy"}

四项验证全部通过,方案 A 部署完成。至此服务端已可用,命令行工具与 REST API 的详细用法见 《Para 1.57.0 常用 CLI 命令与 API 实测详解》。

五、方案 B:Docker 镜像运行(对比方案)

5.1 方案说明

Para 官方在 Docker Hub 维护镜像仓库 erudikaltd/para,适合已标准化使用 Docker 的服务器环境。此方案宿主机无需安装 Java,升级即换镜像标签。官方对标签的建议是只拉 :版本号 或 :latest_stable——:latest 可能指向不稳定的开发版,不要用于生产。

5.2 拉取镜像

docker pull erudikaltd/para:1.57.0

实测回显(输出节选,实测首尾):

1.57.0: Pulling from erudikaltd/para
ad49504adc5e: Pulling fs layer
4f4fb700ef54: Pulling fs layer
a4716c4fa41a: Pulling fs layer
b384e0663594: Pull complete
62adfd7e89c5: Pull complete
a4716c4fa41a: Pull complete
Status: Downloaded newer image for erudikaltd/para:1.57.0

确认镜像与体积:

docker images erudikaltd/para --format '{{.Repository}}:{{.Tag}} {{.Size}}'

实测回显:

erudikaltd/para:1.57.0 677MB

5.3 启动

把镜像跑起来,映射 8080 端口并挂载数据目录到宿主机 /opt/para/data:

docker run -d --name para -p 8080:8080 -v /opt/para/data:/para/data erudikaltd/para:1.57.0

实测回显(返回容器 ID):

9cabbc0cc012f667f65ae9de60ea9dfc9759cb9b103b8dfeaaca85bb0be2aba5

先看镜像内置的运行时环境(官方镜像自带 Java 25,配置文件固定在 /para/application.conf,家目录为 /para):

docker inspect para --format '{{range .Config.Env}}{{println .}}{{end}}' | grep -E 'JAVA_OPTS|PARA_HOME|JAVA_VERSION'

实测回显:

JAVA_OPTS=-Dconfig.file=/para/application.conf
JAVA_HOME=/opt/java/openjdk
JAVA_VERSION=jdk-25.0.4.1+1
PARA_HOME=/para

查看启动日志:

docker logs para

实测回显(输出节选,实测首尾):

WARNING: Using incubator modules: jdk.incubator.vector
     ____  ___ _ ____ ___ _
    / __ \/ __` / ___/ __` /
   / /_/ / /_/ / /  / /_/ /
  / .___/\__,_/_/   \__,_/    (v1.57.0)
 /_/
2026-10-23 21:21:34 [INFO ] Starting ParaServer v1.57.0 using Java 25.0.4.1 with PID 1 (/para/para.jar started by root in /para)
2026-10-23 21:21:34 [INFO ] The following 1 profile is active: "production"

5.4 数据持久化与验证

数据目录挂载是 Docker 方案的关键步骤:Para 把内嵌 H2 数据库与 Lucene 索引写在 PARA_HOME 下,通过 -v /opt/para/data:/para/data 落到宿主机后,容器删除重建数据不丢。

验证宿主机挂载目录中已生成数据文件:

ls -la /opt/para/data/

实测回显(首次启动后):

total 28
drwxr-xr-x 3 root root  4096 Oct 24 12:15 .
drwxr-xr-x 7 root root  4096 Oct 24 12:14 ..
drwxr-xr-x 2 root root  4096 Oct 24 12:15 para-lucene
-rw-r--r-- 1 root root 16384 Oct 24 12:15 para.mv.db

para.mv.db 是 H2 数据库文件,para-lucene/ 是 Lucene 索引目录——数据确已落盘到宿主机。

健康检查:

curl -s http://localhost:8080/v1/_health

实测回显:

{"message":"healthy"}

⚠️ 注意:容器启动后前几秒健康检查可能返回 {"code":500,"message":"unhealthy"}——这是 H2/Lucene 初始化未完成的正常现象(实测首启后 12 秒内出现过),稍候数秒重试即变为 healthy,无需处理。

5.5 凭据文件

Docker 方案下根应用凭据文件生成在容器内 /para/para-application.conf,需要把 accessKey/secretKey 导出时:

docker exec para cat /para/para-application.conf | grep root_

实测回显(secretKey 为随机生成值,此处隐去):

para.root_access_key = "app:para"
para.root_secret_key = "(首次启动自动生成的 Base64 密钥)"

六、方案对比与选择建议

两种方案的差异汇总如下,供选型参考:

维度方案 A:JAR + systemd方案 B:Docker 镜像
版本1.57.0(自选 JAR)erudikaltd/para:1.57.0
是否需联网需(下载 JAR 与 apt 依赖),之后可离线运行需(拉镜像),之后可离线运行
安装方式手动下载 JAR + systemd 单元文件docker pull + docker run
托管来源自建 /etc/systemd/system/para.serviceDocker 守护进程托管(--restart 策略)
运行时 Java宿主机自装 OpenJDK 21(实测 21.0.12.1)镜像内置 OpenJDK 25(实测 25.0.4.1)
监听端口80808080(-p 映射)
数据目录/opt/para(含数据与凭据文件)挂载 /para/data(H2 + Lucene 落宿主机)
升级下载新版本 JAR 并改单元文件(见 7.4)pull 新标签 + 重建容器
优点进程裸露可控、systemd 日志统一、依赖最少环境零依赖、升级回滚就是换标签
缺点Java 与升级需手动维护多一层 Docker 运行时;日志/调试隔一层

选择建议:服务器上已有 Docker 且团队以容器为标准交付单元,选方案 B,升级回滚成本最低;裸金属或最小化系统、希望 systemd 统一纳管所有服务(日志、开机自启、资源限制一致),选方案 A。两者数据目录结构一致(H2 + Lucene),迁移时复制 /opt/para 数据目录即可互通。

七、配置说明

两种方案的配置机制一致:本节给出安装后最常用的配置项与修改方法,完整参数体系(三级来源与优先级、192 个配置键分类详解)见 《Para 1.57.0 配置参数详解》,本节仅覆盖安装直接相关的最小集合。

7.1 配置文件位置与加载方式

  • 方案 A:/opt/para/application.conf(systemd 单元中 -Dconfig.file 指定;首次启动还会在同目录自动生成根应用凭据文件 para-application.conf);
  • 方案 B:/para/application.conf(镜像内固定路径,环境变量 JAVA_OPTS 指定;凭据文件为容器内 /para/para-application.conf)。

修改后重启服务生效(方案 A systemctl restart para;方案 B docker restart para)。

7.2 常用配置键

在 application.conf 中常用的最小集合(逐项说明):

para.port = 8080              # 监听端口,被占用时改这里
para.env = "production"       # 运行模式,production 下凭据必须认证
para.dao = "H2DAO"            # 存储后端,默认内嵌 H2;换 MySQL/PostgreSQL 见[《Para 1.57.0 配置参数详解》](https://www.quzuo.net/document/hYk7GVEWmBQO)
para.search = "LuceneSearch"  # 检索后端,默认内嵌 Lucene;集群场景换 Elasticsearch

7.3 JVM 内存设置

方案 A 在 /etc/systemd/system/para.service 的 Environment="JAVA_OPTS=-Xms256m -Xmx512m" 行修改堆内存(如改为 Environment="JAVA_OPTS=-Xms512m -Xmx1024m"),改后 systemctl daemon-reload && systemctl restart para。验证生效值看 systemctl status para 中 CGroup 行的完整 java 命令(4.7 节实测回显即验证方法)。方案 B 通过 -e JAVA_OPTS 传入,如:

docker run -d --name para -p 8080:8080 -e JAVA_OPTS="-Dconfig.file=/para/application.conf -Xms256m -Xmx512m" -v /opt/para/data:/para/data erudikaltd/para:1.57.0

7.4 升级与多版本管理

方案 A(JAR)升级到新版本:官方 JAR 以版本号命名,多版本可共存于同一目录,按以下步骤逐条执行:

cd /opt/para
wget https://github.com/Erudika/para/releases/download/1.57.0/para-1.57.0.jar
sha256sum para-1.57.0.jar

修改单元文件中 ExecStart 的 JAR 文件名指向新版本:

sed -i 's/para-1.56.1.jar/para-1.57.0.jar/' /etc/systemd/system/para.service
systemctl daemon-reload
systemctl restart para
curl -s http://localhost:8080/v1/_health

回滚即把 sed 目标改回旧版本文件名再 restart——旧 JAR 仍在目录中,无需重新下载。

方案 B(Docker)升级:拉新标签、重建容器(数据在宿主机挂载目录中不受影响):

docker pull erudikaltd/para:1.57.0
docker rm -f para
docker run -d --name para -p 8080:8080 -v /opt/para/data:/para/data erudikaltd/para:1.57.0

💡 技术拓展:软件版本交付形态不止本文两种。Para 官方提供四种交付形态对比——

形态特点适用
可执行 JAR单文件,宿主机自配 Java,本文方案 A裸机/最小化服务器
Docker 镜像环境内置,换标签升级,本文方案 B容器化服务器
WAR 包部署进外置 Servlet 容器统一纳管已有 Tomcat/Jetty 资产
Helm ChartKubernetes 编排K8s 集群

本文按服务器单机场景实际采用前两种,WAR 与 Helm 属于既有资产复用与集群场景。

八、常见问题(FAQ)

以下问题均来自实测过程中真实遇到并解决的现象。

Q1:启动后立即访问健康检查返回 {"code":500,"message":"unhealthy"},是坏了吗?

不是。首次启动时 H2 数据库建表、Lucene 建索引需要数秒,健康检查在初始化完成前返回 500。实测(5.4 节)首启后 12 秒内 curl 返回 {"code":500,"message":"unhealthy"},随后数据文件落盘、再查返回 {"message":"healthy"}。等待数秒重试即可,无需任何操作。

Q2:日志出现 Server is no longer healthy! Health check failed for services: Cache,之后又自己恢复?

实测 journalctl 记录(节选):

2026-10-24T01:35:07+00:00 para-server java[1593]: 2026-10-24 01:35:07 [ERROR] Server is no longer healthy! Health check failed for services: Cache
2026-10-24T01:36:07+00:00 para-server java[1593]: 2026-10-24 01:36:07 [INFO ] Server is healthy.

定位与结论:Para 的健康检查覆盖存储、检索、缓存三个服务,默认 CaffeineCache 在内存压力瞬时抖动时会单次检查失败;实测 1 分钟后的下一次检查自动恢复 healthy,数据无损。若该 ERROR 频繁出现而非偶发,说明内存吃紧,按 7.3 节调大 JVM 堆或迁移到分布式缓存插件。

Q3:8080 端口被其他进程占用怎么办?

先确认占用者:ss -ltnp | grep 8080。若需换端口,在 application.conf 写 para.port = 8081 后重启服务;验证方法:curl http://localhost:8081/v1/_health 返回 {"message":"healthy"}。

Q4:sha256 校验值对不上怎么办?

先重下载再校验:GitHub Releases 走重定向,下载中断会出现文件截断。若多次校验仍不一致,核对下载 URL 中的版本号是否与目标版本一致(URL 与文件名均含版本号,见 4.3 节),并以官方 Releases 页面公布的发行件为准。

Q5:忘记或丢失 root 应用的 secretKey 怎么办?

凭据在首次启动时写入凭据文件:方案 A 读 /opt/para/para-application.conf,方案 B 执行 docker exec para cat /para/para-application.conf | grep root_(见 5.5 节实测回显)。若文件丢失,停服删除该凭据文件后重启,Para 会重新生成(注意:重新生成后旧密钥立即失效)。

九、卸载与清理

方案 A(JAR + systemd)完整卸载,逐条执行:

systemctl stop para
systemctl disable para

systemctl disable 实测回显:

Removed "/etc/systemd/system/multi-user.target.wants/para.service".
rm /etc/systemd/system/para.service
systemctl daemon-reload
rm -rf /opt/para
userdel para

如需连 Java 一起清理:apt remove -y openjdk-21-jdk-headless。清理后验证:ss -ltn | grep 8080 应无输出、id para 应报 no such user。

方案 B(Docker)完整卸载:

docker rm -f para
docker rmi erudikaltd/para:1.57.0
rm -rf /opt/para/data

十、参考链接