Ubuntu 24.04 安装 Para 1.57.0 指南
Ubuntu 24.04 从零安装 Para 1.57.0:官方 JAR 下载与 sha256 校验、专用系统用户、systemd 托管全流程实测,Docker 镜像运行对比方案、数据持久化、升级回滚与常见问题排障实录。
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 |
| Para | 1.57.0(最新稳定版,官方发布于 2026-10-09) |
| JAR 文件 | para-1.57.0.jar,100511926 字节(约 95.9 MB) |
| sha256 | af68e52f0c1f5559991ec69142bf821530e169396ac8d62b36ecbf4638250976 |
| 部署目录(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.1 | 2026-10-01 | 补丁版 |
| 1.56.0 | 2026-09-30 | 功能版 |
| 1.55.3 | 2026-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.1 | apt install openjdk-21-jdk-headless | JAR 方案,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.service | Docker 守护进程托管(--restart 策略) |
| 运行时 Java | 宿主机自装 OpenJDK 21(实测 21.0.12.1) | 镜像内置 OpenJDK 25(实测 25.0.4.1) |
| 监听端口 | 8080 | 8080(-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 Chart Kubernetes 编排 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
十、参考链接
- Para 官方文档(安装与配置):https://paraio.org/docs
- GitHub 仓库与 Releases:https://github.com/Erudika/para
- 1.57.0 下载地址(本文实测版本):https://github.com/Erudika/para/releases/download/1.57.0/para-1.57.0.jar
- Docker Hub 镜像仓库:https://hub.docker.com/r/erudikaltd/para
- para-cli 命令行工具:https://github.com/Erudika/para-cli
- 站内相关文档:《Para 1.57.0 介绍与选型指南》、《Para 1.57.0 配置参数详解》、《Para 1.57.0 常用 CLI 命令与 API 实测详解》