¿Cómo implementar una aplicación en Heroku?

Back4app Heroku App Deploy Cover

Este tutorial cubre el proceso de implementación de una aplicación basada en Python en Heroku. Al leer este artículo, podrá comprender las funcionalidades principales de Heroku, el proceso de implementación de la aplicación de Heroku y cómo implementar una aplicación en Heroku.

Además de eso, proporciona instrucciones sobre cómo implementar la misma aplicación en Back4app Containers, una excelente alternativa gratuita a Heroku.

Objetivos

Al final de este tutorial, podrá:

  • Comprender Heroku y su funcionalidad
  • Implementar sus aplicaciones en Heroku
  • Conocer Back4app Containers y sus características
  • Implementar sus aplicaciones en Back4app Containers
  • Determinar qué servicio usar para su aplicación

¿Qué es Heroku?

Heroku, fundada en 2007, es una de las plataformas de plataforma como servicio (PaaS) más confiables. La plataforma en la nube le permite crear, administrar, implementar y escalar aplicaciones fácilmente.

Es compatible de forma nativa con Ruby, Python, Java, Clojure, Node, Scala, Go y PHP. Sin embargo, le permite implementar otros lenguajes y marcos de programación a través de Docker.

Las principales ventajas de Heroku incluyen facilidad de uso, capacidades de escalabilidad, funciones de seguridad, complementos, Heroku CLI y estar centrado en el desarrollador.

Por otro lado, Heroku es a menudo criticado por ser caro, tener un apoyo regional inadecuado y estar atrasado en las últimas tendencias de desarrollo.

Una de las principales razones por las que Heroku es tan popular es porque ofrece servicios gratuitos en el pasado. Hasta noviembre de 2022, podrá utilizar Heroku para alojar sus aplicaciones e incluso bases de datos de forma totalmente gratuita.

Lamentablemente, decidieron cancelar estos servicios gratuitos para combatir el fraude y el abuso del nivel gratuito. A pesar de los cambios recientes, Heroku sigue siendo una de las plataformas de alojamiento más populares. Continúe leyendo para aprender cómo implementar en Heroku.

Para obtener más información sobre Heroku, consulte nuestro otro artículo llamado ¿Qué es Heroku?

Configuración del proyecto

Para demostrar cómo implementar aplicaciones en Heroku y Back4app Containers, preparé una aplicación web simple para indicarle cómo implementar una aplicación Python en Heroku. La aplicación web utiliza el marco FastAPI y sirve como un simple servicio de acortamiento de URL. Viene con dos puntos finales:

  1. /shorten asigna un lias to a long_url
  2. /<alias> rredirige al usuario a la long_url correspondiente

Siéntase libre de poner a prueba su comprensión siguiendo su propio proyecto.

Requisitos previos

Clonar y ejecutar

La implementación de Heroku comienza bifurcando este repositorio en GitHub y luego clonando la bifurcación en su máquina local:

$ git clone <fork_remote_git_url>
$ cd back4app-heroku-deploy

Si no desea bifurcar, puede crear su repositorio y enviarle el código fuente.

Cree un entorno virtual y actívelo:

$ python -m venv env && source env/bin/activate

A continuación, instale los requisitos del proyecto:

(env)$ pip install -r requirements.txt

Por último, inicie el servidor de desarrollo:

(env)$ python -m uvicorn main:app --reload 

INFO:     Will watch for changes in these directories: [...]
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [1488] using WatchFiles
INFO:     Started server process [2316]
INFO:     Application startup complete.

Abra su navegador web favorito y navegue hasta http://localhost:8000/docs. Utilice la documentación interactiva para probar la aplicación web. Si necesita ayuda para formatear las solicitudes, consulte el archivo test_main.http.

¿Cómo implementar una aplicación en Heroku?

En esta sección, implementaremos una aplicación en Heroku.If you delete your app right after the tutorial, you shouldn’t be charged anything.

Los siguientes pasos requerirán una cuenta Heroku. Si aún no tiene una, regístrese. Además de eso, asegúrese de agregar información de pago a su cuenta Heroku.

