Ubuntu 24.04 安装 Openfire 5.1.2 指南
在 Ubuntu 24.04 上以 deb 与 tar.gz 两种方式实测安装 Openfire 5.1.2,覆盖 Java 17 前置、SHA-256 校验、systemd 服务管理、JVM 堆配置、初始化向导与 XMPP 握手验证。
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 介绍与选型指南》) |
| Java | openjdk 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/openfire | systemd 服务的环境参数文件 |
| /usr/lib/systemd/system/openfire.service | systemd 服务单元(别名 xmpp.service) |
| /var/log/openfire/openfire.log | 运行日志 |
| /etc/init.d/openfire | SysV 兼容脚本 |
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 向导,共五步:
- 语言选择:默认 English;
- 服务器设置:域名按实际填写(本文用
im.example.com),其余保持默认; - 数据源:选择默认的 Embedded Database(内嵌 HSQLDB,零外部依赖;生产建议外部关系库);
- 用户资料:选择默认的数据库存储用户与群组;
- 管理员账户:可直接跳过(默认账号
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 核对。
八、参考
- Openfire 官方下载页:https://www.igniterealtime.org/downloads/
- Openfire 5.1.2 发布公告(各工件 SHA-256):https://discourse.igniterealtime.org/t/openfire-5-1-2-release
- Openfire 官方文档:https://docs.igniterealtime.org/openfire/
- 站内:《Openfire 5.1.2 介绍与选型指南》