目录

  1. 前言:JBoss vs. WildFly
  2. 第一部分:单机环境安装与部署
    • 1 环境准备
    • 2 下载与安装
    • 3 启动与停止服务器
    • 4 部署第一个应用 (WAR包)
    • 5 管理控制台 初探
  3. 第二部分:核心配置详解
    • 1 目录结构解析
    • 2 端口配置
    • 3 用户与安全管理
  4. 第三部分:部署应用的不同方式
    • 1 部署 WAR/EAR 包 (热部署)
    • 2 部署目录 (热部署)
    • 3 使用管理 CLI 命令部署
  5. 第四部分:集群部署 (高可用)
    • 1 集群概念与准备工作
    • 2 配置 JGroups 集群通信
    • 3 配置 Web 会话复制
    • 4 启动集群节点并验证
  6. 第五部分:常见问题与故障排查
    • 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。

jboss安装部署教程
(图片来源网络,侵删)

第一部分:单机环境安装与部署

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 下载与安装

  1. 下载: 假设我们下载 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
  2. 解压: 将下载的 .tar.gz 文件解压到指定目录,/opt

    # 进入 /opt 目录
    cd /opt
    # 解压
    tar -xvzf wildfly-26.1.2.Final.tar.gz
    # 创建一个软链接,方便后续使用和升级
    ln -s wildfly-26.1.2.Final wildfly
  3. 目录结构: 安装完成后,/opt/wildfly 目录就是你的 WildFly 主目录,通常称为 WILDFLY_HOME

    • bin/: 存放启动脚本、管理脚本等。
    • standalone/: 独立模式配置目录。
      • configuration/: 存放服务器配置文件(如 standalone.xml, standalone-ha.xml)。
      • deployments/: 应用部署目录,将应用放在这里,服务器会自动部署。
    • domain/: 域模式配置目录,用于集中管理多个服务器实例。
    • modules/: 存放 WildFly 的模块依赖。

3 启动与停止服务器

WildFly 有两种运行模式:独立模式域模式,我们先学习最常用的独立模式。

  1. 启动服务器:

    # 进入 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 ... 等日志信息,表示启动成功。

  2. 后台启动: 在生产环境中,通常使用 nohup 让服务器在后台运行。

    nohup ./standalone.sh > server.log 2>&1 &
  3. 停止服务器:

    # 方法一: 使用 jboss-cli.sh 命令行工具
    ./jboss-cli.sh --connect --command=:shutdown
    # 方法二: 如果是前台运行,直接按 Ctrl+C

4 部署第一个应用

这里我们部署一个简单的 hello.war 包来验证部署是否成功。

  1. 准备应用: 假设你有一个 hello.war 文件。

  2. 自动部署 (最简单): 将 hello.war 文件直接复制到 WILDFLY_HOME/standalone/deployments/ 目录下。

    cp /path/to/your/hello.war /opt/wildfly/standalone/deployments/

    你会看到 WildFly 控制台输出部署日志,文件名后会添加 .deployed 后缀,表示部署成功。

  3. 访问应用: 打开浏览器,访问 http://<你的服务器IP>:8080/hello。 如果看到你的应用页面,说明部署成功!

5 管理控制台 初探

WildFly 提供了一个基于 Web 的管理控制台。

  1. 访问地址: http://<你的服务器IP>:9990
  2. 登录: 使用默认的用户名和密码 admin / admin!
  3. 功能: 在控制台中,你可以管理部署项、数据源、子系统、用户等几乎所有服务器配置。

第二部分:核心配置详解

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! 只用于开发环境,生产环境必须修改。

  1. 添加新用户: 使用 add-user.sh 脚本,它会引导你创建一个可以用于管理控制台或应用认证的用户。

    cd /opt/wildfly/bin
    ./add-user.sh
    • 提示 Type of user to add: 选择 a (Application User) 用于应用登录,或 m (Management User) 用于管理控制台。
    • realm: 默认是 ManagementRealm
    • usernamepassword: 输入你想要的新用户名和密码。
    • groups: 可以将用户添加到特定组,如 guest, caller, role1
  2. 用户文件: 新用户信息会保存在 WILDFLY_HOME/standalone/configuration/mgmt-users.properties (管理用户) 和 application-users.properties (应用用户) 中。


第三部分:部署应用的不同方式

1 部署 WAR/EAR 包