Si elimina su aplicación inmediatamente después del tutorial, no se le debería cobrar nada.

Cambie a una nueva rama llamada heroku:

$ git checkout -b heroku

Objetivos

  1. Instale la CLI de Heroku.
  2. Cree una aplicación Heroku.
  3. Especifique el tiempo de ejecución mediante runtime.txt.
  4. Especifique los procesos de la aplicación a través de Procfile.
  5. Envíe el código fuente a Heroku.

CLI de Heroku

Hay varias formas de interactuar con Heroku. Puede utilizar el panella CLI de Heroku o la API de Heroku.

Prefiero la CLI de Heroku porque es una herramienta poderosa que le permite realizar el trabajo rápidamente. Lo usaremos a lo largo del tutorial.

Primero, instale la CLI de Heroku siguiendo las instrucciones de instalación oficiales.

Después de eso, asegúrese de que la instalación se haya realizado correctamente comprobando la versión de CLI:

$ heroku --version
heroku/8.4.2 win32-x64 node-v16.19.0

A continuación, busque actualizaciones de CLI y autentíquese utilizando su cuenta Heroku:

$ heroku update
$ heroku login

Al ejecutar el segundo comando, se abrirá una ventana del navegador. Para autenticarse, haga clic en “Iniciar sesión” y cierre la ventana del navegador.

Crear aplicación Heroku

Para implementar en Heroku, primero debe crear una aplicación Heroku.

Abra la terminal una vez más, navegue hasta su proyecto local (por ejemplo, la carpeta back4app-heroku-deploy) y ejecute el siguiente comando:

$ heroku create -a <app_name>

Creating ⬢ <app_name>... !
https://<app_name>-31a6fd70e769.herokuapp.com/ | 
https://git.heroku.com/<app_name>.git

Asegúrese de reemplazar <app_name> con el nombre de aplicación deseado.

A continuación, verifique si la aplicación se creó correctamente enumerando las aplicaciones:

$ heroku apps

=== <email_address> Apps
<app_name>

Luego verifique los detalles de la aplicación:

$ heroku apps:info <app_name>

=== <app_name>
Auto Cert Mgmt: false
Dynos:
Git URL:        https://git.heroku.com/<app_name>.git
Owner:          <email_address>
Region:         us
Repo Size:      0 B
Slug Size:      0 B
Stack:          heroku-22
Web URL:        https://<app_name>-21de155883d3.herokuapp.com/

Como sabrá, Heroku está estrechamente integrado con Git. A medida que crea una aplicación Heroku, se crea un repositorio Git remoto al que puede enviar su código fuente para implementarlo. En nuestro caso, la URL remota de Git es:

https://git.heroku.com/<app_name>.git

Heroku CLI registra automáticamente un control remoto Git cuando crea una aplicación. Intente enumerar los controles remotos:

$ git remote -v

heroku  https://git.heroku.com/back4app-url-shortener.git (fetch)
heroku  https://git.heroku.com/back4app-url-shortener.git (push)
origin  [email protected]:duplxey/back4app-heroku-deploy.git (fetch)
origin  [email protected]:duplxey/back4app-heroku-deploy.git (push)

Usaremos el control remoto heroku en la siguiente sección para implementar nuestro código fuente.

runtime.txt

Un archivo runtime.txt le permite especificar la versión exacta de Python que desea que use Heroku. Esto es importante si su proyecto requiere una versión específica de Python para funcionar. Al momento de escribir este artículo, el valor predeterminado es python-3.11.5.

Para especificar el tiempo de ejecución, cree un archivo runtime.txt que contenga la versión del tiempo de ejecución. Ejemplo:

python-3.11.5

Para obtener la lista de tiempos de ejecución de Python compatibles, consulte Soporte de Python de Heroku.

Procfile

Un Procfile le permite definir los comandos que deben ejecutarse para iniciar los procesos de la aplicación. Utilizaremos un Procfile para iniciar el servidor web Uvicorn.

Cree un Procfile en la raíz del proyecto con el proceso web:

web: gunicorn -w 1 -k uvicorn.workers.UvicornWorker main:app

Con las aplicaciones de producción, probablemente querrá generar varios trabajadores en lugar de uno. Dado que una base de datos no respalda nuestra aplicación (utiliza datos en memoria), no podemos sincronizar datos entre múltiples procesos de trabajo. Por lo tanto, tenemos que utilizar un trabajador.

Envíe los cambios a su repositorio de GitHub:

$ git add .
$ git commit -m "configured app for heroku"
$ git push origin heroku

Implementar la aplicación Heroku

Heroku utiliza los llamados paquetes de compilación para transformar aplicaciones en unidades que se pueden ejecutar en dinamómetros. Un paquete de compilación es solo un conjunto de scripts especializados para un lenguaje de programación específico.

A medida que envía su código a Heroku, Heroku detecta automáticamente el lenguaje de programación de su proyecto y el paquete de compilación necesario para construirlo. En el caso de Python, comprueba si hay un archivo require.txt presente.

Para implementar su aplicación, todo lo que tiene que hacer es enviar el código al control remoto heroku:

$ git push heroku heroku:main

Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 318 bytes | 318.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Updated five paths from 30a4ffb
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Building on the Heroku-22 stack
remote: -----> Using buildpack: heroku/python
remote: -----> Python app detected
remote: -----> Requirements file has been changed, clearing cached dependencies
remote: -----> Installing python-3.11.5
remote: -----> Installing pip 23.2.1, setuptools 68.0.0 and wheel 0.41.0
remote: -----> Installing SQLite3
remote: -----> Installing requirements with pip
remote: -----> Discovering process types
remote:        Procfile declares types -> web
remote:
remote: -----> Compressing...
remote:        Done: 30.6M
remote: -----> Launching...
remote:        Released v5
remote:        https://<app_name>-31a6fd70e769.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.

Heroku seleccionó automáticamente un script de compilación apropiado, instaló los requisitos e implementó la aplicación en un banco de pruebas.

En caso de que su implementación falle, use el CLI de Heroku para ver los registros:

$ heroku logs --tail

A continuación, verifique el estado de su aplicación:

$ heroku apps:info <app_name>

=== <app_name>
Auto Cert Mgmt: false
Dynos:          web: 1
Git URL:        https://git.heroku.com/<app_name>.git
Owner:          <your_email>
Region:         us
Repo Size:      9 KB
Slug Size:      31 MB
Stack:          heroku-22
Web URL:        https://<app_name>-31a6fd70e769.herokuapp.com/

Intente visitar su aplicación en el navegador navegando hasta la “URL web”.

Eso es todo por la parte de Heroku. La siguiente sección analizará la implementación de la misma aplicación en Back4app Containers.

¿Cómo implementar una aplicación en Back4app Containers?

En esta sección, implementaremos una aplicación en Back4app Containers.

¿Qué es Back4app Containers?

Back4app Containers es una excelente plataforma de contenedores como servicio (CaaS). Le permite implementar, administrar y escalar aplicaciones en contenedores distribuidos globalmente.

La plataforma está estrechamente integrada con GitHub y proporciona un sistema CI/CD integrado. Sus otras características incluyen implementaciones sin tiempo de inactividad, vinculación de dominios personalizados, registro, monitoreo y más.

Lo mejor de todo es que la plataforma ofrece un generoso nivel gratuito. Con más de 600 horas de contenedor mensuales gratuitas, puede crear prototipos y alojar fácilmente sus proyectos favoritos. A medida que su aplicación crece, puede actualizar a niveles premium con precios predecibles.

Para obtener más información sobre los contenedores como servicio, consulte  ¿Qué es CaaS – contenedores como servicio?

Cambie a una nueva rama llamada back4app basada en la rama master:

$ git checkout master && git checkout -b back4app

Objetivos

  1. Dockerice la aplicación.
  2. Conecte su GitHub con su cuenta Back4app.
  3. Importe el repositorio de GitHub deseado.
  4. ¡Implemente!

Dockerizar

