Tomcat 10.x: Instalacción vía container en cPanel sobre Almalinux

Las versiones nuevas de Sistemas Operativos basados en Linux, como por ejemplo Almalinux, permiten sólo la instalación de Tomcat en versiones superiores a las 10.0; lo cual trae consigo un cambio en el proceso de instalación y en el de despliegue de aplicaciones en servidores con cPanel.

Es necesario preparar el servidor cPanel con Almalinux para usar Tomcat 10.x.
Tomcat funciona gracias al administrador de contenedores llamado PODMAN. Tenemos que activar este contenedor a nivel servidor con credenciales root.

Cabe destacar que, para realizar este proceso, necesita no solo tener acceso como usuario root y como usuario cPanel al servidor; sino también poseer conocimientos, al menos básicos, para conectar vía SSH al servidor y correr comandos en consola.

Comenzamos

Nos conectamos vía SSH al servidor con usuario root.
Primero corremos estos comandos para instalar Podman:

dnf install -y ea-podman-repo

dnf install -y ea-podman

Luego es necesario instalar el paquete de Tomcat en el servidor para que esté disponible:

dnf install -y ea-tomcat101

Con estos pasos quedaría listo el servidor para poder usar el contenedor a nivel usuario de cPanel, para luego poder instalar Tomcat en cada cuenta que lo necesite.
El usuario de cPanel debe tener activado SSH.

Ya conectado vía SSH como usuario de cPanel, deberemos correr el siguiente comando para instalar ea-tomcat como Container:

/usr/local/cpanel/scripts/ea-podman install ea-tomcat101

Esto creará el directorio de aplicaciones para la utilización de Tomcat en la siguiente ruta:

/home/usuarioCpanel/ea-podman.d/nombre-de-container

Donde “usuarioCpanel” es el usuario de cPanel de la cuenta donde corrimos el comando; y “nombre-de-container” es el nombre del contenedor de Tomcat. Este nombre lo crea el comando por defecto.

Corriendo alguno de los siguientes comandos se podrá obtener el nombre del container:

/usr/local/cpanel/scripts/ea-podman containers

/usr/local/cpanel/scripts/ea-podman registered

/usr/local/cpanel/scripts/ea-podman running

Por poner un ejemplo, un contenedor se puede llamar:

ea-tomcat101.miusuariocpanel.01

Deberemos usar ese nombre para poder correr cualquier comando de Tomcat dentro del usuario de cPanel.

Hay que detallar que en la instalación de Tomcat se guarda en:

/home/usuarioCpanel/ea-podman.d/nombre-de-container

Dentro de dicha instalación, las carpetas más importantes o a tener en cuenta son:

1) /home/usuarioCpanel/ea-podman.d/nombre-de-container/conf

En esta carpeta se encuentran los archivos de configuración de Tomcat; donde hay que destacar el archivo server.xml

2) /home/usuarioCpanel/ea-podman.d/nombre-de-container/logs

Aquí tenemos los registros o logs de la aplicación.

3) /home/usuarioCpanel/ea-podman.d/nombre-de-container/webapss/ROOT

Aquí se suben los archivos de la aplicación JAVA.

Podemos probar que Tomcat funciona realizando los siguientes pasos:

  • Creamos en /home/usuarioCpanel/ea-podman.d/nombre-de-container/webapss/ROOT un archivo llamado index.jsp que tenga el siguiente contenido:
<html><body>
<% out.println("Hello world! -- From JSP"); %>
</body></html>
  • Luego, debemos agregar este código en /home/usuarioCpanel/ea-podman.d/nombre-de-container/conf/server.xml

Como muestra la imagen, en la linea mencionada debajo:

<Host name="localhost" appBase="webapps" unpackWARs="false" autoDeploy="false" deployOnStartup="false" deployXML="false">

Debemos agregar este Context:

<Context path="" docBase="ROOT">
 <!-- Default set of monitored resources -->
 <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

Luego debemos reiniciar el container de Tomcat:

/usr/local/cpanel/scripts/ea-podman restart nombre-de-container

Ahora, es importante saber que puertos fueron asignados al container de Tomcat instalado.
Podemos ver esto corriendo:

/usr/local/cpanel/scripts/ea-podman running

El primer puerto es el puerto HTTP y el segundo puerto es el AJP. Cada container de Tomcat instalado asignará distintos puertos.

En este punto, deberíamos poder ver el contenido del index.jsp que subimos escribiendo esta dirección web en el navegador:

IPservidor:PuertoTomcatHTTP/index.jsp

Por ejemplo: http://10.11.12.13:10000/index.jsp

