└── README.md /README.md: -------------------------------------------------------------------------------- 1 | # Render Deploy - SPRING API 2 | 3 | 4 | 5 | - [Render Deploy - SPRING API](#render-deploy-spring-api) 6 | 7 | - [Github Repo](#github-repo) 8 | - [Render](#render) 9 | - [Eclipse](#eclipse) 10 | - [Dependencias](#dependencias) 11 | - [Dockerfile](#dockerfile) 12 | - [Variables](#variables) 13 | - [Opcion 1](#opcion-1) 14 | - [Opcion 2](#opcion-2) 15 | - [Gradle](#gradle) 16 | - [gitignore](#gitignore) 17 | - [Servicio Java](#servicio-java) 18 | - [Pruebas](#pruebas) 19 | - [Ajustes finales](#ajustes-finales) - [Front adicional](#front-adicional) 20 | 21 | 22 | 23 | ## Github Repo 24 | 25 | Es necesario crear un nuevo repositorio en GitHub donde vamos a subir todo el proycto de Eclipse. 26 | Pero antes de subirlo hay que modificar algunas cositas en nuestro proyecto Gradle. 27 | 28 | ## Render 29 | 30 | - Entrar al sitio oficial de Render [https://dashboard.render.com] 31 | - Login con Github 32 | - Presionar el botón New -> Service -> PostgeSQL 33 | - Configurar los parámetros de la base de datos y presionar el botón `Create Database`: 34 | 35 | ```properties 36 | "name": "ProjectName", 37 | "user": "root" 38 | ``` 39 | 40 | - Presionar el botón `Create Database` y esperar que termine la configuración. 41 | - En un bloc de notas, guardar la información de la base de datos de Render 42 | - Ubicada en `Database` -> `Info`-> `Connections`. 43 | - Esta información incluye: `hostname, port, name_database, username` y `password`. 44 | - La información obtenida se guardará dentro de variables de entorno de la siguiente manera: 45 | 46 | ```properties 47 | ${PROD_DB_HOSTNAME}=Hostname 48 | ${PROD_DB_PORT}=Port 49 | ${PROD_DB_NAME}=Database 50 | ${PROD_DB_USERNAME}=Username 51 | ${PROD_DB_PASSWORD}=Password 52 | ``` 53 | 54 | ## Eclipse 55 | 56 | ### Dependencias 57 | 58 | - En el archivo `build.gradle` eliminar la dependencia de MySQL 59 | - Agregar la dependencia de PostgreSQL: 60 | 61 | ```*.properties 62 | implementation 'org.postgresql:postgresql:42.7.1' 63 | ``` 64 | 65 | ### Dockerfile 66 | 67 | - Crear un archivo llamado `Dockerfile` 68 | - click derecho sobre la carpeta del proyecto: 69 | - Project -> New -> File. 70 | -Dentro del archivo `Dockerfile` agregamos lo siguiente: 71 | 72 | ```docker 73 | FROM azul/zulu-openjdk:17-latest 74 | VOLUME /tmp 75 | COPY build/libs/*.jar app.jar 76 | ENTRYPOINT ["java","-jar","/app.jar"] 77 | EXPOSE 8080 78 | ``` 79 | 80 | ### Variables 81 | 82 | #### Opcion 1 83 | 84 | - Modificar el achivo `applications.properties`: 85 | - Se encuentra en la carpeta `src/main/resources` 86 | - Por seguridad, colocar las variables de entorno de la base de dato 87 | 88 | ```properties 89 | spring.datasource.url=jdbc:postgresql://${PROD_DB_HOSTNAME}:${PROD_DB_PORT}/${PROD_DB_NAME} 90 | spring.datasource.username=${PROD_DB_USERNAME} 91 | spring.datasource.password=${PROD_DB_PASSWORD} 92 | 93 | #Agregamos la configuración de `hibernate.dialect` aunque no es necesaria 94 | spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect 95 | spring.jpa.hibernate.ddl-auto=create 96 | 97 | logging.level.org.hibernate.SQL=DEBUG 98 | logging.level.org.hibernate.type=TRACE 99 | ``` 100 | 101 | #### Opcion 2 102 | 103 | - Crear un nuevo archivo `application-prod.properties` 104 | - Este servirá exclusivamente para configuración de producción. 105 | - No es necesario modificar `application.properties`. 106 | - Pega las mismas lineas de configuracion que la [Opcion 1](#opcion-1) 107 | 108 | #### Opcion 3 109 | 110 | - Modificar el achivo `applications.yml`: 111 | - Se encuentra en la carpeta `src/main/resources` 112 | - Por seguridad, colocar las variables de entorno de la base de dato 113 | 114 | ```yaml 115 | server: 116 | port: 8080 117 | 118 | spring: 119 | application: 120 | name: projectName 121 | 122 | datasource: 123 | url: jdbc:postgresql://${PROD_DB_HOSTNAME}:${PROD_DB_PORT}/${PROD_DB_NAME} 124 | username: ${PROD_DB_USERNAME} 125 | password: ${PROD_DB_PASSWORD} 126 | 127 | jpa: 128 | hibernate: 129 | ddl-auto: create 130 | 131 | logging: 132 | level: 133 | org.hibernate.SQL: DEBUG 134 | org.hibernate.type: TRACE 135 | ``` 136 | 137 | > Recuerda refrescar el proyecto de Gradle después creación y modificación. 138 | 139 | ### Gradle 140 | 141 | - En las tareas de Gradle (`Gradle Tasks`) seleccionar `build`. 142 | 143 | - Accede a la carpeta `build` en root del proyecto. 144 | - Una vez que haya terminado la ejecución 145 | - validar en la carpeta del proyecto que los archivos `.jar` fueron creados. 146 | - Estos archivos `.jar` son los que podremos subir para no exponer las contraseñas. 147 | 148 | - En la carpeta del proyecto ubicar el archivo `.gitignore`. 149 | - Comentar el directorio `build` y `src/main/**/build/`. 150 | - Guarda cambios. 151 | 152 | ### gitignore 153 | 154 | ```properties 155 | # build 156 | # !**/src/main/**/build/ 157 | ``` 158 | 159 | - Subir el proyecto al repositorio que creamos. 160 | 161 | ## Servicio Java 162 | 163 | - Presionar el botón `New -> WebService`. 164 | - Conectar con el repositorio que se acaba de crear en Github. 165 | - Escribir un nombre para la aplicación. 166 | - Seleccionar el `Tipo de instancia` como `Free`. 167 | - Ubicar la sección de `Variables de entorno`, en donde copiaremos las variables de entorno que definimos en el paso 3 de Eclipse, sin incluir los caracteres `$` y `{}`. 168 | - Si se creó un `application-prod.properties`: 169 | - Agregar una variable de entorno: 170 | - `SPRING_PROFILES_ACTIVE` con valor: `prod` 171 | - Para ello, presionamos el botón `Add Enviroment Variable` 172 | - Llenamos con los valores en nuestro bloc de notas. 173 | - Presionar el botón `Create Web Service` 174 | - Inicia el deploy y espera a que la aplicación termine de publicarse. 175 | 176 | ### Pruebas 177 | 178 | Para saber si el deploy finalizó con éxito, hay que localizar el mensaje `Your service is live 🎉` en la consola del Dashboard. 179 | 180 | Inmediamente, comenzar a crear datos de las entidades por medio de postman. 181 | 182 | > La versión gratuita de Render solo otorga un tiempo limitado de vida del deploy 183 | > y después entra en suspensión, siendo imposible reactivarlo (a menos que contrates un plan). 184 | 185 | - Copiamos la URL que se encuentra en la parte superior del dashboard. 186 | - La cual tiene dominio `.onrender` 187 | - Complementamos con el `endpoint` configurado en spring boot para 'postear' registros. 188 | 189 | ## Ajustes finales 190 | 191 | ### Front adicional 192 | 193 | 1. Modificar la url del fetch en el frontend con la nueva url que nos proporciona Render. 194 | 2. Dentro de `/static` que se encuentra en el directorio `src/main/resources` del proyecto: 195 | 2.1 Copiamos el frontend del proyecto. 196 | > _No olvides refrescar el proyecto_ 197 | 3. En `application.properties` o `application.yml` cambiar `ddl-auto` en `create` por `validate` 198 | 3.1 y repetir el paso 4 de Eclipse en el `build`: 199 | 200 | ```properties 201 | spring.jpa.hibernate.ddl-auto=validate 202 | ``` 203 | 204 | - Realizar commit y push 205 | - Esperar que termine el deploy. 206 | - **En el enlace principal de `.onrder` podemos acceder al fronted.** 207 | 208 | --------------------------------------------------------------------------------