8 min read

Manual Completo para Desplegar Dos Aplicaciones Spring Boot en un VPS con Apache

Aprende a desplegar dos aplicaciones Spring Boot en un solo VPS usando Apache, cada una con su propio subdominio. Esta guía cubre desde la instalación de Java y Apache hasta la configuración de certificados SSL y la resolución de errores comunes en el despliegue.
Manual Completo para Desplegar Dos Aplicaciones Spring Boot en un VPS con Apache
Manual Completo para Desplegar Dos Aplicaciones Spring Boot en un VPS con Apache

Volvemos a la carga con una versión para aprender a desplegar un par de aplicaciones y configurar lo básico en nuestro servidor virtual privado para que cada una tenga su propio dominio asignado, esta vez usando Apache.

Este manual te guiará a través del proceso de desplegar dos aplicaciones Spring Boot en el mismo VPS, utilizando subdominios diferentes. Utilizaremos tudominioweb.es y www.tudominioweb.es para la web principal, y subs.tudominioweb.es para la segunda aplicación. Los archivos .jar de las aplicaciones se subirán a los directorios /home/ubuntu/tudominioweb y /home/ubuntu/subs respectivamente.

Requisitos Previos

Antes de comenzar con la configuración y despliegue de múltiples aplicaciones en un VPS, asegúrate de tener los siguientes elementos instalados y configurados:

  1. Servidor VPS con Ubuntu: Una instancia de servidor Ubuntu funcionando.
  2. Acceso Root o Sudo: Acceso con privilegios de administrador para instalar software y modificar configuraciones.
  3. Java 17: Las aplicaciones Spring Boot generalmente requieren una versión específica de Java. En este caso, instalaremos Java 17.
  4. Apache HTTP Server: Necesario para servir las aplicaciones y manejar las solicitudes de los subdominios.

Instalación de Java 17

Para instalar Java 17 en tu servidor Ubuntu, sigue estos pasos:

Actualiza la lista de paquetes:

sudo apt update

Instala OpenJDK 17:

sudo apt install openjdk-17-jdk -y

Verifica la instalación:

java -version

Deberías ver algo similar a:

openjdk version "17.0.1" 2021-10-19
OpenJDK Runtime Environment (build 17.0.1+12-39)
OpenJDK 64-Bit Server VM (build 17.0.1+12-39, mixed mode, sharing)

Instalación de Apache HTTP Server

Para instalar Apache en tu servidor Ubuntu, sigue estos pasos:

Actualiza la lista de paquetes:

sudo apt update

Instala Apache:

sudo apt install apache2 -y

Habilita Apache para que inicie automáticamente al arrancar el servidor:

sudo systemctl enable apache2

Verifica que Apache está funcionando:

sudo systemctl status apache2

Deberías ver algo similar a:

● apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2024-07-18 12:34:56 UTC; 1min 30s ago

Con Java y Apache instalados, ahora estás listo para continuar con la configuración y despliegue de tus aplicaciones.

Dentro del VPS...

Paso 1: Subir los Archivos .jar

Sube los archivos .jar de tus aplicaciones a los directorios correspondientes en tu VPS. Puedes usar scp o cualquier otra herramienta de transferencia de archivos.

scp /path/to/your/tudominioweb-0.0.1.jar ubuntu@your_vps_ip:/home/ubuntu/tudominioweb/
scp /path/to/your/subs-0.0.1.jar ubuntu@your_vps_ip:/home/ubuntu/subs/

Paso 2: Configurar los Servicios Systemd

Crea archivos de servicio systemd para cada aplicación para gestionarlas como servicios.

Para subs:

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

Contenido del archivo:

[Unit]
Description=Aplicación Spring Boot subs
After=network.target

[Service]
User=ubuntu
ExecStart=/usr/bin/java -jar /home/ubuntu/subs/subs-0.0.1.jar --server.port=8081
SuccessExitStatus=143
StandardOutput=null
StandardError=journal

[Install]
WantedBy=multi-user.target

Para tudominioweb:

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

Contenido del archivo:

[Unit]
Description=Aplicación Spring Boot tudominioweb
After=network.target

[Service]
User=ubuntu
ExecStart=/usr/bin/java -jar /home/ubuntu/tudominioweb/tudominioweb-0.0.1.jar --server.port=8080
SuccessExitStatus=143
StandardOutput=null
StandardError=journal

[Install]
WantedBy=multi-user.target

Paso 3: Habilitar y Arrancar los Servicios

Verifica que los servicios estén corriendo correctamente:

sudo systemctl status tudominioweb
sudo systemctl status subs

Habilita y arranca los servicios:

sudo systemctl enable tudominioweb
sudo systemctl start tudominioweb

sudo systemctl enable subs
sudo systemctl start subs

Recarga systemd para aplicar los cambios:

sudo systemctl daemon-reload

Paso 4: Configurar Apache

Edita la configuración de Apache para redirigir el tráfico HTTP y HTTPS a las aplicaciones correspondientes.

Crea y edita el archivo de configuración para subs:

sudo nano /etc/apache2/sites-available/subs.conf

Contenido del archivo:

<VirtualHost *:80>
    ServerName subs.tudominioweb.es

    ProxyPreserveHost On
    ProxyPass / http://localhost:8081/
    ProxyPassReverse / http://localhost:8081/
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName subs.tudominioweb.es

    ProxyPreserveHost On
    ProxyPass / http://localhost:8081/
    ProxyPassReverse / http://localhost:8081/

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/subs.tudominioweb.es/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/subs.tudominioweb.es/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

Crea y edita el archivo de configuración para tudominioweb:

sudo nano /etc/apache2/sites-available/tudominioweb.conf

Contenido del archivo:

<VirtualHost *:80>
    ServerName tudominioweb.es
    ServerAlias www.tudominioweb.es

    ProxyPreserveHost On
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName tudominioweb.es
    ServerAlias www.tudominioweb.es

    ProxyPreserveHost On
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/tudominioweb.es/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/tudominioweb.es/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

Habilita los módulos necesarios de Apache:

sudo a2enmod proxy proxy_http ssl rewrite

Paso 5: Habilitar las Configuraciones de los Sitios

Recarga Apache para aplicar los cambios:

sudo systemctl reload apache2

Habilita las configuraciones de los nuevos sitios:

sudo a2ensite tudominioweb.conf
sudo a2ensite subs.conf

Deshabilita el sitio por defecto de Apache:

sudo a2dissite 000-default.conf

Paso 6: Obtener Certificados SSL con Certbot

  1. Sigue las instrucciones para completar la configuración de SSL. Certbot modificará automáticamente los archivos de configuración de Apache para utilizar SSL.

Instala Certbot y el plugin para Apache:

sudo apt update
sudo apt install certbot python3-certbot-apache

Ejecuta Certbot para obtener certificados SSL:

sudo certbot --apache -d tudominioweb.es -d www.tudominioweb.es -d subs.tudominioweb.es

Paso 7: Verificar la Configuración

Reinicia Apache para asegurarte de que todos los cambios estén aplicados:

sudo systemctl restart apache2

Verifica la configuración de Apache:

sudo apache2ctl configtest

Debes ver una salida que diga Syntax OK.

Paso 8: Prueba de Funcionamiento

  1. Accede a http://tudominioweb.es y http://www.tudominioweb.es para verificar que la web principal esté funcionando.
  2. Accede a http://subs.tudominioweb.es para verificar que la aplicación secundaria esté funcionando.
  3. Prueba también con https:// para asegurarte de que SSL esté configurado correctamente.
Resolución de Errores

Resolución de Errores

Durante el proceso de despliegue y configuración de las aplicaciones en el VPS, es posible que te encuentres con algunos errores comunes. A continuación, se detallan estos errores y cómo resolverlos.

Error 0: Puertos en Conflicto

Un error común al desplegar múltiples aplicaciones en el mismo servidor es no asignar puertos diferentes a cada aplicación. Si dos aplicaciones intentan usar el mismo puerto, sólo una de ellas funcionará correctamente, y la otra fallará al iniciarse, ya que el puerto estará ocupado.

Para resolver este error, asegúrate de asignar un puerto diferente a cada aplicación en su archivo de configuración o en la línea de comandos al iniciarlas.

Verificar el Estado de los Servicios systemd. Lo hemos visto anteriormente en el paso 2 de este manual de referencia. Recuerda que es muy importante configurar puertos diferentes en el archivo de servicio, en este manual estamos usando el 8080 y 8081. Asegúrate de que los archivos de servicio systemd para cada aplicación especifican los puertos correctos.

Reiniciar los Servicios:Una vez que hayas configurado los puertos correctamente, reinicia los servicios para aplicar los cambios.

sudo systemctl daemon-reload
sudo systemctl restart tudominioweb
sudo systemctl restart subs

Configurar Puertos Diferentes en application.propertiesde tu proyecto Spring. En el archivo application.properties de cada aplicación, especifica un puerto diferente.Para la aplicación principal (tudominioweb):

