Cómo instalar Apache Tomcat 9 con Nginx Proxy en Debian 10

Tomcat es un servidor de aplicaciones gratuito, de código abierto y ligero, utilizado para desplegar aplicaciones basadas en Java. Puede utilizarse como servidor independiente o combinado con otros servidores como Apache y Nginx. Proporciona la funcionalidad ampliada para interactuar con los Servlets Java y también implementa varias especificaciones técnicas de la plataforma Java. Actualmente, Tomcat es uno de los servidores de aplicaciones para Java más utilizados.

En este tutorial, te mostraré cómo instalar Tomcat 9 con Nginx en Debian 10.

Requisitos previos

  • Un servidor con Debian 10.
  • Un nombre de dominio válido apuntado con la IP de tu servidor.
  • Una contraseña de root configurada en tu servidor.

Cómo empezar

Antes de empezar, es una buena idea actualizar la caché de APT a la última versión. Puedes actualizarla ejecutando el siguiente comando:

apt-get update -y

Una vez que la caché de los paquetes de tu sistema esté actualizada, puedes pasar al siguiente paso.

Instalar Java

Tomcat 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:

apt-get install default-jdk -y

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

java --version

Deberías obtener la siguiente salida:

openjdk 11.0.9.1 2020-11-04
OpenJDK Runtime Environment (build 11.0.9.1+1-post-Debian-1deb10u2)
OpenJDK 64-Bit Server VM (build 11.0.9.1+1-post-Debian-1deb10u2, mixed mode, sharing)

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

Instalar Tomcat

En primer lugar, tendrás que crear un usuario dedicado para ejecutar el servidor Tomcat. Puedes crearlo con el siguiente comando:

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

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

wget https://www-eu.apache.org/dist/tomcat/tomcat-9/v9.0.45/bin/apache-tomcat-9.0.45.tar.gz

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

tar -xvzf apache-tomcat-9.0.45.tar.gz

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

mv apache-tomcat-9.0.45 /opt/tomcat/tomcat

A continuación, establece el permiso y la propiedad adecuados con el siguiente comando:

chown -R tomcat:tomcat /opt/tomcat/tomcat
chmod -R 755 /opt/tomcat/tomcat

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

Crear un archivo de servicio Systemd para Tomcat

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

nano /etc/systemd/system/tomcat.service

Añade las siguientes líneas:

[Unit]
Description=Tomcat 9.0 servlet container
After=network.target

[Service]
Type=forking

User=tomcat
Group=tomcat

Environment="JAVA_HOME=/usr/lib/jvm/default-java"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom"

Environment="CATALINA_BASE=/opt/tomcat/tomcat"
Environment="CATALINA_HOME=/opt/tomcat/tomcat"
Environment="CATALINA_PID=/opt/tomcat/tomcat/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"

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

[Install]
WantedBy=multi-user.target

Guarda y cierra el archivo y luego recarga el demonio systemd con el siguiente comando:

systemctl daemon-reload

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

systemctl start tomcat
systemctl enable tomcat

También puedes verificar el estado de Tomcat con el siguiente comando:

systemctl status tomcat

Deberías obtener la siguiente salida:

? tomcat.service - Tomcat 9.0 servlet container
   Loaded: loaded (/etc/systemd/system/tomcat.service; disabled; vendor preset: enabled)
   Active: active (running) since Wed 2021-04-14 05:41:21 UTC; 42s ago
  Process: 5784 ExecStart=/opt/tomcat/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)
 Main PID: 5791 (java)
    Tasks: 30 (limit: 4701)
   Memory: 159.1M
   CGroup: /system.slice/tomcat.service
           ??5791 /usr/lib/jvm/default-java/bin/java -Djava.util.logging.config.file=/opt/tomcat/tomcat/conf/logging.properties -Djava.util.log

Apr 14 05:41:21 debian systemd[1]: Starting Tomcat 9.0 servlet container...
Apr 14 05:41:21 debian startup.sh[5784]: Tomcat started.
Apr 14 05:41:21 debian systemd[1]: Started Tomcat 9.0 servlet container.

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

Configurar la interfaz web de Tomcat

A continuación, tendrás que definir un usuario para acceder a la interfaz web de Tomcat. Puedes definirlo utilizando el archivo tomcat-users.xml:

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

Busca la sección y añade o modifica las siguientes líneas:

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

Guarda y cierra el archivo cuando hayas terminado.

Por defecto, la interfaz web de Tomcat está configurada para acceder sólo desde el localhost. Así que tendrás que configurarla para el acceso externo.

Para la app Gestor, edita la siguiente línea:

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

Para la app Gestor de Anfitriones, edita el siguiente archivo:

nano /opt/tomcat/tomcat/webapps/host-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" />

Guarda y cierra el archivo y reinicia el servicio Tomcat para aplicar los cambios:

systemctl restart tomcat

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

Configurar Nginx para Tomcat

A continuación, tendrás que instalar y configurar Nginx como proxy inverso para Tomcat. Primero, instala el paquete Nginx con el siguiente comando:

apt-get install nginx -y

Una vez instalado el Nginx, tendrás que crear un nuevo archivo de configuración del host virtual Nginx para Tomcat. Puedes crearlo 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;
  root            /opt/tomcat/tomcat/webapps/;


  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 luego verifica que el Nginx no tenga ningún error de sintaxis:

nginx -t

Deberías ver 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

A continuación, verifica el estado del servicio Nginx con 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 Wed 2021-04-14 05:57:03 UTC; 1min 38s ago
     Docs: man:nginx(8)
  Process: 6852 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
  Process: 6853 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
 Main PID: 6854 (nginx)
    Tasks: 3 (limit: 4701)
   Memory: 4.0M
   CGroup: /system.slice/nginx.service
           ??6854 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           ??6855 nginx: worker process
           ??6856 nginx: worker process

Apr 14 05:57:03 debian systemd[1]: Starting A high performance web server and a reverse proxy server...
Apr 14 05:57:03 debian systemd[1]: Started A high performance web server and a reverse proxy server.

En este punto, Nginx está configurado para acceder al Tomcat. Ahora puedes pasar al siguiente paso.

Acceder a la interfaz web de Tomcat

Ahora, abre tu navegador web y accede a la interfaz web de Tomcat utilizando la URL http://tomcat.example.com. Deberías ver la siguiente página:

Apache Tomcat

Haz clic en la App Manager, deberías ver la siguiente página:

Inicio de sesión en Tomcat

Proporciona tu nombre de usuario y contraseña de administrador de la App Manager y haz clic en el botón Iniciar sesión. Deberías ver la siguiente página:

Panel de control de Tomcat

También puedes hacer clic en el Gestor de Anfitriones para acceder a la App Gestor de Anfitriones como se muestra a continuación:

Gestor de host virtual

Conclusión

Enhorabuena! has instalado con éxito Tomcat con Nginx como proxy inverso en Debian 10. Ahora puedes desplegar tu aplicación Java fácilmente con Tomcat. No dudes en preguntarme si tienes alguna duda.

Scroll al inicio