¿Cómo Instalar Tomcat en VPS Ubuntu?

El presente tutorial tiene como objetivo instalar y aplicar configuración básica de Tomcat para que se pueda acceder por los puertos 80 y 443.


1.- Conectado en VPS, crea un directorio alojar el programa Tomcat, y de una vez crea usuario y grupo para ejecutar "tomcat".


sudo mkdir /opt/Tomcats/
sudo groupadd tomcat
sudo useradd -g tomcat -s /bin/false -d /opt/Tomcats/ tomcat


2.- Descargar directamente Tomcat desde su sitio oficial.


sudo chmod 777 /opt/Tomcats/
cd /opt/Tomcats/
wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.8/bin/apache-tomcat-10.1.8.tar.gz


3.- Descomprime el archivo "apache-tomcat-10.1.8.tar.gz" en la carpeta creada.


cd /opt/Tomcats/
sudo gunzip < apache-tomcat-10.1.8.tar.gz | tar xvf -
sudo mv /opt/Tomcats/apache-tomcat-10.1.8/ /opt/Tomcats/tomcat-10/
sudo chmod 755 /opt/Tomcats/
sudo chown -R tomcat: /opt/Tomcats/


4.- Crea el directorio para alojar el programa Java, y descomprime el archivo "jdk-19.0.2_linux-x64_bin.tar.gz" en la carpeta creada.


sudo mkdir /opt/Java/
sudo chmod 777 /opt/Java/
cd /opt/Java/
wget https://download.oracle.com/java/19/archive/jdk-19.0.2_linux-x64_bin.tar.gz


Nota: con frecuencia la descarga de Java JDK por medio de la instrucción wget falla con error “ERROR 403: Forbidden.” .Una solución eficaz es descargar este archivo desconectado de tu VPS desde tu equipo local, desde cualquier navegador, y luego subir al tu servidor VPS vía SCP. Ejemplo:


scp -P tu_puerto_ssh /directorio/donde/descargaste/jdk-19.0.2_linux-x64_bin.tar.gz tu_usuario@tu_ip_vps:/opt/Java/


O en caso que utilizas llave RSA:


scp -i /directorio/de/tu/llave/tu_rsa_key -P tu_puerto_ssh /directorio/donde/descargaste/jdk-19.0.2_linux-x64_bin.tar.gz tu_usuario_vps@tu_ip_vps:/opt/Java/


Una ves tengas el archivo jdk-19.0.2_linux-x64_bin.tar.gz en tu servidor VPS, en el directorio /opt/Java/, continua con las siguientes instrucciones:


cd /opt/Java/
sudo gunzip < jdk-19.0.2_linux-x64_bin.tar.gz | tar xvf -
sudo mv /opt/Java/jdk-19.0.2/ /opt/Java/jdk-19/
sudo chmod 755 /opt/Java/
sudo chown -R tomcat: /opt/Java/jdk-19/


5.- Configura Tomcat para que use Java que acabas de colocar en: /opt/Java/jdk-19.


Para ello debes crear un archivo con nombre “setenv.sh” y a este archivo indicar donde se encuentra Java. Así:


sudo nano /opt/Tomcats/tomcat-10/bin/setenv.sh


Incluye la siguiente línea en el archivo, puedes copiar y pegar desde aquí:


JRE_HOME=/opt/Java/jdk-19


6.- Configura servicio Linux para que puedas iniciar o detener Tomcat:


sudo nano /etc/systemd/system/tomcat.service


Incluye el siguiente texto en el archivo, puedes copiar y pegar desde aquí:


[Unit]
Description=Apache Tomcat Server
After=syslog.target network.target

[Service]
Type=forking
User=tomcat
Group=tomcat

ExecStart=/opt/Tomcats/tomcat-10/bin/startup.sh
ExecStop=/opt/Tomcats/tomcat-10/bin/shudown.sh

RestartSec=10
Restart=always

[Install]
WantedBy=multi-user.target


7.- Asignar al nuevo archivo "tomcat.service" que creaste en el paso anterior, usuario y permisos necesarios para que funcione.


sudo chmod 755 /etc/systemd/system/tomcat.service
sudo chown root: /etc/systemd/system/tomcat.service


8.- Habilita el servicio.


sudo systemctl daemon-reload
sudo systemctl enable tomcat.service
sudo systemctl start tomcat.service


9.- Probar.


Si seguiste los pasos correctamente puedes entrar a tu Tomcat desde cualquier equipo, con la IP de tu servidor:


http://tu_ip_vps:8080


o si ya tienes un dominio o sub-dominio apuntando a la IP de tu servidor, entonces prueba:


http://tu_dominio:8080


10.- Configurar para puertos 80 y 443 de modo que no tengas que escribir el puerto cada vez.


Linux por defecto tiene bloqueado los puertos 80 y 443, por lo cual hay que instalar y configurar el programa "authbind" para permitir a tomcat usar estos puertos.

sudo apt-get install authbind -y

sudo touch /etc/authbind/byport/80
sudo chmod 500 /etc/authbind/byport/80
sudo chown tomcat /etc/authbind/byport/80

sudo touch /etc/authbind/byport/443
sudo chmod 500 /etc/authbind/byport/443
sudo chown tomcat /etc/authbind/byport/443


Debes ahora editar el archivo “tomcat.service” para aplicar el siguiente cambio:


sudo nano /etc/systemd/system/tomcat.service