Para implementar una aplicación en Back4app Containers, primero debe dockerizarla.

Dockerizar es el proceso de crear, implementar y ejecutar aplicaciones en contenedores Docker. La forma más sencilla de acoplar una aplicación es mediante un Dockerfile.

Dockerfile

Un Dockerfile es un script que contiene instrucciones para crear una imagen de contenedor Docker. Puede utilizar este archivo para definir el entorno, las dependencias y otros comandos necesarios para crear y ejecutar una aplicación.

Tiene la siguiente sintaxis:

COMMAND <arg_1> <arg_2> ... <arg_n>

Cree un Dockerfile en la raíz del proyecto con el siguiente contenido:

FROM python:3.9.6-alpine

# Set the working directory
WORKDIR /app

# Set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# Copy over the requirements file and install the dependencies
COPY ./requirements.txt .
RUN pip install --no-cache-dir --upgrade -r ./requirements.txt

# Copy over the source code
COPY . .

# Expose the port
EXPOSE 80

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]

Este Dockerfile se basa en la imagen python:3.9.6-alpine. Primero establece el directorio de trabajo, las variables de entorno y luego maneja los requisitos. Después de eso, copia el código fuente, expone el puerto 80 e inicia el servidor Uvicorn en ese puerto.

Para implementar otros lenguajes y marcos de programación, no dude en obtener los Dockerfiles de los documentos de Back4app Containers.

Si necesita una aclaración sobre cómo funciona un comando de Dockerfile, consulte la referencia de Dockerfile.

.dockerignore

Podemos usar un archivo .dockerignore para reducir el tamaño de la imagen de Docker. Estos archivos funcionan de manera similar a los archivos .gitignore. Debe definir los archivos y directorios que desea excluir de la imagen.

En nuestro caso, ese es el entorno virtual, los archivos IDE y la carpeta .git.

Cree un archivo .dockerignore así:

.git/
.idea/
venv/

No dude en adaptar el archivo .dockerignore según las necesidades de su proyecto.

Envíe los cambios a su repositorio de GitHub:

$ git add .
$ git commit -m "configured app for back4app"
$ git push origin back4app

Construir, ejecutar y probar

Antes de enviar su código a la nube, es una buena idea probarlo localmente.

Primero, cree la imagen y etiquétela:

$ docker build -t back4app-url-shortener:1.0 .

A continuación, enumere las imágenes:

$ docker images

REPOSITORY                      TAG            IMAGE ID       CREATED         SIZE
back4app-url-shortener          1.0            1cbe348a04ad   1 minute ago    68.7MB

Ejecute el contenedor usando la imagen recién creada:

$ docker run -p 80:80 --name back4app-url-shortener back4app-url-shortener:1.0

Explicación del argumento:

  1. -p 80:80 vincula el puerto 80 de la máquina host al puerto 80 del contenedor
  2. --name back4app-url-shortener nombra la instancia del contenedor

Puede usar -d para ejecutar el contenedor en modo independiente (sin ocupar la terminal).

Compruebe si el contenedor se está ejecutando:

$ docker ps

CONTAINER ID   IMAGE                        CREATED    STATUS    PORTS
b3b82313ab65   back4app-url-shortener:1.0   3s ago     1s        0.0.0.0:80->80/tcp

Abra su navegador web favorito y navegue hasta http://localhost/docs. Debería poder ver el servicio de acortador de URL.

Implementar aplicación

Los siguientes pasos requerirán una cuenta Back4app. Si aún no tiene una, regístrese para obtener una cuenta gratuita. Todo lo que hagamos en este tutorial estará dentro del nivel gratuito.

Al iniciar sesión en su cuenta Back4app, se le presentará la lista de aplicaciones. Haga clic en “Crear nueva aplicación” para iniciar el proceso de creación de la aplicación.

Back4app App Creation

Back4app ofrece dos soluciones:

  1. Backend como servicio (BaaS): una solución de backend lista para usar
  2. Contenedores como servicio (CaaS): una plataforma de implementación de contenedores impulsada por Docker

Dado que estamos implementando una aplicación Python personalizada, optaremos por CaaS. Seleccione “Contenedores como servicio” en el lado derecho de la pantalla.

Back4app Containers as a Service

Se le pedirá que vincule su cuenta de GitHub si es la primera vez que trabaja con Back4app. Además de eso, asegúrese de importar todos los repositorios que desea implementar.

A continuación, “seleccione” el repositorio de GitHub que desea implementar:

Back4app Containers Select GitHub Repository

Dado que estamos implementando una aplicación simple, no tenemos que configurar mucho el entorno. Todo lo que tiene que hacer es configurar:

  1. Nombre de la aplicación: back4app-url-shortener (puede elegir un nombre diferente)
  2. Ramificación: back4app (su ramificación de GitHub)

Luego haga clic en “Implementar”.

Back4app Containers Configure Environment

Back4app Containers ofrece muchas opciones de configuración, incluidas implementaciones automáticas, configuración de puertos, variables de entorno y comprobaciones de estado.

Back4app Containers tardará un poco en crear e implementar su imagen de Docker. Una vez que su aplicación esté lista, el estado de la aplicación cambiará a “Disponible”. Para visitar su aplicación, haga clic en el enlace debajo del estado como se muestra en la imagen.

Back4app Containers Successful Deployment

¡Bien hecho! Ha implementado con éxito una aplicación web en Back4app Containers.

Conclusión

Este tutorial le enseñó cómo implementar una aplicación web sencilla en Heroku y Back4app Containers. Ambas plataformas tienen ventajas y desventajas que debe considerar al implementar una aplicación.

Como regla general, elegiría Back4app Containers para aplicaciones que no requieren una base de datos. Back4app Containers le ayudará a ahorrar dinero y su nivel gratuito es más que suficiente para sus proyectos favoritos.

Heroku podría ser mejor si su aplicación se basa en una base de datos o complementos sofisticados.

He resumido algunas de las principales diferencias de plataforma en la siguiente tabla:

HerokuBackapp Containers
Modelo de nubePlatform as a Service (PaaS)Containers as a Service (CaaS)
Construir e implementarBuildpacksDocker
Lenguajes soportados9 programming languagesAny language or framework
HTTPS/SSL gratuito✔️✔️
Dominios personalizados✔️✔️
Nivel gratuito✔️
Riesgo de bloqueo de proveedores✔️
Bases de datos administradas✔️
Apto para principiantesSí (requiere algunas habilidades de DevOps)Sí (requiere algunas habilidades de Docker)

No dude en obtener el código fuente final del repositorio de GitHub.

Preguntas frecuentes

¿Qué es Heroku?

Heroku, fundada en 2007, es una de las plataformas pioneras de plataforma como servicio (PaaS). Le permite implementar nueve lenguajes de programación, incluidos Java, PHP, Python y Ruby. Además de eso, proporciona bases de datos administradas, complementos, registro avanzado, monitoreo y más.

¿Cómo implementar una aplicación en Heroku?

1. Regístrese para obtener una cuenta de Heroku gratuita. 
2. Instale y configure el CLI de Heroku.
3. Cree una aplicación Heroku.
4. Especifique el tiempo de ejecución mediante runtime.txt. 
5. Especifique los procesos de la aplicación a través de Procfile. 
6. Envíe su código fuente a Heroku.

¿Qué es Back4app Containers?

Containers es una excelente plataforma de contenedores como servicio (CaaS). La plataforma le permite implementar, administrar y escalar rápidamente aplicaciones acopladas en contenedores distribuidos globalmente. Tiene un sistema CI/CD integrado, admite implementaciones sin tiempo de inactividad, dominios personalizados y más.

¿Cómo implementar una aplicación en Back4app Containers?

1. Regístrese para obtener una cuenta Back4app gratuita. 
2. Dockerice su aplicación.
3. Envíe su código fuente a GitHub.
4. Conecte su GitHub con su cuenta Back4app.
5. ¡Importe el repositorio deseado e impleméntelo!


Leave a reply

Your email address will not be published.