Instalar WildFly Java Application Server con Nginx Reverse Proxy en Rocky Linux 8

WildFly es un servidor de aplicaciones de código abierto y multiplataforma desarrollado por RedHat. Está escrito en Java y se utiliza para desarrollar aplicaciones Java. Es sencillo, flexible, ligero y se basa en subsistemas conectables que pueden añadirse o eliminarse según tus necesidades. Viene con un panel de control sencillo y fácil de usar, y su objetivo es proporcionar a los usuarios un entorno de ejecución Java rápido y estable.

En este tutorial, te mostraremos cómo instalar Wildfly con Nginx como proxy inverso en Rocky Linux 8. Los mismos pasos funcionarán también en AlmaLinux 8 y CentOS 8.

Requisitos previos

  • Un servidor que ejecute Rocky Linux 8 / AlmaLinux 8 o centOS 8.
  • Una contraseña de root está configurado el servidor.

Instalar Java

Wildfly es una aplicación basada en Java, por lo que Java debe estar instalado en tu servidor. Si no está instalado, puedes instalarlo con el siguiente comando:

dnf install java-11-openjdk-devel -y

Después de instalar Java, puedes verificar la versión instalada de Java con el siguiente comando:

java --version

Deberías obtener la siguiente salida:

openjdk 11.0.8 2020-07-14 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.8+10-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.8+10-LTS, mixed mode, sharing)

Instalar Wildfly

Antes de instalar Wildfly, deberás crear un usuario y un grupo independientes para ejecutar Wildfly. Puedes crearlos con el siguiente comando:

groupadd --system wildfly
useradd -s /sbin/nologin --system -d /opt/wildfly -g wildfly wildfly

A continuación, tendrás que descargar la última versión de Wildfly desde su sitio web oficial. En el momento de escribir este tutorial, la última versión disponible de Wildfly es la 20.0.1. Puedes descargarla con el siguiente comando:

wget https://download.jboss.org/wildfly/20.0.1.Final/wildfly-20.0.1.Final.tar.gz

Una vez finalizada la descarga, extrae el archivo descargado con el siguiente comando:

tar -xvzf /root/wildfly-20.0.1.Final.tar.gz

A continuación, copia el directorio extraído en /opt con el siguiente comando:

mv wildfly-20.0.1.Final /opt/wildfly

A continuación, crea un directorio para almacenar los archivos de configuración de Wildfly:

mkdir /etc/wildfly

A continuación, copia todos los archivos necesarios en la ubicación deseada con el siguiente comando:

cp /opt/wildfly/docs/contrib/scripts/systemd/wildfly.conf /etc/wildfly/
cp /opt/wildfly/docs/contrib/scripts/systemd/wildfly.service /etc/systemd/system/
cp /opt/wildfly/docs/contrib/scripts/systemd/launch.sh /opt/wildfly/bin/

A continuación, otorga la propiedad y los permisos adecuados al directorio y a los archivos de wildfly con el siguiente comando:

chmod +x /opt/wildfly/bin/launch.sh
chown -R wildfly:wildfly /opt/wildfly
chmod -R +x /opt/wildfly/

A continuación, recarga el demonio systemd con el siguiente comando:

systemctl daemon-reload

A continuación, inicia el servicio Wildfly y habilítalo para que se inicie al arrancar con el siguiente comando:

systemctl start wildfly
systemctl enable wildfly

Ahora puedes comprobar el estado del servicio Wildfly con el siguiente comando:

systemctl status wildfly

Deberías obtener la siguiente salida:

? wildfly.service - The WildFly Application Server
   Loaded: loaded (/etc/systemd/system/wildfly.service; disabled; vendor preset: disabled)
   Active: active (running) since Sun 2020-09-13 05:57:22 EDT; 16s ago
 Main PID: 31834 (launch.sh)
    Tasks: 123 (limit: 12527)
   Memory: 304.1M
   CGroup: /system.slice/wildfly.service
           ??31834 /bin/bash /opt/wildfly/bin/launch.sh standalone standalone.xml 0.0.0.0
           ??31835 /bin/sh /opt/wildfly/bin/standalone.sh -c standalone.xml -b 0.0.0.0
           ??31925 java -D[Standalone] -server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=tru>

Sep 13 05:57:22 centos8 systemd[1]: Started The WildFly Application Server.

En este punto, Wildfly está instalado e iniciado. Por defecto, el servidor de aplicaciones Wildfly está a la escucha en el puerto 8080. Puedes comprobarlo con el siguiente comando:

ss -tunelp | grep 8080

Deberías obtener la siguiente salida:

tcp    LISTEN   0        128               0.0.0.0:8080           0.0.0.0:*      users:(("java",pid=31925,fd=478)) uid:989 ino:59014 sk:9

La consola de administración de Wildfly está escuchando en el puerto 9990. Puedes comprobarlo con el siguiente comando:

ss -tunelp | grep 9990

Deberías obtener la siguiente salida:

tcp    LISTEN   0        50              127.0.0.1:9990           0.0.0.0:*      users:(("java",pid=31925,fd=138)) uid:989 ino:59017 sk:7

Añadir usuario de administración de Wildfly

Para acceder a la consola de administración de WildFly, deberás crear un usuario administrador para Wildfly. Puedes crearlo con el siguiente comando:

/opt/wildfly/bin/add-user.sh

Se te pedirá que elijas el tipo de usuario que deseas añadir, como se muestra a continuación:

What type of user do you wish to add? 
 a) Management User (mgmt-users.properties) 
 b) Application User (application-users.properties)
(a): a           

Escribe a para usuario de administración y pulsa Intro. Deberías ver la siguiente salida:

Enter the details of the new user to add.
Using realm 'ManagementRealm' as discovered from the existing property files.
Username : wildflyadmin

Escribe el nombre de usuario que desees y pulsa Intro. Deberías ver la siguiente salida:

Password recommendations are listed below. To modify these restrictions edit the add-user.properties configuration file.
 - The password should be different from the username
 - The password should not be one of the following restricted values {root, admin, administrator}
 - The password should contain at least 8 characters, 1 alphabetic character(s), 1 digit(s), 1 non-alphanumeric symbol(s)
Password : 
Re-enter Password : 

Introduce tu contraseña y pulsa Intro. Deberías ver el siguiente mensaje:

What groups do you want this user to belong to? (Please enter a comma separated list, or leave blank for none)[  ]: 
About to add user 'wildflyadmin' for realm 'ManagementRealm'
Is this correct yes/no? yes
Added user 'wildflyadmin' to file '/opt/wildfly/standalone/configuration/mgmt-users.properties'
Added user 'wildflyadmin' to file '/opt/wildfly/domain/configuration/mgmt-users.properties'
Added user 'wildflyadmin' with groups  to file '/opt/wildfly/standalone/configuration/mgmt-groups.properties'
Added user 'wildflyadmin' with groups  to file '/opt/wildfly/domain/configuration/mgmt-groups.properties'
Is this new user going to be used for one AS process to connect to another AS process? 
e.g. for a slave host controller connecting to the master or for a Remoting connection for server to server EJB calls.
yes/no? yes
To represent the user add the following to the server-identities definition 

En este punto, se ha creado tu usuario de gestión de Wildfly. Puedes continuar con el siguiente paso.

Configurar el cortafuegos y SELinux

Por defecto, SELinux está activado en Rocky Linux 8. Así que tendrás que configurar SELinux para Wildfly. Puedes hacerlo con el siguiente comando:

semanage fcontext -a -t bin_t "/opt/wildfly/bin(/.*)?"
restorecon -Rv /opt/wildfly/bin/
setsebool -P httpd_can_network_connect 1

A continuación, tendrás que permitir los puertos 8080, 9990 y 80 a través del cortafuegos. Puedes hacerlo con el siguiente comando

firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --permanent --add-port=9990/tcp
firewall-cmd --permanent --add-port=80/tcp

A continuación, recarga el cortafuegos para aplicar los cambios.

firewall-cmd --reload

Una vez que hayas terminado, puedes pasar al siguiente paso.

