Despliegue de aplicaciones
Una vez que nuestra aplicación funciona, debemos publicarla en un servidor para que otras personas puedan usarla.
Este proceso se llama despliegue (deployment).
En este capítulo veremos:
- generar el archivo ejecutable
- ejecutar la aplicación en un servidor
- usar Docker
- desplegar en plataformas cloud
1. Crear archivo ejecutable (JAR) #
Spring Boot permite generar un archivo JAR ejecutable.
Esto significa que la aplicación incluye:
- servidor web
- dependencias
- configuración
2. Generar el JAR #
En la terminal del proyecto:
1mvn clean package
Esto genera el archivo:
1target/app.jar
3. Ejecutar la aplicación #
Para ejecutar el JAR:
1java -jar target/app.jar
La aplicación arrancará.
Ejemplo en consola:
1Tomcat started on port 8080 2Started Application
Ahora la API estará disponible en:
1http://localhost:8080
4. Ejecutar en servidor Linux #
Supongamos un servidor Linux.
Pasos:
subir el archivo #
1scp target/app.jar usuario@servidor:/home/app
ejecutar aplicación #
1java -jar app.jar
5. Ejecutar en segundo plano #
Para que el servidor no se detenga al cerrar la terminal:
1nohup java -jar app.jar &
6. Ejecutar como servicio #
En servidores Linux es común usar systemd.
7. Crear servicio #
Archivo:
1/etc/systemd/system/app.service
8. Ejemplo #
1[Unit] 2Description=Spring Boot App 3After=network.target 4 5[Service] 6User=ubuntu 7ExecStart=/usr/bin/java -jar /home/app/app.jar 8SuccessExitStatus=143 9 10[Install] 11WantedBy=multi-user.target
9. Activar servicio #
1systemctl start app 2systemctl enable app
10. Usar Docker #
Docker permite ejecutar la aplicación en un contenedor aislado.
Ventajas:
- portabilidad
- facilidad de despliegue
- mismo entorno en todos los servidores
11. Crear Dockerfile #
Archivo:
1Dockerfile
12. Ejemplo #
1FROM openjdk:21-jdk 2 3COPY target/app.jar app.jar 4 5ENTRYPOINT ["java","-jar","/app.jar"]
13. Crear imagen Docker #
1docker build -t spring-app .
14. Ejecutar contenedor #
1docker run -p 8080:8080 spring-app
Ahora la aplicación está disponible en:
1http://localhost:8080
15. Despliegue en Railway #
Railway es una plataforma sencilla para desplegar aplicaciones.
Pasos:
1 crear cuenta en Railway 2 subir proyecto a GitHub 3 conectar repositorio 4 Railway detecta Spring Boot automáticamente
La aplicación se desplegará automáticamente.
16. Despliegue en Render #
Otra plataforma popular es Render.
Pasos:
1 crear cuenta 2 conectar repositorio 3 elegir tipo Web Service 4 configurar comando:
1java -jar app.jar
17. Despliegue en VPS #
También podemos usar un servidor propio.
Ejemplo:
1DigitalOcean 2AWS EC2 3Hetzner 4OVH
Pasos:
1 crear servidor Linux 2 instalar Java 3 subir JAR 4 ejecutar aplicación
18. Usar base de datos remota #
En producción normalmente usamos bases de datos externas.
Ejemplos:
1PostgreSQL 2MySQL 3MongoDB
Configuración:
1spring.datasource.url=jdbc:postgresql://host:5432/db 2spring.datasource.username=user 3spring.datasource.password=password
19. Variables de entorno en producción #
Nunca guardar contraseñas en el código.
Ejemplo:
1spring.datasource.password=${DB_PASSWORD}
El servidor definirá:
1export DB_PASSWORD=1234
20. Configuración de puerto #
Algunas plataformas usan puertos dinámicos.
Ejemplo:
1server.port=${PORT:8080}
21. Arquitectura de producción típica #
1Internet 2 ↓ 3Load Balancer 4 ↓ 5Spring Boot App 6 ↓ 7Database
En aplicaciones grandes puede haber múltiples instancias.
22. Monitorización #
En producción es importante monitorizar la aplicación.
Herramientas comunes:
1Prometheus 2Grafana 3ELK Stack
También se puede usar Spring Boot Actuator.
23. Spring Boot Actuator #
Añadir dependencia:
1<dependency> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-actuator</artifactId> 4</dependency>
24. Endpoint útil #
1/actuator/health
Devuelve estado del servidor.
Ejemplo:
1{ 2 "status": "UP" 3}
Resumen del tema
Conceptos clave #
- Empaquetado Fat-JAR (
mvn clean package): compilación de un artefacto.jarautocontenido con servidor Tomcat embebido y dependencias, ejecutable conjava -jar app.jar. - Servicio Systemd en Linux: configuración como demonio gestionado por el SO (
/etc/systemd/system/app.service) con arranque automático y reinicio tras fallos. - Contenedorización con Docker: creación de imágenes OCI optimizadas (multi-stage builds con JRE base) y despliegue estándar con
docker run -p 8080:8080. - Plataformas PaaS / IaaS: despliegue automatizado mediante repositorios Git (Railway, Render) o aprovisionamiento en servidores VPS/Cloud (AWS EC2, DigitalOcean).
- Observabilidad con Spring Boot Actuator: endpoints de salud y métricas operativas (
/actuator/health,/actuator/metrics,/actuator/info) integrables con Prometheus y Grafana.
Qué debes recordar #
Empaqueta la aplicación en un Fat-JAR o imagen Docker, inyecta configuración productiva por variables de entorno y expón métricas de salud con Spring Boot Actuator.