Busca esta línea:


ExecStart=/opt/Tomcat/tomcat-10/bin/startup.sh


Sustituye por:


ExecStart=authbind --deep /opt/Tomcat/tomcat-10/bin/startup.sh


Una vez que hayas aplicado y guardado el cambio, reinicia el servicio tomcat para que asuma los cambios:


sudo systemctl daemon-reload
sudo systemctl stop tomcat.service
sudo systemctl start tomcat.service


11.- Habilitar cifrado SSL para conexiones HTTPS en puerto 443.


Para habilitar cifrado SSL necesitas un dominio, o al menos un sub-dominio que apunte a la IP de tu servidor VPS. Puedes comprar un dominio en un proveedores de este servicio como: Hostinger, Namecheap, Interserver, Kamera entre otros, los cuales hago referencia al final de este tutorial, o también obtener un sub-dominio gratis en otros portales que lo ofrecen bajo ciertas condiciones. Luego debes apuntar tu dominio o sub-dominio a la IP de tu servidor VPS.


Si ya tienes un dominio, o sub-dominio, puedes continuar con el siguiente paso, para obtener un certificado SSL gratis mediante el uso de la aplicación certbot.


Certbot es una aplicación de uso gratuito que permite generar certificados. Esta aplicación requiere que tu VPS pueda ser accesible por medio de un dominio o sub-dominio, por lo cual, al momento de generar el certificado comprobará que tu dominio o sub-dominio apunta a la IP de tu servidor.


Esta comprobación la hará por medio del puerto 80, por ello debemos asegurar que Cerbot pueda utilizar este puerto en tu servidor. En ocasiones las instalaciones Ubuntu tienen pre-instalado la aplicación Apache que hace uso del puerto 80, si este es el caso Cerbot no podrá ejecutarse. Para desinstalar Apache ejecuta las siguientes instrucciones:


sudo update-rc.d apache2 disable
sudo update-rc.d -f apache2 remove
sudo reboot


Con la tercera instrucción se reiniciará tu servidor, por lo cual espera uno o dos minutos y vuelve a conectarte a tu servidor.


Una vez dentro de tu servidor instala Cerbot con la siguiente instrucción:


sudo apt-get install certbot


Si tu VPS tiene firewall activo, lo cual debería ser así por tema de seguridad, debes permitir conexión entrante por el puerto 80:


sudo ufw allow IN 80
sudo ufw reload


Una vez que tienes Cerbot instalado, y el puerto 80 activo para conexiones entrantes, puedes generar el certificado con la siguiente instrucción, recuerda sustituir tu_dominio, por el dominio que tienes apuntando a tu VPS:


sudo certbot certonly --standalone -d tu_dominio


La instrucción anterior te pedirá un correo electrónico, preguntará si aceptas los términos y condiciones, lo cual debes responder con la letra ‘y’, y por último te pregunta opcional si quieres recibir campañas en tu correo, responde con ‘n’ o ‘y’ según prefieras.


Si Cerbot pudo comprobar tu dominio, generará tu certificado y te mostrará un mensaje como este:


Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/tu_dominio/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/tu_dominio/privkey.pem
This certificate expires on 2023-08-17.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


Por lo general Cerbot crea los archivos de tu certificado en un directorio con el nombre de tu dominio, ejemplo:


“/etc/letsencrypt/archive/tu_dominio”


Dentro de este directorio estarán los siguientes archivos:


  • fullchain1.pem
  • privkey1.pem
  • chain1.pem
  • cert1.pem

Encuentra este directorio, puedes utilizar la instrucción:


sudo ls -l /etc/letsencrypt/archive/


Deberías ver el directorio donde se encuentran tus archivo de certificado.


En adelante en este tutorial asumiremos que el directorio donde se encuentras los archivos del certificado están en el directorio: /etc/letsencrypt/archive/tu_dominio/


Para que Tomcat pueda usar los archivos del certificado debemos hacer dueño al usuario tomcat del directorio y archivos de tu certificado.


sudo chown -R tomcat: /etc/letsencrypt/archive/tu_dominio/


Es hora de configurar Tomcat con los archivos del certificado para que habilite SSL


sudo nano /opt/Tomcat/tomcat-10/conf/server.xml


Debes incluir el siguiente conector:


    
        
            
        
    


Si aun no tienes un VPS, a continuación te presento una lista de proveedores de alojamiento Web, que ofrecen VPS:


->
->Interserver
->Namecheap
->Kamatera
->Netebu
->Sered
->Nicalia
->Tropicalserver
->Webempresa
->Lucushost
->Axarnet
->Ginernet
->Hostingssi

Agradecimientos


A todos aquellos escritores de tecnología quienes antes que yo escribieron sobre este tema, de los cuales aprendí y luego escribí mi propia versión.


Descargo de Responsabilidad


Las marcas comerciales, marcas de servicio y logotipos de terceros son propiedad de sus respectivos propietarios. Se muestran en App SDMD únicamente con fines de identificación y referencia.


Los tutoriales y guías presentes en App SDMD se escriben con autoría propia, y son probados antes de publicar. Sin embargo App SDMD no es responsable por problemas que presente el lector o visitante a causa de la ejecución de pasos de los tutoriales, por ello el lector o visitante actúa bajo su propia responsabilidad.




Interserver

Inet
Autor: Samuel Mejias. Todos los derechos reservados.