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:
- Servidor VPS con Ubuntu: Una instancia de servidor Ubuntu funcionando.
- Acceso Root o Sudo: Acceso con privilegios de administrador para instalar software y modificar configuraciones.
- Java 17: Las aplicaciones Spring Boot generalmente requieren una versión específica de Java. En este caso, instalaremos Java 17.
- 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.

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
- 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
- Accede a
http://tudominioweb.es
yhttp://www.tudominioweb.es
para verificar que la web principal esté funcionando. - Accede a
http://subs.tudominioweb.es
para verificar que la aplicación secundaria esté funcionando. - Prueba también con
https://
para asegurarte de que SSL esté configurado correctamente.

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.properties
de 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.
- 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
- Probar Acceso a los Dominios:
- Accede a
http://tudominioweb.es
yhttp://www.tudominioweb.es
para verificar la web principal. - Accede a
http://subs.tudominioweb.es
para verificar la aplicación secundaria.
- Accede a
- Probar Acceso HTTPS:
- Accede a
https://tudominioweb.es
yhttps://www.tudominioweb.es
para verificar la web principal con SSL. - Accede a
https://subs.tudominioweb.es
para verificar la aplicación secundaria con SSL.
- Accede a
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.