Accede a la consola de administración de Wildfly

Por defecto, la consola de administración de Wildfly sólo es accesible desde localhost. Tendrás que editar /opt/wildfly/bin/launch.sh y realizar algunos cambios para el acceso externo.

nano /opt/wildfly/bin/launch.sh

Busca la siguiente línea:

    $WILDFLY_HOME/bin/standalone.sh -c $2 -b $3

Y, sustitúyela por la siguiente línea:

    $WILDFLY_HOME/bin/standalone.sh -c $2 -b $3 -bmanagement=0.0.0.0

Guarda y cierra el archivo y reinicia el servicio Wildfly para aplicar los cambios.

systemctl restart wildfly

Ahora, abre tu navegador web y accede a la consola de administración de Wildfly utilizando la URL http://your-server-ip:9990. Se te pedirá que proporciones el nombre de usuario y la contraseña como se muestra a continuación:

WildFly

Proporciona tu nombre de usuario y contraseña de administrador de Wildfly y haz clic en el botón Iniciar sesión. Una vez iniciada la sesión, deberías ver el panel de administración de Wildfly en la siguiente pantalla:

Panel de control WildFly

Configurar Nginx como proxy inverso para Wildfly

Por defecto, la aplicación Wildfly es accesible en el puerto 8080. Así que se recomienda configurar Nginx como proxy inverso para que se pueda acceder utilizando el puerto 80.

En primer lugar, instala el servidor web Nginx con el siguiente comando;

dnf install nginx -y

Una vez instalado, crea un nuevo archivo de configuración de Wildfly con el siguiente comando:

nano /etc/nginx/conf.d/wildfly.conf

Añade las siguientes líneas:

upstream wildfly {
  server 127.0.0.1:8080 weight=100 max_fails=5 fail_timeout=5;
}

server {
  listen          80;
  server_name     your-server-ip;

  location / {
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://wildfly/;
  }
}

Guarda y cierra el archivo y luego comprueba si Nginx tiene algún error de configuración con el siguiente comando:

nginx -t

Si todo va bien deberías obtener la siguiente salida:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

A continuación, inicia el Nginx y habilítalo para que se inicie al reiniciar el sistema con el siguiente comando:

systemctl start nginx
systemctl enable nginx

También puedes comprobar el estado del servicio Nginx con el siguiente comando:

systemctl status nginx

Deberías obtener la siguiente salida:

? nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
  Drop-In: /usr/lib/systemd/system/nginx.service.d
           ??php-fpm.conf
   Active: active (running) since Sun 2020-09-13 06:03:37 EDT; 5s ago
  Process: 1775 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 1773 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
  Process: 1771 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
 Main PID: 1776 (nginx)
    Tasks: 3 (limit: 12527)
   Memory: 5.4M
   CGroup: /system.slice/nginx.service
           ??1776 nginx: master process /usr/sbin/nginx
           ??1777 nginx: worker process
           ??1778 nginx: worker process

Sep 13 06:03:37 centos8 systemd[1]: Stopped The nginx HTTP and reverse proxy server.
Sep 13 06:03:37 centos8 systemd[1]: Starting The nginx HTTP and reverse proxy server...
Sep 13 06:03:37 centos8 nginx[1773]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Sep 13 06:03:37 centos8 nginx[1773]: nginx: configuration file /etc/nginx/nginx.conf test is successful
Sep 13 06:03:37 centos8 systemd[1]: Started The nginx HTTP and reverse proxy server.

En este punto, Nginx está instalado y configurado para servir tu aplicación Wildfly. Ahora puedes acceder a la aplicación Wildfly utilizando la URL http://your-server-ip. Deberías ver la siguiente pantalla:

Bienvenido a WildFly

Conclusión

En esta guía, hemos aprendido a instalar Wildfly y habilitar el acceso remoto en Rocky Linux 8. También hemos configurado Nginx como proxy inverso para acceder a Wildfly a través del puerto 80. Ahora, puedes empezar a crear la aplicación Java y gestionarla desde la consola de administración de Widlfly.


Scroll al inicio