Si podemos visualizar de manera correcta el archivo index.jsp que pusimos como prueba, implica que Tomcat está bien instalado y configurado hasta este punto.

Ahora procederemos con unas modificaciones para poder visualizar aplicaciones JAVA desde direcciones web normales; como si se usara Apache.
Vamos a tener que loguearnos ahora al servidor nuevamente como usuario root para proceder con estos pasos.

Deberemos crear estos dos directorios, donde /user/domain debe reemplazarse por el usuario cPanel y su dominio.

mkdir -p /etc/apache2/conf.d/userdata/std/2_4/user/domain/
mkdir -p /etc/apache2/conf.d/userdata/ssl/2_4/user/domain/

Luego debemos crear el archivo custom.conf en el primer directorio creado:

nano /etc/apache2/conf.d/userdata/std/2_4/user/domain/custom.conf

El comando nano o vi crean el archivo sin necesidad de usar otro comando para crear archivos en SSH; como lo era touch.

En este archivo debemos agregar el siguiente proxy, donde se usa el segundo puerto que nos da como resultado al correr el comando:

/usr/local/cpanel/scripts/ea-podman running

En este ejemplo, el comando da como resultado dos puertos: 10000 y 10001.
El puerto 10001 es el que se usa en el proxy para utilizar AJP.

El archivo custom.conf debería tener el siguiente contenido:

<IfModule proxy_ajp_module>
    ProxyPassMatch "/.well-known/(.*)" "!"
    ProxyPassMatch "/(.*).jsp" "ajp://localhost:10001"
    ProxyPassMatch "/servlets/(.*)" "ajp://localhost:10001"
</IfModule>

(Recuerde que el puerto 10001 es un ejemplo, el resultado en su instalación puede ser otro).

Luego, creamos un symlink desde este archivo custom.conf desde la ruta /etc/apache2/conf.d/userdata/std/2_4/user/domain/ a la ruta /etc/apache2/conf.d/userdata/ssl/2_4/user/domain/. Recordar reemplazar /user/domain por el usuario cpanel y su dominio.

ln -s /etc/apache2/conf.d/userdata/std/2_4/user/domain/custom.conf /etc/apache2/conf.d/userdata/ssl/2_4/user/domain/custom.conf

Hecho esto, debemos recompilar el archivo httpd.conf corriendo el siguiente comando:

/usr/local/cpanel/scripts/rebuildhttpdconf

Este proceso no debería arrojar ningún error. Si se presenta un error, entonces existe algún mal tipeo o copiamos un espacio en blanco en el archivo custom.conf.

Por último, reiniciamos Apache:

service httpd restart

Deberíamos poder ver el index.jsp usando el dominio normal:

https://dominio/index.jsp

Algunos comandos útiles

Estos comandos mostrarán el Status, iniciarán, reiniciarán o detendrán el container de Tomcat:

/usr/local/cpanel/scripts/ea-podman status nombre-de-container
/usr/local/cpanel/scripts/ea-podman start nombre-de-container
/usr/local/cpanel/scripts/ea-podman restart nombre-de-container
/usr/local/cpanel/scripts/ea-podman stop nombre-de-container

Como modificar variables de Tomcat

Para realizar estos cambios es necesario conectar a SSH como usuario de root.
Se puede hacer este proceso como usuario de cPanel corriendo este comando:

/usr/local/cpanel/scripts/ea-podman bash nombre-de-container

Es necesario usar nano, vi o vim para editar el archivo.
Accedemos a la ruta /user/local/tomcat/bin:

cd /user/local/tomcat/bin

Ahora corremos el editor elegido para editar el archivo catalina.sh:

nano catalina.sh

Agregar la siguiente linea debajo del cuadro comentado:

CATALINA_OPTS=”-Xms512m -Xmx1024m”

La siguiente línea agregada significa que la aplicación tiene un mínimo de memoria de 512MB y un máximo de memoria de 1GB.

Luego, de grabar el cambio en el archivo catalina.sh, salir del modo root temporal con:

exit

Ahora reiniciamos el container asegurándonos que estamos nuevamente como usuario cpanel:

/usr/local/cpanel/scripts/ea-podman restart nombre-de-container

Procedemos a controlar el estado de Tomcat con el comando:

/usr/local/cpanel/scripts/ea-podman status nombre-de-container

Con esto corroboramos que luego de editar el archivo catalina.sh Tomcat está funcionando correctamente.

Fuente:

https://docs.cpanel.net/ea4/containers/tomcat-via-containers/

https://docs.cpanel.net/ea4/containers/easyapache-4-containers/#almalinux-and-rocky-linux