server.port=8080

Para la aplicación secundaria (subs):

server.port=8081

Asegurarte de que cada aplicación escucha en un puerto diferente es crucial para evitar conflictos y asegurar que ambas aplicaciones puedan funcionar simultáneamente en el mismo servidor. Si todas las configuraciones de puertos se hacen correctamente, podrás desplegar múltiples aplicaciones en el mismo VPS sin problemas.

Error 1: "DocumentRoot does not exist"

Este error indica que la ruta especificada en DocumentRoot no existe. Asegúrate de que las rutas especificadas en los archivos de configuración de Apache (/etc/apache2/sites-available/tudominioweb.conf y /etc/apache2/sites-available/subs.conf) sean correctas y existan en el sistema de archivos.

Cambia DocumentRoot a la ruta correcta:

<VirtualHost *:80>
    ServerName tudominioweb.es
    DocumentRoot /home/ubuntu/tudominioweb
    ...
</VirtualHost>

<VirtualHost *:80>
    ServerName subs.tudominioweb.es
    DocumentRoot /home/ubuntu/subs
    ...
</VirtualHost>

Error 2: "conflicting server name"

Este error indica que hay nombres de servidor en conflicto en la configuración de Apache. Asegúrate de que cada archivo de configuración en /etc/apache2/sites-available/ tenga nombres de servidor únicos y no se solapen.

Revisa y ajusta los archivos de configuración para asegurarte de que no haya conflictos:

<VirtualHost *:80>
    ServerName tudominioweb.es
    ServerAlias www.tudominioweb.es
    ...
</VirtualHost>

<VirtualHost *:80>
    ServerName subs.tudominioweb.es
    ...
</VirtualHost>

Error 3: "502 Bad Gateway"

Este error ocurre cuando Nginx o Apache no pueden comunicarse con el backend de la aplicación. Asegúrate de que las aplicaciones Spring Boot estén corriendo y escuchando en los puertos correctos.

Verifica el estado de los servicios:

sudo systemctl status tudominioweb
sudo systemctl status subs

Si las aplicaciones no están corriendo, revisa los archivos de servicio systemd y asegúrate de que los puertos especificados sean correctos y que Java esté instalado correctamente.

Error 4: Problemas con Certificados SSL

Si al acceder a los dominios recibes una advertencia de que la conexión no es segura, puede ser debido a que los certificados SSL no se han configurado correctamente.

  1. Asegúrate de que Certbot haya generado los certificados y configurado Apache correctamente.

Revisa los archivos de configuración SSL en /etc/apache2/sites-available/tudominioweb-le-ssl.conf y /etc/apache2/sites-available/subs-le-ssl.conf para asegurarte de que los caminos a los certificados sean correctos:

SSLCertificateFile /etc/letsencrypt/live/tudominioweb.es/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/tudominioweb.es/privkey.pem

SSLCertificateFile /etc/letsencrypt/live/subs.tudominioweb.es/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/subs.tudominioweb.es/privkey.pem

Error 5: Problemas de DNS

Asegúrate de que los registros DNS para tudominioweb.es, www.tudominioweb.es, y subs.tudominioweb.es apunten a la IP de tu VPS. Esto se configura en el panel de administración de tu proveedor de dominio.

Verificación y Pruebas

  1. Probar Acceso a los Dominios:
    • Accede a http://tudominioweb.es y http://www.tudominioweb.es para verificar la web principal.
    • Accede a http://subs.tudominioweb.es para verificar la aplicación secundaria.
  2. Probar Acceso HTTPS:
    • Accede a https://tudominioweb.es y https://www.tudominioweb.es para verificar la web principal con SSL.
    • Accede a https://subs.tudominioweb.es para verificar la aplicación secundaria con SSL.

Reiniciar Apache:

sudo systemctl restart apache2

Verificar Configuración de Apache:

sudo apache2ctl configtest

Si hay errores de sintaxis, Apache te indicará dónde están. Por ejemplo, si hay un error debido a una ruta incorrecta en la configuración, te dará un mensaje similar a:

Syntax error on line 15 of /etc/apache2/sites-available/tusitioweb.conf:
DocumentRoot '/home/ubuntu/tudominioweb' does not exist

Corrige cualquier error indicado y vuelve a probar la configuración.

Conclusión

Siguiendo estos pasos y resolviendo los errores comunes, deberías poder desplegar dos aplicaciones Spring Boot en un VPS, cada una con su propio dominio o subdominio, y servirlas usando Apache con soporte para HTTPS.

vps vps