目录
- 前言:JBoss vs. WildFly
- 第一部分:单机环境安装与部署
- 1 环境准备
- 2 下载与安装
- 3 启动与停止服务器
- 4 部署第一个应用 (WAR包)
- 5 管理控制台 初探
- 第二部分:核心配置详解
- 1 目录结构解析
- 2 端口配置
- 3 用户与安全管理
- 第三部分:部署应用的不同方式
- 1 部署 WAR/EAR 包 (热部署)
- 2 部署目录 (热部署)
- 3 使用管理 CLI 命令部署
- 第四部分:集群部署 (高可用)
- 1 集群概念与准备工作
- 2 配置 JGroups 集群通信
- 3 配置 Web 会话复制
- 4 启动集群节点并验证
- 第五部分:常见问题与故障排查
- 1 端口被占用
- 2 部署失败
- 3 如何查看日志
前言:JBoss vs. WildFly
- JBoss Application Server (AS): 这是 Red Hat 的开源应用服务器的旧名称,最后一个 AS 版本是 JBoss AS 7。
- WildFly: 这是 JBoss AS 的继任者,项目名称在 2025 年更改为 WildFly,它是一个轻量级、模块化、快速的 Java EE 应用服务器。所有新项目都应使用 WildFly。
本教程将以最新的 WildFly 版本为例进行讲解,但其核心思想和操作也适用于旧版 JBoss AS 7。

第一部分:单机环境安装与部署
1 环境准备
-
操作系统: Linux (CentOS/Ubuntu/Debian) 或 Windows,推荐使用 Linux。
-
Java 环境: WildFly 26+ 需要 Java 17 或更高版本,请确保已安装 JDK 并配置好
JAVA_HOME环境变量。# 检查 Java 版本 java -version # 检查 JAVA_HOME 是否设置正确 echo $JAVA_HOME
-
下载地址: WildFly 官方下载页面
2 下载与安装
-
下载: 假设我们下载 WildFly 26.1.2 Final 版本。
# 使用 wget 下载 (Linux) wget https://github.com/wildfly/wildfly/releases/download/26.1.2.Final/wildfly-26.1.2.Final.tar.gz
-
解压: 将下载的
.tar.gz文件解压到指定目录,/opt。# 进入 /opt 目录 cd /opt # 解压 tar -xvzf wildfly-26.1.2.Final.tar.gz # 创建一个软链接,方便后续使用和升级 ln -s wildfly-26.1.2.Final wildfly
-
目录结构: 安装完成后,
/opt/wildfly目录就是你的 WildFly 主目录,通常称为WILDFLY_HOME。bin/: 存放启动脚本、管理脚本等。standalone/: 独立模式配置目录。configuration/: 存放服务器配置文件(如standalone.xml,standalone-ha.xml)。deployments/: 应用部署目录,将应用放在这里,服务器会自动部署。
domain/: 域模式配置目录,用于集中管理多个服务器实例。modules/: 存放 WildFly 的模块依赖。
3 启动与停止服务器
WildFly 有两种运行模式:独立模式 和 域模式,我们先学习最常用的独立模式。
-
启动服务器:
# 进入 WILDFLY_HOME/bin 目录 cd /opt/wildfly/bin # 启动服务器 (默认为 standalone 模式) ./standalone.sh
看到
WFLYSRV0026: WildFly Full 26.1.2.Final (WildFly Core 18.1.2.Final) started in ...等日志信息,表示启动成功。 -
后台启动: 在生产环境中,通常使用
nohup让服务器在后台运行。nohup ./standalone.sh > server.log 2>&1 &
-
停止服务器:
# 方法一: 使用 jboss-cli.sh 命令行工具 ./jboss-cli.sh --connect --command=:shutdown # 方法二: 如果是前台运行,直接按 Ctrl+C
4 部署第一个应用
这里我们部署一个简单的 hello.war 包来验证部署是否成功。
-
准备应用: 假设你有一个
hello.war文件。 -
自动部署 (最简单): 将
hello.war文件直接复制到WILDFLY_HOME/standalone/deployments/目录下。cp /path/to/your/hello.war /opt/wildfly/standalone/deployments/
你会看到 WildFly 控制台输出部署日志,文件名后会添加
.deployed后缀,表示部署成功。 -
访问应用: 打开浏览器,访问
http://<你的服务器IP>:8080/hello。 如果看到你的应用页面,说明部署成功!
5 管理控制台 初探
WildFly 提供了一个基于 Web 的管理控制台。
- 访问地址:
http://<你的服务器IP>:9990 - 登录: 使用默认的用户名和密码
admin/admin!。 - 功能: 在控制台中,你可以管理部署项、数据源、子系统、用户等几乎所有服务器配置。
第二部分:核心配置详解
1 目录结构解析
WILDFLY_HOME: WildFly 的根目录。WILDFLY_HOME/bin: 启动和管理脚本。WILDFLY_HOME/standalone: 独立模式。configuration/standalone.xml: 核心配置文件,定义了端口、数据源、虚拟主机、子系统等所有配置。deployments/: 应用部署目录。
WILDFLY_HOME/modules: 模块库,当你需要引入第三方驱动(如 MySQL JDBC Driver)时,需要将驱动包放入此目录并创建模块描述文件。
2 端口配置
默认端口都在 standalone.xml 的 <socket-binding-group> 标签中定义。
| 端口 | 用途 | 配置路径 |
|---|---|---|
| 8080 | HTTP 请求 | <socket-binding name="http" port="8080"/> |
| 8443 | HTTPS 请求 | <socket-binding name="https" port="8443"/> |
| 9990 | 管理控制台 | <socket-binding name="management-http" port="9990"/> |
| 9993 | 管理控制台 (HTTPS) | <socket-binding name="management-https" port="9993"/> |
| 1099 | JNDI RMI 端口 | <socket-binding name="remoting" port="4447"/> (JNDI 通常是 1099, 但新版 WildFly 使用了其他方式) |
修改端口后,重启服务器即可生效。
3 用户与安全管理
默认用户 admin/admin! 只用于开发环境,生产环境必须修改。
-
添加新用户: 使用
add-user.sh脚本,它会引导你创建一个可以用于管理控制台或应用认证的用户。cd /opt/wildfly/bin ./add-user.sh
- 提示
Type of user to add: 选择a(Application User) 用于应用登录,或m(Management User) 用于管理控制台。 realm: 默认是ManagementRealm。username和password: 输入你想要的新用户名和密码。groups: 可以将用户添加到特定组,如guest, caller, role1。
- 提示
-
用户文件: 新用户信息会保存在
WILDFLY_HOME/standalone/configuration/mgmt-users.properties(管理用户) 和application-users.properties(应用用户) 中。
第三部分:部署应用的不同方式
1 部署 WAR/EAR 包
这是最传统的方式,将打包好的 .war 或 .ear 文件放入 deployments 目录,WildFly 会自动检测并部署。
- 部署成功: 文件名后会添加
.deployed。 - 部署失败: 文件名后会添加
.failed,查看该文件内容或服务器日志可知原因。 - 卸载应用: 删除
.deployed文件,或直接删除应用文件。
2 部署目录 (热部署)
WildFly 支持直接部署一个目录,这在开发阶段非常方便,无需反复打包。
- 在
deployments目录下创建一个文件夹,my-app-dir。 - 将你的
WEB-INF文件夹和所有 Web 资源(如.jsp,.html,.css)直接放入my-app-dir中。 - WildFly 会自动识别并部署这个目录。
3 使用管理 CLI 命令部署
在生产环境中,推荐使用命令行工具进行精确部署。
-
连接到服务器:
./jboss-cli.sh --connect
看到
[standalone@localhost:9990 /]提示符表示连接成功。 -
部署命令:
# 部署一个本地文件 deploy /path/to/your/hello.war # 部署并指定一个名称 (部署到服务器上) deploy /path/to/your/hello.war --name=hello-app # 查看所有部署项 deployment list
-
卸载命令:
# 使用部署名称卸载 undeploy hello-app # 或使用路径 undeploy /path/to/your/hello.war
第四部分:集群部署 (高可用)
集群通过运行多个 WildFly 实例(节点)来提供高可用性和可扩展性,当一个节点故障时,其他节点可以接管其工作。
1 集群概念与准备工作
- 会话复制: 确保用户在一个节点登录后,切换到另一个节点时 session 依然有效。
- JGroups: 一个用于集群通信的底层库,节点间通过 JGroups 组播或单播来发现彼此并传递信息。
- 准备工作:
- 至少两台服务器。
- 在每台服务器上安装相同版本的 WildFly。
- 确保所有节点之间网络互通。
- 为所有节点配置相同的管理用户。
2 配置 JGroups 集群通信
我们使用 standalone-ha.xml 配置文件,它已经为高可用做了预配置。
-
编辑节点1的配置 (
node1):cd /opt/wildfly/standalone/configuration cp standalone-ha.xml standalone-ha-node1.xml vim standalone-ha-node1.xml
在
<jgroups>标签内,找到tcp堆栈,修改其bind_addr为本机 IP 地址。<jgroups default-stack="tcp"> <stack name="tcp"> ... <property name="bind_addr">${jboss.node.name:127.0.0.1}</property> ... </stack> </jgroups>修改
<system-properties>中的jboss.node.name。<system-properties> <property name="jboss.node.name" value="node1"/> </system-properties> -
编辑节点2的配置 (
node2): 同样操作,创建standalone-ha-node2.xml,并将jboss.node.name设置为node2,bind_addr设置为node2的 IP。
3 配置 Web 会话复制
- 在
standalone-ha-node1.xml中,找到<web子系统,启用distributable。<subsystem xmlns="urn:jboss:domain:web:4.0" default-virtual-host="default-host" native="false"> <connector name="http" scheme="http" protocol="HTTP/1.1" socket-binding="http"/> <virtual-host name="default-host"/> <session cookie-name="JSESSIONID" session-cookie-http-only="true" session-cookie-secure="false" default-url-encoding="UTF-8" distributable="true"/> <!-- 启用 distributable --> </subsystem>node2的配置文件也需做同样修改。
4 启动集群节点并验证
-
启动节点1:
cd /opt/wildfly/bin ./standalone.sh -c standalone-ha-node1.xml
-
启动节点2:
cd /opt/wildfly/bin ./standalone.sh -c standalone-ha-node2.xml
-
验证集群: 使用管理 CLI 连接到任意一个节点。
./jboss-cli.sh --connect
执行以下命令查看集群成员:
[standalone@localhost:9990 /] /subsystem=datagrid/infinispan/cache-container=web:read-attribute(name=members)
如果看到两个节点的名称(如
node1和node2),说明集群组建成功。 -
测试会话复制: 部署一个可以显示 session ID 的应用(JSP 页面
${pageContext.session.id}),分别访问两个节点的 8080 端口,你会发现 session ID 是相同的,证明会话已被复制。
第五部分:常见问题与故障排查
1 端口被占用
启动时提示 Address already in use。
- 解决:
- 查看哪个进程占用了端口:
netstat -tlnp | grep 8080(Linux) 或netstat -ano | findstr :8080(Windows)。 - 杀死该进程或修改 WildFly 的端口配置。
- 查看哪个进程占用了端口:
2 部署失败
deployments 目录下出现 .failed 文件。
- 解决:
- 查看
.failed文件内容,通常包含详细的错误信息。 - 检查应用包是否完整,
WEB-INF/web.xml是否正确。 - 检查服务器日志
WILDFLY_HOME/standalone/log/server.log。
- 查看
3 如何查看日志
- 实时查看: 使用
tail命令。tail -f /opt/wildfly/standalone/log/server.log
- 日志文件位置:
- 独立模式:
WILDFLY_HOME/standalone/log/server.log - 域模式:
WILDFLY_HOME/domain/servers/<server-name>/log/server.log
- 独立模式:
本教程从基础的安装、部署,到核心配置、集群搭建,全面介绍了 WildFly 的使用,关键点总结如下:
- 版本选择: 优先使用 WildFly。
- 模式选择: 开发和简单应用使用 独立模式;大规模生产环境使用 域模式。
- 部署方式: 开发用 目录部署,生产用 CLI 命令部署。
- 高可用: 通过 集群 和 会话复制 实现。
- 配置中心:
standalone.xml是独立模式的核心,务必熟悉其结构。 - 管理工具: 管理控制台 和 命令行工具 是管理服务器的利器。
希望这份教程能帮助你顺利上手 WildFly!