这是最传统的方式,将打包好的 .war.ear 文件放入 deployments 目录,WildFly 会自动检测并部署。

  • 部署成功: 文件名后会添加 .deployed
  • 部署失败: 文件名后会添加 .failed,查看该文件内容或服务器日志可知原因。
  • 卸载应用: 删除 .deployed 文件,或直接删除应用文件。

2 部署目录 (热部署)

WildFly 支持直接部署一个目录,这在开发阶段非常方便,无需反复打包。

  1. deployments 目录下创建一个文件夹,my-app-dir
  2. 将你的 WEB-INF 文件夹和所有 Web 资源(如 .jsp, .html, .css)直接放入 my-app-dir 中。
  3. WildFly 会自动识别并部署这个目录。

3 使用管理 CLI 命令部署

在生产环境中,推荐使用命令行工具进行精确部署。

  1. 连接到服务器:

    ./jboss-cli.sh --connect

    看到 [standalone@localhost:9990 /] 提示符表示连接成功。

  2. 部署命令:

    # 部署一个本地文件
    deploy /path/to/your/hello.war
    # 部署并指定一个名称 (部署到服务器上)
    deploy /path/to/your/hello.war --name=hello-app
    # 查看所有部署项
    deployment list
  3. 卸载命令:

    # 使用部署名称卸载
    undeploy hello-app
    # 或使用路径
    undeploy /path/to/your/hello.war

第四部分:集群部署 (高可用)

集群通过运行多个 WildFly 实例(节点)来提供高可用性和可扩展性,当一个节点故障时,其他节点可以接管其工作。

1 集群概念与准备工作

  • 会话复制: 确保用户在一个节点登录后,切换到另一个节点时 session 依然有效。
  • JGroups: 一个用于集群通信的底层库,节点间通过 JGroups 组播或单播来发现彼此并传递信息。
  • 准备工作:
    1. 至少两台服务器。
    2. 在每台服务器上安装相同版本的 WildFly。
    3. 确保所有节点之间网络互通。
    4. 为所有节点配置相同的管理用户。

2 配置 JGroups 集群通信

我们使用 standalone-ha.xml 配置文件,它已经为高可用做了预配置。

  1. 编辑节点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. 编辑节点2的配置 (node2): 同样操作,创建 standalone-ha-node2.xml,并将 jboss.node.name 设置为 node2bind_addr 设置为 node2 的 IP。

3 配置 Web 会话复制

  1. 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. 启动节点1:

    cd /opt/wildfly/bin
    ./standalone.sh -c standalone-ha-node1.xml
  2. 启动节点2:

    cd /opt/wildfly/bin
    ./standalone.sh -c standalone-ha-node2.xml
  3. 验证集群: 使用管理 CLI 连接到任意一个节点。

    ./jboss-cli.sh --connect

    执行以下命令查看集群成员:

    [standalone@localhost:9990 /] /subsystem=datagrid/infinispan/cache-container=web:read-attribute(name=members)

    如果看到两个节点的名称(如 node1node2),说明集群组建成功。

  4. 测试会话复制: 部署一个可以显示 session ID 的应用(JSP 页面 ${pageContext.session.id}),分别访问两个节点的 8080 端口,你会发现 session ID 是相同的,证明会话已被复制。


第五部分:常见问题与故障排查

1 端口被占用

启动时提示 Address already in use

  • 解决:
    1. 查看哪个进程占用了端口:netstat -tlnp | grep 8080 (Linux) 或 netstat -ano | findstr :8080 (Windows)。
    2. 杀死该进程或修改 WildFly 的端口配置。

2 部署失败

deployments 目录下出现 .failed 文件。

  • 解决:
    1. 查看 .failed 文件内容,通常包含详细的错误信息。
    2. 检查应用包是否完整,WEB-INF/web.xml 是否正确。
    3. 检查服务器日志 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 的使用,关键点总结如下:

  1. 版本选择: 优先使用 WildFly
  2. 模式选择: 开发和简单应用使用 独立模式;大规模生产环境使用 域模式
  3. 部署方式: 开发用 目录部署,生产用 CLI 命令部署
  4. 高可用: 通过 集群会话复制 实现。
  5. 配置中心: standalone.xml 是独立模式的核心,务必熟悉其结构。
  6. 管理工具: 管理控制台命令行工具 是管理服务器的利器。

希望这份教程能帮助你顺利上手 WildFly!