Implementaci贸n de aplicaciones Spring Boot en Heroku

    Introducci贸n

    Al desarrollar una aplicaci贸n web, la progresi贸n natural es ponerla en l铆nea y ponerla a disposici贸n de los usuarios finales. Para que esta tarea sea posible y m谩s f谩cil, existen numerosas plataformas en la nube disponibles para elegir para alojar su aplicaci贸n: Heroku es uno de ellos.

    Heroku proporciona una plataforma como servicio para implementar aplicaciones de varias pilas de tecnolog铆a como Node, Java, Python, etc. Se encarga de todos los aspectos complicados de implementaci贸n, infraestructura, escalado, actualizaci贸n, seguridad, etc. y nos permite enfocarnos en la l贸gica de la aplicaci贸n y ofrecer m谩s valor a nuestros usuarios finales, en lugar de la implementaci贸n.

    En este art铆culo, crearemos una aplicaci贸n API REST de Spring Boot realmente simple que expondr谩 un punto final, y veremos varias formas de implementar la aplicaci贸n en Heroku.

    Crear una aplicaci贸n Spring Boot

    Inicializaci贸n de la aplicaci贸n Spring Boot

    Como siempre, la forma m谩s f谩cil de comenzar con un proyecto esqueleto de Spring Boot es usar el Spring Initializer:

    Elija su herramienta de construcci贸n preferida, usaremos Maven. La 煤nica dependencia que necesitaremos es la Spring Web dependencia.

    Alternativamente, podemos crear la aplicaci贸n usando el Spring Boot CLI:

    $ spring init --dependencies=web heroku-demo
    

    Crear un punto final REST

    Con nuestro esqueleto hecho, agreguemos un punto final REST simple:

    @RestController
    @RequestMapping("/api/v1.0")
    public class TimeController {
    
        @GetMapping("/time")
        @ResponseStatus(HttpStatus.OK)
        public String getCurrentTime() {
    
            return Instant.now().toString();
        }
    }
    

    En caso de que no est茅 familiarizado con el @RestController anotaci贸n, es una anotaci贸n de conveniencia hecha como una combinaci贸n de la @Controller y @ResponseBody anotaciones.

    Este punto final simplemente devolver谩 la hora actual del servidor a pedido. Ejecutemos la aplicaci贸n en nuestra m谩quina local y probemos si est谩 funcionando:

    $ mvn spring-boot:run
    

    O, usando su IDE, simplemente ejecute la aplicaci贸n y navegue hasta el localhost:8080/api/v1.0/time Direcci贸n URL:

    Alternativamente, puede utilizar una herramienta como curl para llegar al punto final:

    $ curl -X GET 'http://localhost:8080/api/v1.0/time'
    2020-01-04T13:19:30.980Z
    

    Implementaci贸n en Heroku

    Con nuestra aplicaci贸n preparada y lista, exploremos las diferentes formas en que podemos implementarla en Heroku.

    Usando la CLI de Heroku con Git

    Heroku ofrece su propia CLI, que podemos usar para implementar una aplicaci贸n. Para hacer esto, necesitamos instalar Heroku CLI y Git.

    Antes de intentar implementarlo, Heroku necesita que la aplicaci贸n est茅 en un repositorio de Git, as铆 que creemos un repositorio en nuestro directorio de proyectos:

    $ git init
    

    Una vez creado el repositorio, agreguemos y confirmemos los archivos:

    $ git add src/ pom.xml
    $ git commit -m "first commit with project base"
    

    El siguiente paso es iniciar sesi贸n en Heroku usando la CLI de Heroku y crear una aplicaci贸n Heroku:

    $ heroku login
    

    Le solicitar谩 un correo electr贸nico y una contrase帽a para su cuenta de Heroku:

    Enter your Heroku credentials:
    Email: ***********@gmail.com
    Password: ***********
    Logged in as **********@gmail.com
    

    Una vez que hayamos iniciado sesi贸n, creemos la aplicaci贸n:

    $ heroku create
    

    Relativamente r谩pido, estaremos atados con una aplicaci贸n:

    Creating app... done, 猬 arcane-journey-46830
    https://arcane-journey-46830.herokuapp.com/ | https://git.heroku.com/arcane-journey-46830.git
    

    los create comando agregar谩 un control remoto de Git llamado heroku a nuestro repositorio local de Git y tambi茅n agregue un nombre aleatorio – en nuestro caso es arcane-journey-46830.

    Finalmente, podemos implementar nuestro c贸digo:

    $ git push heroku master
    

    Heroku detectar谩 que se trata de una aplicaci贸n Java / Maven por la presencia del pom.xml archivo en el repositorio. Despu茅s de presionar, si echas un vistazo a los registros, podr谩s notar:

    Enumerating objects: 26, done.
    Counting objects: 100% (26/26), done.
    Delta compression using up to 4 threads
    Compressing objects: 100% (21/21), done.
    Writing objects: 100% (26/26), 2.96 KiB | 504.00 KiB/s, done.
    Total 26 (delta 5), reused 0 (delta 0)
    remote: Compressing source files... done.
    remote: Building source:
    remote:
    remote: -----> Java app detected
    remote: -----> Installing JDK 1.8... done
    remote: -----> Installing Maven 3.6.2... done
    remote: -----> Executing Maven
    ...
    

    Y finalmente, la implementaci贸n finaliza y se nos solicita una URL que conduce a nuestra aplicaci贸n:

    ...
    remote: -----> Compressing...
    remote:        Done: 65.7M
    remote: -----> Launching...
    remote:        Released v3
    remote:        **https://arcane-journey-46830.herokuapp.com/** deployed to Heroku
    remote:
    remote: Verifying deploy... done.
    To https://git.heroku.com/arcane-journey-46830.git
     * [new branch]      master -> master
    

    Probemos la aplicaci贸n nuevamente usando curl:

    $ curl -X GET 'https://arcane-journey-46830.herokuapp.com/api/v1.0/time'
    2020-01-04T13:51:31.559Z
    

    O navegando nuestro navegador a su URL:

    Complemento de implementaci贸n de Heroku

    Si queremos desplegar nuestra aplicaci贸n directamente sin usar un repositorio Git, podemos hacerlo usando el heroku-cli-deploy enchufar. Comencemos por instalarlo:

    $ heroku plugins:install heroku-cli-deploy
    

    Al igual que en la secci贸n anterior, le pedimos a Heroku que cree la aplicaci贸n, pero esta vez incluimos una --no-remote argumento para evitar que se le solicite el repositorio de Git:

    $ heroku creare heroku-demo-Pharos.sh --no-remote
    

    Tenga en cuenta que esta vez hemos mencionado el nombre de una aplicaci贸n: heroku-demo-Pharos.sh. Esto crear谩 la aplicaci贸n con un nombre dado y no generar谩 un nombre aleatorio como en la secci贸n anterior.

    Tambi茅n debemos mencionar el puerto en el que Heroku vincular谩 la aplicaci贸n en el application.properties archivo:

    server.port=${PORT:8080}
    

    Nota: Esto es necesario ya que Heroku vincula la aplicaci贸n a un puerto pasado como PORT variable de entorno y Spring Boot por defecto expone el 8080 Puerto. Aqu铆, le pedimos a Spring que use PORT y volver a 8080 en caso de que la variable de entorno no est茅 presente, es decir, estamos ejecutando localmente.

    Finalmente, construimos nuestra aplicaci贸n con Maven para crear el jar archivarlo e implementarlo:

    $ mvn clean package
    
    $ heroku deploy:jar target/heroku-demo.0.0.1-SNAPSHOT.jar --app heroku-demo-Pharos.sh
    

    Complemento Maven

    Puede haber escenarios en los que nos gustar铆a realizar la implementaci贸n como parte de nuestra compilaci贸n de Maven. Esto es posible usando el Complemento Heroku Maven. Pongamos la configuraci贸n del plugin en nuestro pom.xml:

    ...
    <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
                <plugin>
                    <groupId>com.heroku.sdk</groupId>
                    <artifactId>heroku-maven-plugin</artifactId>
                    <version>{version}</version>
                    <configuration>
                        <appName>heroku-demo-Pharos.sh</appName>
                        <includeTarget>false</includeTarget>
                        <includes>
                            <include>${project.build.directory}/${project.build.finalName}.jar</include>
                        </includes>
                        <jdkVersion>1.8</jdkVersion>
                        <processTypes>
                            <web>java $JAVA_OPTS -jar
                                ${project.build.directory}/${project.build.finalName}.jar</web>
                        </processTypes>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    ...
    

    Siempre, busque la 煤ltima versi贸n del plugin aqu铆.

    Como paso final, necesitamos establecer una variable de entorno: HEROKU_API_KEY. Este paso es necesario solo si no ha iniciado sesi贸n en la CLI de Heroku para obtener autorizaci贸n. La clave API se puede encontrar en su panel de Heroku. cuenta:

    Y ahora podemos usar el heroku:deploy objetivo de implementar la aplicaci贸n:

    $ mvn clean heroku:deploy
    

    Panel de Heroku con GitHub

    Con los enfoques program谩ticos / CLI fuera del camino, tambi茅n hay un enfoque GUI realmente f谩cil de usar. Podemos crear una aplicaci贸n en el Panel de Heroku, vinc煤lelo con una cuenta de GitHub e implem茅ntelo desde all铆.

    Navega a la opci贸n “nueva aplicaci贸n”:

    A continuaci贸n, conecte su cuenta de GitHub y busque su repositorio para conectarse:

    Una vez conectado, puede implementar su aplicaci贸n eligiendo una rama para implementar o eligiendo directamente la rama maestra. Adem谩s, puede optar por habilitar implementaciones autom谩ticas basadas en confirmaciones en una rama en particular:

    Verificaci贸n de registros de aplicaciones implementadas

    La verificaci贸n de los registros de la aplicaci贸n implementada puede resultar 煤til para muchos prop贸sitos. Afortunadamente, es muy f谩cil acceder a ellos.

    Usando la CLI, es solo un comando:

    $ heroku logs --tail
    

    Esto permitir铆a ver los registros en ejecuci贸n:

    Alternativamente, el Panel de Heroku nos permite acceder a ellos a trav茅s del lado derecho M谩s> Ver registros:

    Heroku Procfile

    El Procfile se puede utilizar para configurar o anular la configuraci贸n y los comandos predeterminados de la aplicaci贸n. Por ejemplo, mientras implementamos la aplicaci贸n usando el plugin de implementaci贸n de Heroku, hemos agregado informaci贸n de puerto en el application.properties.

    Esto tambi茅n podr铆a agregarse al Procfile. Agregar铆amos comandos para ejecutar la aplicaci贸n como:

    web: java $JAVA_OPTS -jar target/heroku-demo-0.0.1-SNAPSHOT.jar -Dserver.port=$PORT
    

    Aqu铆, agregamos un comando para ejecutar la aplicaci贸n con Java y agregamos un argumento JVM para anular el enlace de puerto predeterminado de Spring Boot.

    Eliminar la aplicaci贸n de Heroku

    En alg煤n momento, es posible que desee eliminar su aplicaci贸n de Heroku, por cualquier motivo. Esto se hace mediante un comando simple:

    $ heroku apps:destroy --confirm arcane-journey-46830
    

    Podemos ejecutar el comando sin el --confirm , pero en ese caso, le pedir谩 que ingrese el nombre de la aplicaci贸n.

    Alternativamente, podemos eliminar la aplicaci贸n de la configuraci贸n del Panel de Heroku:

    Conclusi贸n

    Con la creciente popularidad de la computaci贸n en la nube, es importante saber c贸mo podemos implementar y administrar nuestra aplicaci贸n en una plataforma en la nube.

    Heroku es una plataforma como servicio para implementar, administrar y escalar aplicaciones. Tambi茅n proporciona implementaciones gratuitas con dinam贸metros gratuitos. Estas implementaciones gratuitas se pueden utilizar para cualquier demostraci贸n o evaluaci贸n, pero definitivamente no son adecuadas para aplicaciones de producci贸n en vivo.

    En este art铆culo, hemos cubierto varias formas de implementar aplicaciones Spring Boot en Heroku: utilizando la CLI de Heroku, el plugin de implementaci贸n de Heroku, el plugin Maven y finalmente el enfoque de GUI a trav茅s de un repositorio de GitHub.

    Todas las implementaciones realizadas aqu铆 se implementan en el banco de pruebas gratuito. Tenga en cuenta que estos dinam贸metros gratuitos se detendr谩n cuando no estemos usando la aplicaci贸n durante un per铆odo de tiempo determinado. Volver谩n a girar cuando hayamos pulsado la aplicaci贸n. Por lo tanto, es posible que enfrentemos algunos retrasos cuando intentemos llegar a nuestra aplicaci贸n despu茅s de mucho tiempo.

     

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *