Ubuntu 24.04 安装 Openfire 5.1.2 指南

在 Ubuntu 24.04 上以 deb 与 tar.gz 两种方式实测安装 Openfire 5.1.2,覆盖 Java 17 前置、SHA-256 校验、systemd 服务管理、JVM 堆配置、初始化向导与 XMPP 握手验证。

OpenfireJabber/XMPP即时通讯Ubuntu 24.042026/10/26

Ubuntu 24.04 安装 Openfire 5.1.2 指南

目标:在 Ubuntu 24.04 服务器上以 deb 包与 tar.gz 两种方式安装 Openfire 5.1.2,覆盖 Java 17 前置环境、包校验、systemd 服务管理、JVM 堆配置、初始化向导与安装后验证,所有命令与回显均来自实测。

一、环境信息

本文所有操作在以下环境实测完成,命令输出均为实际回显:

项目内容
操作系统Ubuntu 24.04.5 LTS
Openfire 版本5.1.2(当前最新稳定版,发布信息见《Openfire 5.1.2 介绍与选型指南》)
Javaopenjdk 17.0.20.1(手工安装)+ default-jre 解析为 OpenJDK 21
安装方式方式一 deb 包 + systemd;方式二 tar.gz 手工部署
演示域名im.example.com
演示账号admin / q1w2e3r4

二、安装前准备

2.1 安装 Java 17

Openfire 5.1.2 要求 Java 17 及以上。安装 openjdk-17-jre-headless:

apt-get update && apt-get install -y openjdk-17-jre-headless

验证:

java -version

实测回显:

openjdk version "17.0.20.1" 2026-08-18
OpenJDK Runtime Environment (build 17.0.20.1+1-1-24.04-Ubuntu)
OpenJDK 64-Bit Server VM (build 17.0.20.1+1-1-24.04-Ubuntu, mixed mode, sharing)

2.2 下载 deb 包并校验

cd /root
curl -L -o openfire_5.1.2_all.deb "https://download.igniterealtime.org/openfire/openfire_5.1.2_all.deb"
sha256sum openfire_5.1.2_all.deb

实测回显(与官方 5.1.2 发布公告给出的 SHA-256 完全一致):

354e14ebf80c03eee05649a43d52338a77797bb41529a4f1486c49e784119f9d  openfire_5.1.2_all.deb
-rw-r--r-- 1 root root 72M Oct 26 10:32 openfire_5.1.2_all.deb

包内元数据确认版本与依赖:

dpkg-deb -I openfire_5.1.2_all.deb | grep -E "Package|Version|Depends"
 Package: openfire
 Version: 5.1.2
 Pre-Depends: adduser
 Depends: default-jre-headless (>= 17) | java-runtime (>= 17)

三、方法一:deb 包安装

3.1 dpkg 安装与依赖修复

dpkg -i /root/openfire_5.1.2_all.deb

实测回显(注意:这里出现了一个真实的依赖问题):

(Reading database ... 9156 files and directories currently installed.)
Preparing to unpack /root/openfire_5.1.2_all.deb ...
Unpacking openfire (5.1.2) ...
dpkg: dependency problems prevent configuration of openfire:
 openfire depends on default-jre-headless (>= 17) | java-runtime (>= 17); however:
  Package default-jre-headless is not installed.
  Package java-runtime is not installed.

dpkg: error processing package openfire (--install):
 dependency problems - leaving unconfigured
Errors were encountered while processing:
 openfire

原因:我们直接安装的是 openjdk-17-jre-headless,它不提供 default-jre-headless 这个虚拟包名。用 apt 补齐依赖:

apt-get -f install -y

apt 会安装 default-jre-headless 元包(在 Ubuntu 24.04 上解析为 OpenJDK 21),随后 openfire 完成配置:

Created symlink /etc/systemd/system/xmpp.service → /usr/lib/systemd/system/openfire.service
Created symlink /etc/systemd/system/multi-user.target.wants/openfire.service → /usr/lib/systemd/system/openfire.service

确认包状态为已配置:

dpkg -l openfire | tail -1
ii  openfire       5.1.2        all          High performance XMPP (Jabber) server.

注意:dpkg 会在受限环境打印 invoke-rc.d: policy-rc.d denied execution of start.,即安装时不会自动启动服务,需要手动执行 systemctl start(见下文)。在标准桌面/服务器环境同样适用"先配置后手动启动"的预期。

3.2 关键安装路径

路径内容
/usr/share/openfire程序主目录(bin/、lib/、plugins/、resources/)
/etc/openfire/openfire.xml主配置文件
/etc/default/openfiresystemd 服务的环境参数文件
/usr/lib/systemd/system/openfire.servicesystemd 服务单元(别名 xmpp.service)
/var/log/openfire/openfire.log运行日志
/etc/init.d/openfireSysV 兼容脚本

3.3 配置 JVM 堆

服务单元通过 EnvironmentFile=/etc/default/openfire 读取 DAEMON_OPTS 并追加到启动命令。编辑该文件,将堆限制在 256–512MB:

sed -i 's|^DAEMON_OPTS=""|DAEMON_OPTS="-Xms256m -Xmx512m"|' /etc/default/openfire
grep DAEMON_OPTS /etc/default/openfire
DAEMON_OPTS="-Xms256m -Xmx512m"

3.4 启动服务

systemctl start openfire
systemctl status openfire --no-pager -l | head -12

实测回显:

● openfire.service - Openfire XMPP Server
     Loaded: loaded (/usr/lib/systemd/system/openfire.service; enabled; preset: enabled)
     Active: active (running) since Mon 2026-10-26 10:33:23 UTC; 12s ago
   Main PID: 4407 (java)
      Tasks: 42 (limit: 2932)
     Memory: 232.1M (peak: 238.9M)
        CPU: 3.131s
     CGroup: /system.slice/…/openfire.slice/openfire.service
             └─4407 /usr/lib/jvm/java-21-openjdk-amd64/bin/java -Xms256m -Xmx512m -Dlog4j.configurationFile=/usr/share/openfire/lib/log4j2.xml -Dlog4j2.formatMsgNoLookups=true -Djdk.tls.ephemeralDHKeySize=matched -Djsse.SSLEngine.acceptLargeFragments=true -Djava.net.preferIPv6Addresses=system -server -DopenfireHome=/usr/share/openfire -Dopenfire.lib.dir=/usr/share/openfire/lib -Djava.security.properties=/usr/share/openfire/resources/security/java.security -Djdk.tls.server.enableStatusRequestExtension=true -Dcom.sun.security.enableCRLDP=true -classpath /usr/share/openfire/lib/startup.jar -jar /usr/share/openfire/lib/startup.jar

Oct 26 10:33:23 systemd[1]: Started openfire.service - Openfire XMPP Server.

服务默认开机自启(enabled):

systemctl is-enabled openfire
enabled

四、初始化向导

服务启动后,浏览器访问 http://<服务器IP>:9090 进入 Openfire Setup 向导,共五步:

  1. 语言选择:默认 English;
  2. 服务器设置:域名按实际填写(本文用 im.example.com),其余保持默认;
  3. 数据源:选择默认的 Embedded Database(内嵌 HSQLDB,零外部依赖;生产建议外部关系库);
  4. 用户资料:选择默认的数据库存储用户与群组;
  5. 管理员账户:可直接跳过(默认账号 admin,初始密码 admin)。

向导完成后登录管理台,立即修改管理员密码:进入 Users/Groups → admin → Password,将密码改为强口令(本文演示统一使用 q1w2e3r4)。改密成功后控制台返回:

user-password.jsp?success=true&username=admin

五、安装验证

5.1 端口监听

向导完成后再次检查监听端口:

ss -tlnp | grep java

实测回显:

LISTEN 0      50                 *:5222    users:(("java",pid=4407,fd=256))
LISTEN 0      50                 *:5223    users:(("java",pid=4407,fd=305))
LISTEN 0      50                 *:5269    users:(("java",pid=4407,fd=354))
LISTEN 0      50                 *:5270    users:(("java",pid=4407,fd=403))
LISTEN 0      50                 *:5275    users:(("java",pid=4407,fd=452))
LISTEN 0      50                 *:5276    users:(("java",pid=4407,fd=501))
LISTEN 0      50                 *:7070    users:(("java",pid=4407,fd=502))
LISTEN 0      50                 *:7443    users:(("java",pid=4407,fd=503))
LISTEN 0      50                 *:7777    users:(("java",pid=4407,fd=203))
LISTEN 0      50                 *:9090    users:(("java",pid=4407,fd=166))

主要端口:9090 管理台 HTTP、5222 客户端连接、5223 客户端旧式 SSL、5269 服务器互联、5270 服务器互联 direct TLS、7070/7443 HTTP Binding(BOSH/WebSocket)、7777 文件传输代理;5275/5276 为内置辅助监听,未用到时无需放行。若使用 9091 管理台 HTTPS,一并放行防火墙。

5.2 JVM 参数验证

以运行用户视角确认堆参数已生效(jps 属于 JDK,需安装 openjdk-17-jdk-headless):

sudo -u openfire jps -lvm | head -2

实测回显(可见 -Xms256m -Xmx512m):

4407 /usr/share/openfire/lib/startup.jar -Xms256m -Xmx512m -Dlog4j.configurationFile=/usr/share/openfire/lib/log4j2.xml -Dlog4j2.formatMsgNoLookups=true -Djdk.tls.ephemeralDHKeySize=matched -Djsse.SSLEngine.acceptLargeFragments=true -Djava.net.preferIPv6Addresses=system -DopenfireHome=/usr/share/openfire -Dopenfire.lib.dir=/usr/share/openfire/lib -Djava.security.properties=/usr/share/openfire/resources/security/java.security -Djdk.tls.server.enableStatusRequestExtension=true -Dcom.sun.security.enableCRLDP=true

5.3 XMPP 协议握手

向 5222 发起 XMPP 流协商,验证服务端应答:

import socket

s = socket.create_connection(("127.0.0.1", 5222), timeout=10)
s.sendall(b"<stream:stream to='im.example.com' xmlns='jabber:client' "
          b"xmlns:stream='http://etherx.jabber.org/streams' version='1.0'>")
print(s.recv(2048).decode("utf-8", "ignore")[:420])
s.close()

实测回显(from="im.example.com" 即服务器应答流头,sasl-channel-binding 为 5.1.x 新增的 SASL 通道绑定特性):

<?xml version="1.0" encoding="UTF-8"?><stream:stream xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" from="im.example.com" id="69zs1uz8p3" xml:lang="en" version="1.0"><stream:features><starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"/><limits xmlns="urn:xmpp:stream-limits:0"><max-bytes>1048576</max-bytes><idle-seconds>360</idle-seconds></limits><sasl-channel-binding xmlns="urn:xmpp:sasl-cb:0">…

5.4 管理台登录

浏览器访问 http://<服务器IP>:9090,使用 admin / q1w2e3r4 登录,进入 Openfire Admin Console: Server Information 页面即安装完成。

六、方法二:tar.gz 安装

适合无 root 包管理约束、需要自定义目录(如 /opt)或与包管理器并存生态隔离的场景。

6.1 下载与解压

cd /root
curl -L -o openfire_5_1_2.tar.gz "https://download.igniterealtime.org/openfire/openfire_5_1_2.tar.gz"
sha256sum openfire_5_1_2.tar.gz

实测回显(与官方公告一致):

0f45006e319fb36bf869ef9ca3a3bef930a1bd683a792883b0b0b4c9a3974680  openfire_5_1_2.tar.gz

解压到 /opt 并赋权(若已按方式一安装,系统已存在 openfire 用户):

cd /opt
tar xzf /root/openfire_5_1_2.tar.gz
chown -R openfire:openfire /opt/openfire

解压后目录:bin/、conf/、lib/、logs/(见下文说明)、plugins/、resources/、documentation/ 等。

6.2 三个实测中的坑

坑一:没有旧式 bin/openfire 守护脚本。 5.1.2 的 tar.gz 只有 bin/openfire.sh(前台启动器)与 bin/openfirectl(start/stop/restart 包装),且二者默认无执行位,直接执行会报 Permission denied:

chmod +x /opt/openfire/bin/openfire.sh /opt/openfire/bin/openfirectl

坑二:logs 目录不存在。 tar.gz 不自带 logs/ 目录,启动器写日志会报 No such file or directory,需先创建:

mkdir -p /opt/openfire/logs
chown -R openfire:openfire /opt/openfire

坑三:openfirectl 的两个限制。 其一,JAVA_HOME 自动探测在多版本 JDK 共存时可能解析出错误的 /bin/java(报 Error: JAVA_HOME is not defined correctly),需显式指定;其二,它通过 su - $OPENFIRE_USER 降权,而 deb 创建的 openfire 用户 shell 为 nologin(报 This account is currently not available),且 su - 登录式切换会丢弃传入的环境变量。因此本文直接以 openfire 用户运行 openfire.sh:

su -s /bin/bash openfire -c "cd /opt/openfire && nohup env JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64 OPENFIRE_OPTS=\"-Xms256m -Xmx512m\" bin/openfire.sh > /opt/openfire/logs/console.log 2>&1 &"

6.3 验证

jps -lvm | grep -v Jps | head -1

实测回显(openfire 用户进程、-Xms256m -Xmx512m 生效、-DopenfireHome=/opt/openfire):

5267 /opt/openfire/lib/startup.jar -Dlog4j.configurationFile=/opt/openfire/lib/log4j2.xml -Dlog4j2.formatMsgNoLookups=true -Djdk.tls.ephemeralDHKeySize=matched -Djsse.SSLEngine.acceptLargeFragments=true -Djava.net.preferIPv6Addresses=system -Xms256m -Xmx512m -DopenfireHome=/opt/openfire -Dopenfire.lib.dir=/opt/openfire/lib -Djava.security.properties=/opt/openfire/resources/security/java.security -Djdk.tls.server.enableStatusRequestExtension=true -Dcom.sun.security.enableCRLDP=true

访问 http://<服务器IP>:9090/setup/index.jsp 返回 200 进入向导,流程与方式一完全一致(域名、数据源、管理员改密 q1w2e3r4)。改密成功同样返回 user-password.jsp?success=true&username=admin。

6.4 停止方式

tar.gz 方式没有 systemd 托管时,按进程停止:

PID=$(pgrep -f "openfireHome=/opt/openfire" | head -1)
kill $PID

生产环境建议为 tar.gz 部署编写 systemd 单元(ExecStart=/opt/openfire/bin/openfire.sh、User=openfire、Environment=OPENFIRE_OPTS=-Xms256m -Xmx512m),获得开机自启与崩溃自动拉起能力。

七、常见问题

1. dpkg 安装报 default-jre-headless 未安装 openjdk-17-jre-headless 不提供 default-jre-headless 虚拟包名,apt-get -f install -y 补齐即可;元包在 Ubuntu 24.04 上解析为 OpenJDK 21,与手工安装的 17 并存,Openfire 5.1.2 在 17–25 均受支持。

2. 安装后 5222 未监听 初始化向导未完成前,Openfire 仅监听 9090 管理台;XMPP 业务端口在向导完成后才开启。访问 9090 完成向导即可。

3. 安装后服务没有自动启动 受限环境(如自动化装机、最小化环境)中 policy-rc.d 会阻止包管理器拉起服务,手动 systemctl start openfire 即可;systemctl is-enabled openfire 确认开机自启已注册。

4. tar.gz 启动报 JAVA_HOME 错误或账号不可用 见方法二"三个实测中的坑":显式指定 JAVA_HOME;openfire 用户需可登录 shell 或用 su -s /bin/bash 绕过;logs 目录需手工创建。

5. JVM 堆与内存占用 /etc/default/openfire 的 DAEMON_OPTS(deb)或 OPENFIRE_OPTS(tar.gz)设置 -Xms256m -Xmx512m 后,实测 systemd 报告的常驻内存约 230MB(空载),堆上限 512MB 生效可用 jps -lvm 核对。

八、参考