subir y desplegar un proyecto springboot a render
render es una plataforma en donde podemos desplegar nuestras aplicaciones de forma gratuita (tambien se puede contratar algun plan por si necesitamos mas recursos. Para pruebas sencillas basta con la capa gratuita)
Paso 1: Preparar tu Aplicación Spring Boot
a) Configurar el Puerto HTTP:
Spring Boot, por defecto, usa el puerto 8080. Render asigna un puerto dinámico mediante la variable de entorno PORT. Tu aplicación debe usar ese puerto.
En tu src/main/resources/application.properties:
server.port=${PORT:8080}
b) (Si usas Base de Datos) Usar Variables de Entorno:
Nunca hardcodees las credenciales de tu BD. Usa variables de entorno.
En application.properties:
spring.datasource.url=${DATABASE_URL}
spring.datasource.username=${DB_USERNAME}
spring.datasource.password=${DB_PASSWORD}
c) Crear un "Health Check" (Recomendado):
Render verifica que tu app esté viva haciendo una petición a un endpoint. Activa Spring Boot Actuator.
En tu pom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
En application.properties:
management.endpoints.web.exposure.include=health,info
management.endpoint.health.show-details=always
Render hará una petición a /actuator/health para verificar el estado.
d) Crear un Dockerfile (Opción A - Recomendada para más control)
Cre
a un archivo llamado Dockerfile (sin extensión) en la raíz de tu proyecto:
vvv
Paso 2: Subir tu Código a GitHub
Crea un repositorio en GitHub.
Sube todo tu código (incluyendo el
Dockerfilesi elegiste esa opción).
Paso 3: Desplegar en Render.com
Regístrate/Crea una cuenta en render.com (puedes usar tu cuenta de GitHub).
Crea un nuevo "Web Service":
En tu dashboard, haz clic en "New +" y selecciona "Web Service".
Render te pedirá conectar tu cuenta de GitHub y autorizar el acceso. Conectala y selecciona el repositorio de tu app.
Configura el Web Service:
Name: El nombre que tendrá tu app (e.g.,
mi-app-spring).Environment:
DockerRegion: Elige la más cercana a tus usuarios (e.g.,
Ohio (US East)).Branch:
main(o la rama que quieras desplegar).Root Directory: Déjalo en blanco si tu código está en la raíz del repo.
Build Command:
Si elegiste
Docker: No necesitas este campo.
Start Command:
Si elegiste
Docker: No necesitas este campo.
Plan: Elige
Freepara empezar.
Configura Variables de Entorno (Advanced Settings):
Aquí es donde agregas las variables que definiste en tu archivo .env (e.g.,
DB_USERNAME,DB_PASSWORD,DATABASE_URL).Si añades una base de datos en Render (más abajo), Render creará automáticamente una variable
DATABASE_URLque tu app usará.
Haz clic en "Create Web Service".
Render empezará automáticamente a construir y desplegar tu aplicación. Puedes ver los logs en tiempo real en la pestaña "Logs" de tu servicio.
¡Si el build tiene éxito, tu app estará viva! La URL tendrá la forma
https://tu-app.onrender.com.
Paso 4 (Opcional pero Recomendado): Crear una Base de Datos en Render
Render también ofrece bases de datos PostgreSQL gratis.
En el dashboard, haz clic en "New +" y selecciona "PostgreSQL".
Configúrala (Nombre, Plan Free, etc.) y haz clic en "Create".
Una vez creada, ve a la sección "Settings" de tu base de datos y encontrarás la Connection String (
DATABASE_URL), el usuario (DB_USERNAME) y la contraseña (DB_PASSWORD).Copia estos valores y agrégalos como Variables de Entorno en tu Web Service (ve a tu Web Service -> Settings -> Environment Variables).
✅ Para Verificar que Todo Funcionó
Ve a la URL de tu app (e.g.,
https://tu-app.onrender.com).Prueba el endpoint de health check:
https://tu-app.onrender.com/actuator/health. Debería responder con{"status":"UP"}.Prueba los endpoints principales de tu API.
Este error es muy común y tiene una solución directa. La librería dotenv-java que estás usando está buscando específicamente un archivo llamado .env en el classpath (la raíz de tu proyecto), pero en el entorno de producción (Render) ese archivo no existe o no está donde la librería lo espera.
¿Por qué ocurre esto?
Localmente: Tienes un archivo
.enven la raíz de tu proyecto con tus variables (claves de API, URLs de BD, etc.). Este archivo está listado en tu.gitignore, por lo que no se sube a GitHub (y es lo correcto, por seguridad).En Render: No existe el archivo
.envfísico. En su lugar, configuras las variables de entorno directamente en el dashboard de Render.
La librería dotenv-java por defecto intenta cargar el archivo .env y, al no encontrarlo, lanza esta excepción.
Solución 1 (Recomendada): Configurar la librería para que falle en silencio si no existe .env
Esta es la mejor práctica. Configura Dotenv para que solo intente cargar el archivo .env en entornos de desarrollo y dependa totalmente de las variables del sistema operativo en producción.
En tu código Java (donde configuras Dotenv), modifícalo así:
import io.github.cdimascio.dotenv.Dotenv; import jakarta.annotation.PostConstruct; import org.springframework.context.annotation.Configuration; @Configuration public class EnvConfig { @PostConstruct public void loadEnv() { // Solo cargar .env en desarrollo local // Render inyecta la variable RENDER automáticamente if (System.getenv("RENDER") == null) { try { Dotenv dotenv = Dotenv.configure() .ignoreIfMissing() // No lanzar excepción si no encuentra el archivo .load(); // Opcional: Poner las variables del .env en el System Environment // Esto asegura que @Value("${MI_VAR}") funcione tanto con .env como con variables del SO dotenv.entries().forEach(entry -> { String key = entry.getKey(); if (System.getenv(key) == null) { System.setProperty(key, entry.getValue()); } }); } catch (Exception e) { System.out.println("Info: No .env file found. Using system environment variables."); } } } }
Comentarios
Publicar un comentario