Cómo instalar Apache Tomcat con Nginx Reverse Proxy en Ubuntu 22.04

Apache Tomcat es un servidor web Java de código abierto y un contenedor de Servlets utilizado para alojar aplicaciones web escritas en Java. Es la primera opción de los desarrolladores web para construir y mantener sitios web dinámicos y aplicaciones basadas en la plataforma de software Java. Es un proyecto de código abierto desarrollado por la Apache Software Foundation. Tomcat permite a un servidor web manejar contenido web dinámico basado en Java.

Este tutorial te mostrará cómo instalar Apache Tomcat en Ubuntu 22.04.

Requisitos previos

  • Un servidor que ejecute Ubuntu 22.04.
  • Un nombre de dominio válido apuntado con la IP de tu servidor.
  • Una contraseña de root configurada en el servidor.

Instalar Java JDK

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

apt install default-jdk -y

Una vez instalado Java, puedes verificar la versión de Java utilizando el siguiente comando:

java -version

Obtendrás la siguiente salida:

openjdk version "11.0.15" 2022-04-19
OpenJDK Runtime Environment (build 11.0.15+10-Ubuntu-0ubuntu0.22.04.1)
OpenJDK 64-Bit Server VM (build 11.0.15+10-Ubuntu-0ubuntu0.22.04.1, mixed mode, sharing)

Instalar Apache Tomcat en Ubuntu 22.04

En primer lugar, es una buena idea ejecutar Tomcat como un usuario independiente. Puedes crear un usuario Tomcat con el siguiente comando:

useradd -m -d /opt/tomcat -U -s /bin/false tomcat

A continuación, descarga la última versión de Apache Tomcat con el siguiente comando:

wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.20/bin/apache-tomcat-10.0.20.tar.gz

Una vez descargado Apache Tomcat, extrae el archivo descargado dentro del directorio /opt:

tar xzvf apache-tomcat-10*tar.gz -C /opt/tomcat --strip-components=1

A continuación, establece la propiedad y el permiso adecuados para el directorio Tomcat:

chown -R tomcat:tomcat /opt/tomcat/ 
chmod -R u+x /opt/tomcat/bin

Una vez que hayas terminado, puedes continuar con el siguiente paso.

Crear usuario administrativo de Tomcat

Por defecto, se puede acceder a Tomcat sin ningún tipo de autenticación. Así que se recomienda habilitar la autenticación y crear un usuario administrativo para Tomcat. Puedes añadirlo editando el archivo de configuración de usuarios de Tomcat:

nano /opt/tomcat/conf/tomcat-users.xml

Añade las siguientes líneas encima de la línea </tomcat-users>:

<role rolename="admin-gui" />
<user username="admin" password="yourpassword" roles="manager-gui,admin-gui" />

Guarda y cierra el archivo cuando hayas terminado.

Habilitar el Acceso Remoto a Tomcat

Por defecto, Tomcat está configurado para acceder sólo desde el host local. Por tanto, se recomienda habilitar el acceso remoto a Tomcat para gestionar Tomcat desde el host remoto.

Para habilitar la aplicación de gestión desde un host remoto, edita el siguiente archivo:

nano /opt/tomcat/webapps/manager/META-INF/context.xml

Elimina la siguiente línea:

  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />

Para habilitar la app gestor de host desde un host remoto, edita el siguiente archivo:

nano /opt/tomcat/webapps/host-manager/META-INF/context.xml

Elimina la línea siguiente:

  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />

Guarda y cierra el archivo cuando hayas terminado.

Crear un archivo de servicio para Apache Tomcat

A continuación, tendrás que crear un archivo de servicio para gestionar el servicio Tomcat a través de systemd. Puedes crearlo utilizando el siguiente comando:

nano /etc/systemd/system/tomcat.service

Añade las siguientes líneas:

[Unit]
Description=Tomcat
After=network.target

[Service]
Type=forking

User=tomcat
Group=tomcat

Environment="JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom"
Environment="CATALINA_BASE=/opt/tomcat"
Environment="CATALINA_HOME=/opt/tomcat"
Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh

[Install]
WantedBy=multi-user.target

Guarda y cierra el archivo y vuelve a cargar el demonio systemd para aplicar los cambios:

systemctl daemon-reload

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

systemctl start tomcat
systemctl enable tomcat

Puedes comprobar el estado de Apache Tomcat con el siguiente comando:

systemctl status tomcat

Obtendrás la siguiente salida:

? tomcat.service - Tomcat
     Loaded: loaded (/etc/systemd/system/tomcat.service; disabled; vendor preset: enabled)
     Active: active (running) since Fri 2022-04-29 08:11:54 UTC; 6s ago
    Process: 18959 ExecStart=/opt/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)
   Main PID: 18966 (java)
      Tasks: 29 (limit: 4630)
     Memory: 116.4M
        CPU: 5.312s
     CGroup: /system.slice/tomcat.service
             ??18966 /usr/lib/jvm/java-1.11.0-openjdk-amd64/bin/java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Dja>

Apr 29 08:11:54 ubuntu systemd[1]: Starting Tomcat...
Apr 29 08:11:54 ubuntu startup.sh[18959]: Tomcat started.
Apr 29 08:11:54 ubuntu systemd[1]: Started Tomcat.

En este punto, Tomcat está iniciado y escucha en el puerto 8080. Puedes comprobarlo con el siguiente comando

ss -antpl | grep java

Obtendrás la siguiente salida:

LISTEN 0      1      [::ffff:127.0.0.1]:8005             *:*    users:(("java",pid=18966,fd=53))                                                                                                                                                                                                                                                                                
LISTEN 0      100                     *:8080             *:*    users:(("java",pid=18966,fd=43))   

Una vez que hayas terminado, puedes continuar con el siguiente paso.

Configurar Nginx como Proxy Inverso para Tomcat

A continuación, tendrás que crear un Nginx como proxy inverso para Apache Tomcat. En primer lugar, instala el servidor web Nginx con el siguiente comando:

apt-get install nginx -y

Una vez instalado el servidor web Nginx, crea un archivo de configuración de host virtual Nginx con el siguiente comando:

nano /etc/nginx/conf.d/tomcat.conf

Añade las siguientes líneas:

server {
  listen 80;

  server_name    tomcat.example.com;
  access_log /var/log/nginx/tomcat-access.log;
  error_log /var/log/nginx/tomcat-error.log;

  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://127.0.0.1:8080/;
  }
}

Guarda y cierra el archivo y, a continuación, comprueba si Nginx tiene algún error de sintaxis utilizando el siguiente comando:

nginx -t

Obtendrás 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, reinicia el servicio Nginx para aplicar los cambios:

systemctl restart nginx

También puedes comprobar el estado de Nginx utilizando el siguiente comando:

systemctl status nginx

Deberías ver la siguiente salida:

? nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2022-04-29 08:15:28 UTC; 8s ago
       Docs: man:nginx(8)
    Process: 19070 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 19071 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 19072 (nginx)
      Tasks: 3 (limit: 4630)
     Memory: 3.3M
        CPU: 63ms
     CGroup: /system.slice/nginx.service
             ??19072 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
             ??19073 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
             ??19074 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

Apr 29 08:15:28 ubuntu systemd[1]: Starting A high performance web server and a reverse proxy server...
Apr 29 08:15:28 ubuntu systemd[1]: Started A high performance web server and a reverse proxy server.

Accede a Apache Tomcat

Ahora, abre tu navegador web y accede a la interfaz web de Apache Tomcat utilizando la URL http://tomcat.example.com. Deberías ver el panel de control de Tomcat en la siguiente pantalla:

Apache Tomcat

Haz clic en la aplicación Administrador. Se te pedirá que te autentiques como se muestra a continuación:

Inicio de sesión en Tomcat

Introduce tu nombre de usuario y contraseña de administrador, y haz clic en el botón Iniciar sesión. Deberías ver el salpicadero de la App Manager en la siguiente pantalla:

Panel de control de Apache Tomcat

Para acceder a la app Gestor de Anfitriones, pulsa en Gestor de Anfitriones. Deberías ver la siguiente pantalla:

Administrador de host virtual Tomcat

Pulsa sobre el Estado del Servidor. Deberías ver el estado de Apache Tomcat en la siguiente pantalla:

Estado del servidor Tomcat

Conclusión

¡Enhorabuena! Has instalado correctamente Apache Tomcat con Nginx como proxy inverso en Ubuntu 22.04. Ahora puedes crear y alojar tu primera aplicación Java utilizando Apache Tomcat. No dudes en preguntarme si tienes alguna duda.

También te podría gustar...