Desplegar una aplicación java en Heroku
En esta sección se explicará cómo desplegar una aplicación java en la plataforma Heroku Heroku.. Es un proces procesoo relati relativam vament entee sencil sencillo lo y no requie requiere re con conoci ocimie miento ntoss sobre sobre instalación o configuración de servidores. Requerimientos: • • •
ener una cuenta en Heroku !ava instalado "aven # instalado
$onfiguración %nicial: En este paso& se instalará Heroku oolbelt. Esta 'erramienta provee el acceso a la l(nea de comandos de Heroku. oolbelt se puede obtener a trav)s del siguiente enlace: 'ttps:**s#.ama+ona,s.com*assets. 'ttps:**s#.ama+ona ,s.com*assets.'eroku.com*'erok 'eroku.com*'eroku-toolbelt*'eroku-toolbelt.ex u-toolbelt*'eroku-toolbelt.exee na ve+ instalado& puedes usar el comando /'eroku0 desde el terminal. sa la aplicación /1it 2as'0 para abrir una consola de comandos en 3indo,s. 4uedes acceder a ella desde el acceso directo que se creó durante la instalación de oolbelt. %nicia sesión usando el correo electrónico y la clave de tu cuenta en Heroku.
4resiona enter en la consola para subir tu llave /s'0. 5i no tienes una& puedes crearla a'( mismo. 5i deseas verificar que tu llave 'a sido a6adida& escribe /'eroku keys0. 5i la llave no se muestra& puedes insrtarla escribiendo /'eroku keys:add0. 4reparar la aplicación: En este paso& se preparará una aplicación simple para que pueda ser desplegada. Ejecuta los siguientes comandos para clonar la aplicación de ejemplo:
7uego de esto tendrás un repositorio git funcional que contiene una aplicación simple as( como tambi)n un arc'ivo /pom.xml0 usado por el administrador de dependencias java: "aven. 8esplegar la aplicación: $rea una aplicación en Heroku usando /'eroku create0& con lo cual Heroku se prepara para recibir tu código fuente.
/--'ttp-git0 es una caracter(stica beta de Heroku que se asegura de que las futuras interacciones con Heroku v(a git sean a trav)s de H4. 5i en ve+ de esto deseas usar el tradicional 55H& ejecuta el comando /'eroku create0 sin el flag /--'ttp-git0. Esto tambi)n crea un repositorio remoto 9llamado /'eroku0 en este caso que se configura en tu repositorio git local. Heroku genera un nombre aleatorio 9en este caso ,arm-eyrie-;<<= para tu aplicación. 4uedes pasarle los parámetros que quieras o renombrarla despu)s con /'eroku apps:rename0. >'ora despliega tu código con /git pus' 'eroku master0:
>'ora que tu aplicación ya está desplegada& aseg?rate de que al menos una instancia de la misma est) corriendo:
>'ora visita el R7 generado usando el nombre de la aplicación:
@er los logs: Heroku trata a los logs como eventos en streaming ordenados por tiempo y junta en un solo canal todos los logs de todas tus aplicaciones y componentes.
5i visitas otra ve+ tu aplicación en el navegador otra ve+& verás que se generó otro log. 4resiona /ctrl A c0 para detener el streaming de logs. 8efinir un procfile: n 4rocfile es un arc'ivo de texto que se encuentra en el directorio ra(+ de tu aplicación usado para declarar que comando debe ser ejecutado para iniciarla. El procfile de la aplicación ejemplo que acabas de desplegar luce as(:
7a l(nea anterior declara un proceso de tipo /,eb0 y el comando necesario para ejecutarlo. El nombre /,eb0 es importante aqu(& pues declara que este tipo de proceso será a6adido a la pila de la ruta H4 y recibirá tráfico ,eb cuando la aplicación sea desplegada. 7a sintaxis de /4roclife0 es importante B Heroku corre el comando exacto especificado cuando iniciali+a un dyno B y lo ejecuta en un entorno nix. 5i ejecutas tu aplicación en 3indo,s& es probable que recibas un error debido a que la forma en que nix pasa las variables de entorno 9/C!>@>D450 y la forma de concatenar rutas 9/:0 es incompatible. 4ara ejecutar una aplicación en 3indo,s:
•
•
•
$rea un nuevo arc'ivo& /4rocfile.,indo,s0 >6ade una l(nea para indicar como iniciali+ar la aplicación bajo /3indo,s: ,eb: java F!>@>D45F -cp targetGclassesItargetGdependencyGJI "ain/ $uando veas las instrucciones para correr tu aplicación con Koreman& a6ade un flag /-f 4rocfile.,indo,s0 para asegurarte que tu arc'ivo /4roclide.,indo,s0 sea detectado. 4or ejemplo: foreman start ,eb -f 4rocfile.,indo,s
7os 4rocfile pueden contener tipos de procesos adicionales. 4or ejemplo& puedes declarar uno para un proceso de fondo /,orker0 que este procese (tems de una cola. Escalar la aplicación: En este momento& la aplicación está ejecutándose en un solo dyno. 4iensa en un dyno como en un contenedor ligero que ejecuta el comando especificado en el proclife. 4uedes verificar cuántos dynos se están ejecutando escribiendo el comando /ps0.
5i un solo dyno está corriendo sin 'acer nada& este pasará al modo inactivo. En el momento en el que se le 'aga un LrequestM al dyno& este se activará de nuevo luego de un corto periodo de retraso. 4ara prevenir esto& puedes escalar a un segundo dyno ,eb.
4ara prevenir abusos sobre el servicio& el escalar la aplicación requiere autenticación de usuario. Ejecutar más de un dyno al mismo tiempo tiene un costo monetario en Heroku& por lo que deber(as escalar 'acia atrás.
8eclarar dependencias de aplicaciones: Heroku reconoce que una aplicación es una app !ava por la existencia del arc'ivo /pom.xml0 en el directorio ra(+. 4uedes crear un arc'ivo /pom.xml0 desde cero usando el comando /mvn clean install0. 7a aplicación desplegada ya tiene un arc'ivo /pom.xml0:
El arc'ivo /pom.xml0 establece las dependencias que deber(an ser instaladas en tu aplicación. $uando una aplicación es desplegada& Heroku lee el arc'ivo mencionado e instala las dependencias mediante el comando /mvn clean install0. tro
arc'ivo:
/java.properties0
determina
que
versión
de
java
usar.
%ntroduce el comando /mvc clean install0 para instalar las dependencias y preparar al sistema para que corra la aplicación localmente.
na ve+ terminada la instalación& la aplicación estará lista para ejecutarse localmente
Desplegar una aplicación java en Heroku
En esta sección se explicará cómo desplegar una aplicación java en la plataforma Heroku. Es un proceso relativamente sencillo y no requiere conocimientos sobre instalación o configuración de servidores. Requerimientos: • •
ener una cuenta en Heroku !ava instalado
•
"aven # instalado
$onfiguración: En este paso& se instalará Heroku oolbelt. Esta 'erramienta provee el acceso a la l(nea de comandos de Heroku. oolbelt se puede obtener a trav)s del siguiente enlace: 'ttps:**s#.ama+ona,s.com*assets.'eroku.com*'eroku-toolbelt*'eroku-toolbelt.exe na ve+ instalado& puedes usar el comando /'eroku0 desde el terminal. sa la aplicación /1it 2as'0 para abrir una consola de comandos en 3indo,s. 4uedes acceder a ella desde el acceso directo que se creó durante la instalación de oolbelt. %nicia sesión usando el correo electrónico y la clave de tu cuenta en Heroku.
4resiona enter en la consola para subir tu llave /s'0. 5i no tienes una& puedes crearla a'( mismo. 5i deseas verificar que tu llave 'a sido a6adida& escribe /'eroku keys0. 5i la llave no se muestra& puedes insrtarla escribiendo /'eroku keys:add0. 4reparar la aplicación: En este paso& se preparará una aplicación simple para que pueda ser desplegada
Ejecutar la aplicación a nivel local
>'ora& iniciar la aplicación a nivel local utili+ando /Koreman0& que fue instalado como parte de la 'erramienta oolbelt
>l igual que Heroku & /Koreman0 examina el arc'ivo /4rocfile0 para determinar qu) se ejecute. 7a aplicación está ejecutando en el puerto N<<< con la dirección 'ttp: ** local'ost: N<<<. 4ara ejecutar la aplicación en el servidor local se puede ingresar el comando /curl0 o verificar por medio de un cliente ,eb.
Koreman no sólo ejecutar la aplicación& tambi)n establece variables con configuración /config varsI& que es un tema que se tratara en detalle en otro apartado. Guardar las configuraciones locales
En este paso usted aprenderá cómo propagar un cambio local a la aplicación a trav)s de Heroku. > modo de ejemplo& podrás modificar la aplicación para agregar una dependencia adicional y el código para utili+arlo. >brir el arc'ivo de configuración pom.xml para agregar una dependencia / jscience0. 7as sección de /dependencies0 debe contener los siguientes campos.
"odificar src * main * java * "ain.java lo que importa esta biblioteca al inicio. >demás de modificar la llamada a la ruta que se encarga de O*O a usarlo. El código final debe ser similar a esto:
"odificar el m)todo s'o,'ome 9 para que se lea as(:
>qu( está el código fuente final para "ain.java & el cual deber(a contener lo siguiente:
>'ora se reali+a la prueba a nivel local:
@isitar la aplicación en la ruta 'ttp: ** local'ost: N<<<& deber(a ver algunas grandes conversiones cient(ficas muestran:
>'ora desplegar. $asi todas las despliegues en Heroku siguen este mismo patrón. En primer lugar& se agregan los arc'ivos modificados al repositorio git local:
>'ora confirmar los cambios en el repositorio:
%mplementar >'ora& tal anteriormente $omo lo Hi+o:
4or ltimo& comprobar que todo se está ejecutándo correctamente.
Agregar complementos
7os complementos son los servicios cloud de terceros que prestan servicios adicionales fuera del entorno de desarrollo de su aplicación& de la persistencia a trav)s de la tala para la vigilancia y más. 4or defecto& las tiendas Heroku P.N<< l(neas de registros de la aplicación. 5in embargo& 'ace que la secuencia de registro completo disponible como un servicio - y los servicios de registro de varios proveedores de complementos de 'an escrito que proporcionan cosas tales como la persistencia de registro& b?squeda y correo electrónico y 5"5 cuando se cumplen ciertas condiciones.
4ara ayudar con la prevención del abuso& el aprovisionamiento de un add-on puede requerir verificación de la cuenta. 5i su cuenta no 'a sido verificada& se le dirigirá a un sitio de verificación. El add-on está implementada y configurada para su aplicación. 4uede enumerar los complementos para su aplicación& as(:
4ara ver este complemento en particular& en acción& visite Heroku R7 de la aplicación varias veces. $ada visita generará más mensajes de registro& que a'ora debe quedar dirigida a las 4aperrail complemento. @isita la consola 4aperrail para ver los mensajes de registro:
na consola se abrirá& mostrando los ?ltimos eventos de registro& y que le proporciona una interfa+ para buscar y configurar alertas:
%niciar un banco de pruebas 4uede ejecutar un comando& t(picamente scripts y aplicaciones que forman parte de su aplicación& en un banco de pruebas de una sola ve+ utili+ando el comando de marc'a Heroku. ambi)n se puede utili+ar para poner en marc'a un proceso RE47 conectado a su terminal local para experimentar en el entorno de su aplicación& o código a medida que se implementó con su solicitud:
Qo te olvides de escribir exit para salir de la cáscara y terminar el banco de pruebas.
Definir Variable de Configuracion “Vars Config”
Heroku le permite externali+ar configuración - almacenamiento de datos& tales como claves de cifrado o direcciones de recursos externos en vars config. En tiempo de ejecución& vars config se exponen como variables de entorno a la aplicación. 4or ejemplo& modifique src * main * java * "ain.java para que el m)todo se repite toma un valor de energ(a a partir de la variable de entorno EQER1>:
>'ora compila la aplicación de nuevo para que este cambio se integra mediante la ejecución mvn clean install.
$apata+ configurará automáticamente el medio ambiente basado en el contenido del arc'ivo .env en su directorio local. $rear un arc'ivo .env que tiene el siguiente contenido:
5i ejecuta la aplicación con inicio capata+ y lo visita en la dirección 'ttp: ** local'ost: N<<<& verá el valor de conversión de S< 1e@. 4ara establecer el var config en Heroku& ejecutar lo siguiente:
> continuación se muestran las variables de configuración que se establecen con config Heroku:
Coneión a base de datos
El add-on mercado tiene un gran n?mero de almacenes de datos& desde Redis y "ongo82 proveedores& a 4ostgres y "y5T7. En este paso usted aprenderá acerca de los libres Heroku 4ostgres complemento que se aprovisiona automáticamente despliega toda aplicación !ava. na base de datos es un complemento& y para que pueda conocer un poco más sobre la base de datos proporcionado para su aplicación con el comando de complementos en la $7%:
7istado de las vars de configuración para su aplicación se mostrará la dirección R7 que su aplicación está utili+ando para conectarse a la base de datos& 8>>2>5EDR7:
Heroku tambi)n proporciona un comando pg que muestra muc'o más:
Esto indica que tengo una base de datos de man(a 9gratis& que ejecuta 4ostgres ;.#.#& con una sola fila de datos. El ejemplo aplicación ya 'a implementado tiene una funcionalidad de base de datos& que usted deber(a ser capa+ de llegar visitando la R7 de su aplicación y a6adiendo * db. 4or ejemplo& si su aplicación se desplegó a 'ttps:**,onderful-app-SUV.'erokuapp.com* luego visitar 'ttps:**,onderful-app-SUV.'erokuapp.com*db. El código para acceder a la base de datos es sencillo. >qu( está el m)todo get$onnection 9 que recupera el 8>>2>5EDR7 variable de entorno establecido por la base de datos complemento& y establece una conexión:
W aqu( 'ay un m)todo para insertar valores en una tabla llamada garrapata:
Esto asegura que cuando acceda a su aplicación utili+ando la ruta * db& se a6adirá una nueva fila a la tabla de la garrapata& y todas las filas será regresada para que puedan ser prestados en la salida. %mplemente este a Heroku. >'ora& cuando se accede a la ruta * db de su aplicación& verá algo como esto:
>sumiendo que el usuario tiene 4ostgres instalados localmente& utilice el Heroku pg: comando psql para conectarse a la base de datos remota y ver todas las filas: