JBoss是Red Hat(红帽)公司维护的开源企业级Java应用服务器,遵循LGPL许可协议,可免费商用。其核心产品现已更名为 WildFly(原JBoss Application Server),是Red Hat旗下开源企业级Java中间件。截至2026年,WildFly已发布至39版本以上,JBoss EAP(商业版)已发布至8.0版本。

第一部分:JBoss核心架构

一、模块化架构

JBoss/WildFly的核心采用 JBoss Modules 系统,通过模块化架构实现组件的按需加载。每个功能模块(如Servlet容器、EJB实现、JMS服务)以独立JAR包形式存在,运行时仅加载必要模块,显著降低内存占用。

每个模块拥有独立的类路径,通过module.xml定义依赖关系,避免类冲突。

二、子系统层

WildFly将功能划分为多个可插拔的子系统:

子系统功能
Undertow高性能HTTP服务,支持HTTP/2和WebSocket
EJB3远程EJB调用和分布式事务
JPA集成Hibernate作为默认JPA提供者
Elytron统一安全框架,替代旧版安全子系统
Datasources数据库连接池管理

三、两种运行模式

1. 独立模式(Standalone)

单服务运行,适合开发和中小规模部署。配置文件位于standalone/configuration/standalone.xml

2. 域模式(Domain)

集群管理单元,通过Domain Controller统一管控多台主机服务器。域模式下可实现负载均衡、会话复制、故障转移等能力。

四、JBoss EAP与WildFly的关系

版本定位特点
WildFly开源社区版免费、更新频繁、最新特性
JBoss EAP红帽商业版基于WildFly优化、官方技术支持、长期稳定

第二部分:环境准备

一、JDK要求

JBoss/WildFly版本JDK要求
WildFly 39+ / JBoss EAP 8JDK 11 或 JDK 17
WildFly 28-38JDK 11+
JBoss EAP 7.xJDK 8 或 JDK 11

二、下载

  • WildFly(开源版):https://wildfly.org/downloads/
  • JBoss EAP(商业版):需红帽订阅账号,从红帽客户门户下载

第三部分:各操作系统部署详解

一、Linux系统部署

1.1 安装JDK
# CentOS/RHEL
sudo yum install java-11-openjdk-devel

# Ubuntu/Debian
sudo apt update
sudo apt install openjdk-11-jdk

# 验证
java -version
1.2 安装JBoss/WildFly
# 下载并解压
wget https://github.com/wildfly/wildfly/releases/download/39.0.0.Final/wildfly-39.0.0.Final.tar.gz
tar -xzf wildfly-39.0.0.Final.tar.gz
sudo mv wildfly-39.0.0.Final /opt/wildfly

# 创建专用用户(安全建议)
sudo useradd -r -s /bin/false jboss
sudo chown -R jboss:jboss /opt/wildfly
1.3 配置环境变量
# 编辑 /etc/profile 或 ~/.bashrc
export WILDFLY_HOME=/opt/wildfly
export PATH=$PATH:$WILDFLY_HOME/bin
1.4 防火墙配置
# 放行端口(CentOS/RHEL 7+)
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --permanent --add-port=9990/tcp
sudo firewall-cmd --reload

# 或使用iptables
sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 9990 -j ACCEPT
1.5 启动服务器
# 独立模式启动(默认配置)
cd /opt/wildfly/bin
./standalone.sh

# 指定配置文件启动(启用完整功能)
./standalone.sh -c standalone-full.xml

# 绑定到所有网络接口(允许外部访问)
./standalone.sh -b 0.0.0.0 -bmanagement 0.0.0.0

-b参数绑定公共接口,-bmanagement绑定管理接口。

1.6 配置为系统服务

创建systemd服务文件/etc/systemd/system/wildfly.service

[Unit]
Description=WildFly Application Server
After=network.target

[Service]
Type=simple
User=jboss
Group=jboss
Environment=JAVA_HOME=/usr/lib/jvm/java-11-openjdk
Environment=WILDFLY_HOME=/opt/wildfly
ExecStart=/opt/wildfly/bin/standalone.sh -b 0.0.0.0
ExecStop=/opt/wildfly/bin/jboss-cli.sh --connect command=:shutdown
Restart=on-failure

[Install]
WantedBy=multi-user.target

启用服务:

sudo systemctl daemon-reload
sudo systemctl enable wildfly
sudo systemctl start wildfly
1.7 部署项目

方法一:热部署(复制WAR文件)

# 将WAR包复制到部署目录
cp myapp.war /opt/wildfly/standalone/deployments/

JBoss支持热部署,将WAR文件放到deployments目录后会自动部署。

方法二:管理控制台部署

  1. 浏览器访问 http://服务器IP:9990
  2. 首次访问需创建管理员账户:
    /opt/wildfly/bin/add-user.sh
    
  3. 登录后点击「Deployments」→「Add」→ 上传WAR文件

方法三:CLI命令行部署

/opt/wildfly/bin/jboss-cli.sh --connect
deploy /path/to/myapp.war
1.8 部署案例:Linux + MySQL

场景:在CentOS 7上部署Spring Boot应用,连接MySQL数据库。

Step 1:安装MySQL驱动模块

# 下载MySQL JDBC驱动
wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.33/mysql-connector-java-8.0.33.jar

# 创建模块目录
mkdir -p /opt/wildfly/modules/com/mysql/main

# 复制驱动并创建module.xml
cp mysql-connector-java-8.0.33.jar /opt/wildfly/modules/com/mysql/main/

cat > /opt/wildfly/modules/com/mysql/main/module.xml << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="com.mysql">
    <resources>
        <resource-root path="mysql-connector-java-8.0.33.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>
</module>
EOF

Step 2:配置数据源

通过CLI添加数据源:

/opt/wildfly/bin/jboss-cli.sh --connect

data-source add \
  --name=MySQLDS \
  --jndi-name=java:jboss/datasources/MySQLDS \
  --driver-name=mysql \
  --driver-class=com.mysql.cj.jdbc.Driver \
  --connection-url=jdbc:mysql://localhost:3306/mydb \
  --user-name=root \
  --password=password

Step 3:部署应用

cp myapp.war /opt/wildfly/standalone/deployments/
1.9 Linux部署完整示例脚本
#!/bin/bash
# JBoss部署自动化脚本

WILDFLY_HOME=/opt/wildfly
APP_NAME=myapp
WAR_PATH=/tmp/${APP_NAME}.war

# 1. 停止服务
sudo systemctl stop wildfly

# 2. 备份旧版本
if [ -f ${WILDFLY_HOME}/standalone/deployments/${APP_NAME}.war ]; then
    mv ${WILDFLY_HOME}/standalone/deployments/${APP_NAME}.war \
       ${WILDFLY_HOME}/standalone/deployments/${APP_NAME}.war.bak
fi

# 3. 部署新版本
cp ${WAR_PATH} ${WILDFLY_HOME}/standalone/deployments/

# 4. 启动服务
sudo systemctl start wildfly

# 5. 检查部署状态
sleep 10
curl -s http://localhost:8080/${APP_NAME}/health | grep "UP"

二、Windows系统部署

2.1 安装JDK
  1. 下载并安装JDK 11或JDK 17
  2. 设置系统环境变量:
    • JAVA_HOME = C:\Program Files\Java\jdk-11
    • Path中添加%JAVA_HOME%\bin
2.2 安装JBoss/WildFly
  1. 下载WildFly ZIP压缩包
  2. 解压到目标目录,如 C:\wildfly
  3. 设置环境变量:
    • WILDFLY_HOME = C:\wildfly
    • Path中添加%WILDFLY_HOME%\bin
2.3 启动服务器
# 打开命令提示符(以管理员身份运行)
cd C:\wildfly\bin
standalone.bat

启动后访问 http://localhost:8080 验证。

2.4 创建管理员账户
cd C:\wildfly\bin
add-user.bat

按提示输入用户名和密码。

2.5 配置为Windows服务

JBoss EAP提供了service.bat脚本用于安装为Windows服务:

cd C:\wildfly\bin
service.bat install /loglevel INFO

安装后在Windows服务管理控制台(services.msc)中可看到JBossEAP7服务。

2.6 修改端口和绑定地址

编辑C:\wildfly\standalone\configuration\standalone.xml

<!-- 修改端口 -->
<socket-binding-group name="standard-sockets" default-interface="public" 
                       port-offset="${jboss.socket.binding.port-offset:0}">
    <socket-binding name="http" port="${jboss.http.port:8080}"/>
</socket-binding-group>

<!-- 修改绑定地址(允许外部访问) -->
<interfaces>
    <interface name="public">
        <inet-address value="${jboss.bind.address:0.0.0.0}"/>
    </interface>
</interfaces>
2.7 部署项目
# 将WAR包复制到部署目录(自动部署)
copy myapp.war C:\wildfly\standalone\deployments\

浏览器访问 http://localhost:8080/myapp

2.8 Windows部署示例:Eclipse + JBoss

Step 1:在Eclipse中配置JBoss服务器

  • Window → Preferences → Server → Runtime Environments
  • Add → WildFly → 选择安装目录

Step 2:创建Dynamic Web Project

Step 3:右键项目 → Run As → Run on Server → 选择JBoss

Step 4:自动部署到服务器

三、macOS系统部署

3.1 安装JDK
# 使用Homebrew安装
brew install openjdk@11

# 或从Oracle官网下载安装
3.2 安装WildFly
# 下载并解压
curl -O https://github.com/wildfly/wildfly/releases/download/39.0.0.Final/wildfly-39.0.0.Final.tar.gz
tar -xzf wildfly-39.0.0.Final.tar.gz
sudo mv wildfly-39.0.0.Final /opt/wildfly
3.3 配置环境变量

编辑~/.bash_profile~/.zshrc

export WILDFLY_HOME=/opt/wildfly
export PATH=$PATH:$WILDFLY_HOME/bin

生效配置:

source ~/.bash_profile
3.4 启动服务器
cd /opt/wildfly/bin
./standalone.sh

macOS/Linux使用standalone.sh,Windows使用standalone.bat

3.5 部署项目
cp myapp.war /opt/wildfly/standalone/deployments/
3.6 IntelliJ IDEA集成部署
  1. Run → Edit Configurations → 添加 JBoss Server
  2. 配置Application Server路径(指向/opt/wildfly
  3. 选择要部署的Artifact
  4. 点击Run启动并自动部署

四、Docker容器部署

4.1 使用官方镜像
# 拉取WildFly镜像
docker pull quay.io/wildfly/wildfly:latest

# 运行容器
docker run -d -p 8080:8080 -p 9990:9990 --name wildfly quay.io/wildfly/wildfly:latest
4.2 部署应用到容器
# 复制WAR文件到容器
docker cp myapp.war wildfly:/opt/jboss/wildfly/standalone/deployments/

# 或使用挂载卷
docker run -d -p 8080:8080 -p 9990:9990 \
  -v /path/to/myapp.war:/opt/jboss/wildfly/standalone/deployments/myapp.war \
  --name wildfly quay.io/wildfly/wildfly:latest
4.3 使用Bitnami镜像

Bitnami提供了优化过的WildFly镜像:

docker run --name wildfly bitnami/wildfly:latest

部署目录位于/opt/bitnami/wildfly/standalone/

4.4 自定义Dockerfile
FROM quay.io/wildfly/wildfly:latest

# 添加MySQL驱动
ADD mysql-connector-java-8.0.33.jar /opt/jboss/wildfly/modules/com/mysql/main/
ADD module.xml /opt/jboss/wildfly/modules/com/mysql/main/

# 部署应用
ADD myapp.war /opt/jboss/wildfly/standalone/deployments/

# 启动脚本
CMD ["/opt/jboss/wildfly/bin/standalone.sh", "-b", "0.0.0.0", "-bmanagement", "0.0.0.0"]

第四部分:集群部署(域模式)

一、域模式架构

域模式下,一个Domain Controller管理多个Host Controller,每个Host Controller可运行多个Server Instance。

Domain Controller (master)
    └── Host Controller (slave-1)
    │       ├── Server One
    │       └── Server Two
    └── Host Controller (slave-2)
            ├── Server One
            └── Server Two

二、域模式配置步骤

Step 1:配置Domain Controller

编辑domain/configuration/domain.xml,定义服务器组和部署策略。

Step 2:配置Host Controller(Master)

编辑domain/configuration/host.xml

<host name="master" xmlns="urn:jboss:domain:8.0">
    <management>
        <security-realms>
            <security-realm name="ManagementRealm">
                <authentication>
                    <local default-user="$local" skip-group-loading="true"/>
                    <properties path="mgmt-users.properties" relative-to="jboss.domain.config.dir"/>
                </authentication>
            </security-realm>
        </security-realms>
    </management>
    <domain-controller>
        <local/>
    </domain-controller>
    <servers>
        <server name="server-one" group="main-server-group" auto-start="true"/>
        <server name="server-two" group="main-server-group" auto-start="true"/>
    </servers>
</host>

Step 3:配置Host Controller(Slave)

<host name="slave-1" xmlns="urn:jboss:domain:8.0">
    <domain-controller>
        <remote host="${domain.controller.host}" port="9990" security-realm="ManagementRealm"/>
    </domain-controller>
    <servers>
        <server name="server-one" group="main-server-group" auto-start="true"/>
    </servers>
</host>

Step 4:启动域控制器

# Master节点
./domain.sh --host-config=host-master.xml

# Slave节点
./domain.sh --host-config=host-slave.xml -Djboss.domain.master.address=<MASTER_IP>

三、集群高可用配置

使用高可用配置文件启动:

# 独立模式 + HA
./standalone.sh --server-config=standalone-ha.xml

# 完整功能 + HA
./standalone.sh --server-config=standalone-full-ha.xml

集群配置在standalone-ha.xml中定义了JGroups通信协议和Infinispan缓存复制。

第五部分:安全配置(Elytron)

JBoss EAP 8使用Elytron作为统一安全框架。

一、创建安全域

./jboss-cli.sh --connect

/subsystem=elytron/security-domain=MyDomain:add(
    realms=[{realm=ApplicationRealm}],
    default-realm=ApplicationRealm,
    permission-mapper=default-permission-mapper
)

二、配置HTTPS

Step 1:生成密钥库

keytool -genkeypair -alias wildfly -keyalg RSA -keystore wildfly.keystore \
  -validity 365 -storepass password -keypass password \
  -dname "CN=localhost, OU=IT, O=MyOrg, L=City, S=State, C=CN"

Step 2:配置SSL

/subsystem=elytron/key-store=MyKeyStore:add(path=wildfly.keystore, 
    relative-to=jboss.server.config.dir, credential-reference={clear-text=password})

/subsystem=elytron/key-manager=MyKeyManager:add(key-store=MyKeyStore, 
    credential-reference={clear-text=password})

/subsystem=undertow/server=default-server/https-listener=https:add(
    socket-binding=https, ssl-context=MySSLContext)

第六部分:综合部署案例

案例:完整Java EE应用跨平台部署

场景:开发一个包含Servlet、JSP、EJB的Java EE应用,部署到JBoss EAP 8,连接PostgreSQL数据库。

1. 项目结构
myapp/
├── pom.xml
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/example/
│   │   │       ├── servlet/
│   │   │       │   └── HelloServlet.java
│   │   │       └── ejb/
│   │   │           └── HelloService.java
│   │   └── webapp/
│   │       ├── WEB-INF/
│   │       │   └── web.xml
│   │       └── index.jsp
└── target/
    └── myapp.war
2. Maven配置(pom.xml)
<project>
    <groupId>com.example</groupId>
    <artifactId>myapp</artifactId>
    <version>1.0.0</version>
    <packaging>war</packaging>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>jakarta.servlet</groupId>
            <artifactId>jakarta.servlet-api</artifactId>
            <version>6.0.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>jakarta.ejb</groupId>
            <artifactId>jakarta.ejb-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.7.3</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.4.0</version>
            </plugin>
        </plugins>
    </build>
</project>
3. 各操作系统部署步骤对比
操作LinuxWindowsmacOS
安装JDKyum install java-11下载安装包brew install openjdk@11
解压tar -xzf wildfly.tar.gz解压ZIPtar -xzf wildfly.tar.gz
环境变量export WILDFLY_HOME=/opt/wildfly系统变量export WILDFLY_HOME=/opt/wildfly
启动./standalone.shstandalone.bat./standalone.sh
部署cp myapp.war deployments/copy myapp.war deployments\cp myapp.war deployments/
停止Ctrl+Cjboss-cli.sh --connect command=:shutdownCtrl+CCtrl+C
4. 部署验证

部署完成后:

  1. 访问 http://localhost:8080/myapp 查看应用
  2. 访问 http://localhost:9990 进入管理控制台查看部署状态
  3. 查看日志:tail -f /opt/wildfly/standalone/log/server.log
5. 完整部署脚本(Linux)
#!/bin/bash
# 完整部署脚本

set -e

WILDFLY_HOME=/opt/wildfly
APP_NAME=myapp
WAR_FILE=target/${APP_NAME}.war

echo "=== 1. 构建应用 ==="
mvn clean package

echo "=== 2. 停止服务器 ==="
${WILDFLY_HOME}/bin/jboss-cli.sh --connect command=:shutdown || true

echo "=== 3. 部署应用 ==="
cp ${WAR_FILE} ${WILDFLY_HOME}/standalone/deployments/

echo "=== 4. 启动服务器 ==="
${WILDFLY_HOME}/bin/standalone.sh -b 0.0.0.0 &

echo "=== 5. 等待启动 ==="
sleep 15

echo "=== 6. 验证部署 ==="
curl -s http://localhost:8080/${APP_NAME} | grep "Hello"

echo "=== 部署完成 ==="

第七部分:常用命令速查

启动与停止

操作Linux/macOSWindows
独立模式启动./standalone.shstandalone.bat
指定配置启动./standalone.sh -c standalone-full.xmlstandalone.bat -c standalone-full.xml
绑定所有IP./standalone.sh -b 0.0.0.0standalone.bat -b 0.0.0.0
域模式启动./domain.shdomain.bat
停止服务./jboss-cli.sh --connect command=:shutdownjboss-cli.bat --connect command=:shutdown

部署命令

操作命令
CLI连接./jboss-cli.sh --connect
部署WARdeploy /path/to/app.war
取消部署undeploy app.war
查看部署ls /deployment

管理控制台

  • 地址:http://localhost:9990
  • 首次登录需创建管理员:./add-user.sh(Linux/macOS)或add-user.bat(Windows)

第八部分:常见问题排查

1. 端口被占用

# Linux/macOS
netstat -tlnp | grep 8080
lsof -i :8080

# Windows
netstat -ano | findstr 8080

修改端口:编辑standalone.xml中的<socket-binding name="http" port="8080"/>

2. 无法外部访问

确保:

  • 启动时使用-b 0.0.0.0参数
  • 防火墙放行8080和9990端口
  • 云服务器安全组放行相应端口

3. 内存不足

调整JVM参数,编辑standalone.conf(Linux/macOS)或standalone.conf.bat(Windows):

JAVA_OPTS="-Xms512m -Xmx2048m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"

4. 部署失败

  • 检查日志:standalone/log/server.log
  • 确认WAR包格式正确
  • 确认所有依赖已包含

总结

JBoss/WildFly作为企业级Java应用服务器,凭借其模块化架构完整的Jakarta EE支持灵活的部署方式,广泛应用于中大型企业核心系统。

操作系统启动脚本部署目录特点
Linuxstandalone.sh/opt/wildfly/standalone/deployments/生产推荐,systemd服务管理
Windowsstandalone.batC:\wildfly\standalone\deployments\开发便利,Windows服务支持
macOSstandalone.sh/opt/wildfly/standalone/deployments/开发测试
Dockerdocker run/opt/jboss/wildfly/standalone/deployments/云原生部署

选择部署方式时需综合考虑环境类型(开发/测试/生产)团队技术栈运维能力。Linux + systemd服务是生产环境的最优选择,Docker容器化则更适合云原生和微服务架构。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