AWS EC2 Ubuntu 实例启动了 WildFly(Java / Jakarta EE 服务器),但似乎无法通过浏览器访问

AWS EC2 Ubuntu 实例启动了 WildFly(Java / Jakarta EE 服务器),但似乎无法通过浏览器访问

我正在尝试为 JBoss WildFly 31.0.0.Final 设置 AWS,以启动并运行演示 Web 应用程序。因此,我找到了本教程:

https://kamalmeet.com/cloud-computing/amazon-ec2-step-by-step-guide-to-setup-a-java-application/

我创建了一个 Ubuntu 实例,并将密钥对设置为只读,并手动更改了本地 Windows 11 计算机上 PEM 文件的一些属性。然后,我使用 SSH shell 以 AWS 默认用户的身份连接到我的 Ubuntu 实例ubuntu

我最终得到:


在此处输入图片描述


我知道发布这个截图可能不是最明智的做法,但为了这个问题,一旦问题解决,我会重复整个过程......

因此,我基本上复制粘贴了教程中列出的命令,并做了一些“小”调整,例如apt upgrade安装 Java 17 + JDK 17:

sudo apt update
sudo apt upgrade

sudo apt install openjdk-17-jdk openjdk-17-jre

我在此发表java -version言论:

openjdk version "17.0.9" 2023-10-17
OpenJDK Runtime Environment (build 17.0.9+9-Ubuntu-122.04)
OpenJDK 64-Bit Server VM (build 17.0.9+9-Ubuntu-122.04, mixed mode, sharing)

现在添加用户和组wildfly

sudo groupadd -r wildfly
sudo useradd -r -g wildfly -d /opt/wildfly -s /sbin/nologin wildfly

获取最新的 WildFly,解压缩/解压它,将其放入/opt/并创建一个符号链接/opt/wildfly/以指向实际目录。

wget https://github.com/wildfly/wildfly/releases/download/31.0.0.Final/wildfly-31.0.0.Final.tar.gz -P /tmp
sudo tar xf /tmp/wildfly-31.0.0.Final.tar.gz -C /opt/
sudo ln -s /opt/wildfly-31.0.0.Final /opt/wildfly
sudo chown -RH wildfly: /opt/wildfly

现在创建一个放置 WildFly 配置的目录wildfly.conf

sudo mkdir -p /etc/wildfly

sudo cp /opt/wildfly/docs/contrib/scripts/systemd/wildfly.conf /etc/wildfly/
sudo nano /etc/wildfly/wildfly.conf

wildfly.conf您在本地机器上进行开发时从未需要甚至注意到的文件如下所示:

# The configuration you want to run
WILDFLY_CONFIG=standalone.xml

# The mode you want to run
WILDFLY_MODE=standalone

# The address to bind to
WILDFLY_BIND=0.0.0.0

我不知道该在这里编辑什么。我保留原样,使其被standalone.xml使用。绑定地址:IIRC0.0.0.0是广播地址,因此 WildFly 接受来自世界任何地方的请求(??)。

现在将文件复制launch.sh到 WildFlybin目录并使*.sh那里的所有脚本可执行:

sudo cp /opt/wildfly/docs/contrib/scripts/systemd/launch.sh /opt/wildfly/bin/
sudo sh -c "chmod +x /opt/wildfly/bin/*.sh"

该文件launch.sh如下所示:

if [ "x$WILDFLY_HOME" = "x" ]; then
    WILDFLY_HOME="/opt/wildfly"
fi

if [[ "$1" == "domain" ]]; then
    $WILDFLY_HOME/bin/domain.sh -c $2 -b $3
else
    $WILDFLY_HOME/bin/standalone.sh -c $2 -b $3
fi

WildFly 贡献脚本基本上会查找WILDFLY_HOME环境变量,如果未设置,则假定/opt/wildfly为 home,从而导致在/opt/wildfly/bin/standalone.sh设置时执行launch.sh

现在配置启动器(注意,我对 Ubuntu 有绝对基本的了解)。据我所知,/etc/systemd/system/Ubuntu 中的目录是一种更现代的方法,用于管理服务和会话(以摆脱相当过时的init.d东西,据我所知)。因此,我们将另一个 WildFly contrib 脚本复制到/etc/systemd/system/

sudo cp /opt/wildfly/docs/contrib/scripts/systemd/wildfly.service /etc/systemd/system/

看起来wildfly.service像这样:

[Unit]
Description=The WildFly Application Server
After=syslog.target network.target
Before=httpd.service

[Service]
Environment=LAUNCH_JBOSS_IN_BACKGROUND=1
EnvironmentFile=-/etc/wildfly/wildfly.conf
User=wildfly
LimitNOFILE=102642
PIDFile=/run/wildfly/wildfly.pid
ExecStart=/opt/wildfly/bin/launch.sh $WILDFLY_MODE $WILDFLY_CONFIG $WILDFLY_BIND
StandardOutput=null

[Install]
WantedBy=multi-user.target

所以在这里您可以看到这个服务文件从中获取配置/etc/wildfly/wildfly.conf并且它实际执行/opt/wildfly/bin/launch.sh(这是其他尚未设置的环境变量出现的地方)。

下一个命令似乎告诉 Ubuntu 重新加载服务配置(守护进程)并启动 + 启用 JBoss WildFly:

sudo systemctl daemon-reload
sudo systemctl start wildfly
sudo systemctl enable wildfly

发出最终判决书sudo systemctl status wildfly将产生:

ubuntu@ip-172-31-19-16:~$ sudo systemctl daemon-reload
ubuntu@ip-172-31-19-16:~$ sudo systemctl start wildfly
ubuntu@ip-172-31-19-16:~$ sudo systemctl enable wildfly
ubuntu@ip-172-31-19-16:~$ sudo systemctl status wildfly
● wildfly.service - The WildFly Application Server
     Loaded: loaded (/etc/systemd/system/wildfly.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2024-02-05 10:19:39 UTC; 16s ago
   Main PID: 22971 (launch.sh)
      Tasks: 127 (limit: 1121)
     Memory: 386.1M
        CPU: 15.964s
     CGroup: /system.slice/wildfly.service
             ├─22971 /bin/bash /opt/wildfly/bin/launch.sh standalone standalone.xml 0.0.0.0
             ├─22972 /bin/sh /opt/wildfly/bin/standalone.sh -c standalone.xml -b 0.0.0.0
             └─23093 java "-D[Standalone]" "-Djdk.serialFilter=maxbytes=10485760;maxdepth=128;maxarray=100000;maxrefs=300000" -Xms64m -Xmx512m -XX:Metaspac>

最后一条命令是:

sudo ufw allow 8080/tcp

它被称为“不复杂的防火墙”,似乎安装在大多数 Ubuntu 和 Debian 系统上。它显然向外界开放了 8080 端口。

问题:

无论我做什么,打开浏览器访问给定的公共 IP + 端口,我都无法访问刚刚设置的 WildFly:

在此处输入图片描述

上述错误信息的意思是“连接已超时”。

那么,我在这里做错了什么?AWS 是否从外部阻止了端口 8080?是否完全不允许使用 HTTP?

相关内容