Curso de Heroku

¿Qué es Heroku?

Heroku es un PaaS (Platform as a Service o plataforma como servicio) que nos permitirá alojar, sin conocimientos de administración de servidores, nuestros desarrollos web.

En este sentido, Heroku es similar a otros servicios como AWS (Amazon Web Service), sólo que AWS es un IaaS (Infrastructure as a Service), y por tanto precisa que tengamos conocimientos de administración de servidores para poder utilizarlo.

Curso de Heroku 1

Dicho de manera sencilla, Heroku es un servicio web que nos va a permitir alojar y ejecutar el código fuente de nuestra aplicación. En Heroku, podremos alojar gratuitamente una aplicación programada con PHP, Java, NodeJS, etc.

Aunque hay varios servicios de alojamiento que nos permiten desplegar una aplicación con PHP, en el caso de NodeJS y Java se hace más complicado encontrar un servicio solvente y gratuito en el que poder desplegar nuestros desarrollos. En este sentido, Heroku es la solución ganadora. Además de contar con una opción gratuita de uso podrás aubir tus aplicaciones sin necesidad de tener conocimientos sobre administración de servidores. Basta con que selecciones las tecnologías que quieres usar y poco más.

Modalidades

Heroku cuenta con dos modalides de contratación:

  • Plan gratuito. Entra en modo sleep tras 30 minutos de inactividad, de tal forma que la siguiente petición que se haga al servidor será más lenta, pues deberá despertar la plataforma.
  • De pago. Cuesta 7 euros al mes.

Aunque no contratemos un servicio de pago, será necesario introducir nuestros datos bancarios para poder hacer uso de Heroku.

Pasos específicos para Java

1. Partiremos de un proyecto Maven. Puedes ver cómo crearlo en este enlace.

2. Para poder ejecutar aplicaciones de Java en Heroku, habrá que vincularles el plugin webapp runner (https://devcenter.heroku.com/articles/java-webapp-runner).

Tienes el código que usaremos justo debajo.

pom.xml

<build>
    ...
    <plugins>
        ...
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>3.0.2</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals><goal>copy</goal></goals>
                    <configuration>
                        <artifactItems>
                            <artifactItem>
                                <groupId>com.github.jsimone</groupId>
                                <artifactId>webapp-runner</artifactId>
                                <version>8.5.31.0</version>
                                <destFileName>webapp-runner.jar</destFileName>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

La versión del webapp runner está vinculada a la versión de Apache Tomcat; es decir, la versión 8.5.23.0 de webapp runner usa la versión 8.5.23.0 de Apache Tomcat.

3. Debemos asignar dynos a nuestro proyecto, para ello creamos el siguiente fichero en la raíz del proyecto:

Procfile

web: java -Dserver.port=$PORT -jar target/*.war

4. Debemos especificar la versión de Java que usaremos, en nuestro caso la 17, para ello crearemos el siguiente fichero en la raíz del proyecto:

system.properties

java.runtime.version=17

Instalación de un proyecto en Heroku

Subimos el proyecto a Github
Puedes seguir los pasos de esta guía.
Creación de la cuenta en heroku
1. Nos logueamos en https://heroku.com
2. Entramos en el escritorio (https://dashboard.heroku.com/apps).
3. New -> Create new app
4. Le asignamos un nombre -> Create app

5. En Deployment method escogeremos conectarmos a GIT.
Curso de Heroku 2
De esta forma, cada vez que hagamos una subida a github, esta se deplegará en heroku automáticamente.

Instalación de una base de datos

  1. Menú hamburguesa → Elements
  2. Selecciono ClearDB MySQL
  3. Install ClearDB MySQL
  4. Selecciono el proyecto al que quiero añadir la base de datos
  5. Pulsamos sobre Provision add-on (necesitaremos tener configurada una tarjeta bancaria)
  6. Debemos esperar unos minutos a que la base de datos sea creada, o cuando nos intentemos conectar a ella nos dará un error de conexión.
  7. Ejecutando en la carpeta de nuestro proyecto el comando:
heroku apps

Podremos ver las aplicaciones de Heroku que hay instaladas en nuestra cuenta. Nos fijamos en el nombre de la aplicación de la que queremos obtener los datos de conexión a la base de datos (por ejemplo, una llamada termine) y ejecutamos el comando:

heroku config -a termine

podremos ver los datos de conexión a la base de datos. Usaremos estos datos en el workbench. Por ejemplo, para esta url:

mysql://be45deb9852070:798cb3e2@eu-cdbr-west-02.cleardb.net/heroku_83c786ff2b6e84d?reconnect=true

Usuario: be45deb9852070
Password: 798cb3e2
Nombre Base de datos: heroku_83c786ff2b6e84d
host: eu-cdbr-west-02.cleardb.net

Ver la las trazas

heroku logs --tail

Aquí veremos los logs de los errores y los console.log escritos (si estamos ejecutando nodejs).

Debemos fijarnos sobre todo en la parte alta de las trazas.

Lanzar el proyecto

heroku open

Instalación de un proyecto HTML y CSS o PHP en Heroku

  1. Clonamos el siguiente proyecto:git clone https://github.com/heroku/php-getting-started.git
  2. Pegamos nuestro código HTMl / CSS / Javascript / PHP en la carpeta web y lo subimos al servidor de Heroku.

Vincular heroku a dominio

1. A continuación añadiremos el dominio a Heroku:

heroku domains:add www.amor2.cat

Es importante que sigamos este orden.

2. Para saber si www.amor2.cat es un alias de mi aplicación de heroku, usaremos

host www.amor2.cat

Cuando dejemos de obtener el mensaje «Host www.amor2.cat not found: 2(SERVFAIL)» será que los cambios se han propagado.

3. Comprobamos el registro CNAME asociado. Para obtener información de los dominios y saber que dns’s debemos pegar, usaremos el comando:

heroku domains

4. Vamos al proveedor de dominio -> Dominios -> Zonas DNS -> Añadimos un registro CNAME

La imagen tiene un atributo ALT vacío; su nombre de archivo es cname.png