Heroku
Heroku ofrece una plataforma en la nube para la publicación de aplicaciones y desarrollaremos dos microservicios utilizando la plataforma Devprime, MongoDB y Kafka y [comunicación asíncrona]. /../how-to/stream/rabbitmq/asynchronous-microservices-communication/).
Artículos necesarios en su entorno
- Instalar el SDK de .NET 6 o superior
- Código de Visual Studio
- Una cuenta activa en Heroku
- Una cuenta activa en la plataforma Devprime y una licencia de uso para desarrolladores o empresas.
- Una cuenta en MongoDB Atlas
- Una cuenta en Confluent Cloud
- Devprime CLI instalado y activo (
dp auth
) - docker local activo + GIT
- Powershell o Bash
Creación de accesos y obtención de credenciales
1) Ve a Heroku
a) Cree una nueva aplicación y guarde el nombre
b) Cree una segunda aplicación y guarde el nombre
c) Obtenga el token de acceso de “API KEY”
2) Vaya a MongoDB Atlas
a) Crear una base de datos mongodb gratuita
b) Obtener credenciales de acceso
3) Vaya a Confluent Cloud y cree un servicio de Kafka
a) Crear un servicio gratuito de streaming de Kafka
b) Añade el tema con el nombre ‘orderevents’
c) Añade un tema con el nombre ‘paymentevents’
d) Obtener las credenciales de acceso a Confluent Cloud
4) Instale Heroku CLI e inicie sesión
heroku container:login
**Creación de los microservicios ‘Order’ usando Devprime CLI
Usaremos la Devprime CLI para crear los microservicios.
- Creación del microservicio
dp new dp-order --stream kafka --state mongodb
Escriba la carpeta dp-order para ver el microservicio - Adición de reglas de negocio
dp marketplace order
- Acelerar las implementaciones
dp init
Modifique la configuración agregando las credenciales de MongoDB/Kafka
a) En la carpeta del proyecto, abra el archivo de configuración
code .\src\App\appsettings.json
b) En el elemento Estado, agregue las credenciales de MongoDB
c) En el elemento Stream, agregue las credenciales de Kafka
Ejecute los microservicios localmente.
.\run.ps1 ou ./run.sh (Linux, MacOS)
Haz una publicación de prueba
a) Abra el navegador web en http://localhost:5000 o httsp://localhost:5001
b) Haga clic en publicar y luego en ‘Pruébelo’
c) Ingrese los datos y envíe
Si todo ha ido bien hasta ahora, puede pasar al resto de la configuración y publicación en el entorno de Heroku.
Adaptación del dockerfile del proyecto para soportar Heroku
a) Localice y elimine la línea de abajo
ENTRYPOINT ["dotnet", "App.dll"]
b) Agregue la línea de abajo al final
CMD ASPNETCORE_URLS=http://*:$PORT dotnet App.dll
Configuración de exportación
DP Exportación Heroku
Configuración de publicación en Heroku
a) Localice y abra el archivo creado
code .\.Devprime\heroku\instructions.txt
b) Localice la etiqueta <app-name>
y reemplácela con el nombre de su aplicación1
c) Localice la etiqueta <token>
y reemplace el token de acceso de Heroku
d) Ahora crearemos las variables de entorno ‘Config Vars’ en Heroku
- Copie el comando curl en el modificado en los pasos anteriores
- Ejecútalo desde la línea de comandos.
- Observe la diferencia con curl en Windows Command, Powershell, Linux.
curl -X PATCH https://api.heroku.com/apps/<app-name>/config-vars -H "Content-Type: application/json" -H "Accept: application/vnd.heroku+json; version=3" -H "Authorization: Bearer <token>" -d @.\.Devprime\heroku\heroku.json
Configuración de ‘Config Vars’ desde el nombre de tu aplicación1 en Heroku
Portal -> aplicación -> configuración -> variables de configuración
Compilación y publicación de imágenes de docker
a) Antes de ejecutar el comando, cambie el <app-name>
- Compilación y envío
heroku container:push web --app <app-name>
- Cambiar a la versión
heroku container:release web --app <app-name>
En este momento, ya puede ver el microservicio en el portal
Accediendo a la url pública del proyecto
heroku open
Visualización del registro de microservicios app-name1
a) Antes de ejecutar el comando, cambie el <app-name>
heroku logs --tail --app <app-name>
Creación de un nuevo microservicio de pago'
El siguiente proceso acelera la creación y ya ejecuta el ‘dp init’
dp new dp-payment --state mongodb --stream kafka --marketplace payment --init
Al final, ingrese a la carpeta dp-payment
Modificar la configuración y las credenciales
a) En la carpeta del proyecto, abra el archivo de configuración
code .\src\App\appsettings.json
b) Cambie los puertos del elemento Devprime_Web a ‘https://localhost:5002; http://localhost:5003’
c) En el elemento Estado, agregue las credenciales de MongoDB
d) En el elemento Stream, agregue las credenciales de Kafka
e) Suscribirse a las colas ‘orderevents’.
|
|
Recebimento de eventos no adapter de Stream
a) Implementación de un evento en Stream
dp add event OrderCreated -as PaymentService
b) Cambie el DTO a ‘OrderCreatedEventDTO’
code .\src\Core\Application\Services\Payment\Model\OrderCreatedEventDTO.cs
|
|
Configurando o Subscribe no Stream
a) Abra la configuración de Event Stream
code .\src\Adapters\Stream\EventStream.cs
b) Cambiar la implementación en Suscríbete
|
|
Modificar la configuración en el dockerfile del proyecto
a) Localice y elimine la línea de abajo
ENTRYPOINT ["dotnet", "App.dll"]
b) Agregue la siguiente línea
CMD ASPNETCORE_URLS=http://*:$PORT dotnet App.dll
Configuración de exportación
dp export heroku
Configuración de publicación en Heroku
a) Localice y abra el archivo creado
code .\.Devprime\heroku\instructions.txt
b) Localice la etiqueta <app-name>
y reemplácela con el nombre de su app-name2
c) Localice la etiqueta <token>
y reemplace el token de acceso de Heroku
d) Ahora crearemos las variables de entorno ‘Config Vars’ en Heroku
- Copie el comando curl en el modificado en los pasos anteriores
- Ejecútalo desde la línea de comandos.
- Observe la diferencia con curl en Windows Command, Powershell, Linux.
curl -X PATCH https://api.heroku.com/apps/<app-name>/config-vars -H "Content-Type: application/json" -H "Accept: application/vnd.heroku+json; version=3" -H "Authorization: Bearer <token>" -d @.\.Devprime\heroku\heroku.json
Compilación y publicación de imágenes de docker
a) Antes de ejecutar el comando, cambie el <app-name>
- Compilación y envío
heroku container:push web --app <app-name>
- Cambiar a la versión
heroku container:release web --app <app-name>
Pasos opcionales para detener servicios o ver procesos
a) Antes de ejecutar el comando, cambie el <app-name>
heroku ps --app <app-name>
heroku ps:stop web.1 --app <app-name>
heroku ps:start web.1 --app <app-name>
Reflexiones finales
- Durante este viaje de Heroku, hemos desarrollado dos microservicios.
- Para automatizar tu estrategia de DevOps, usa GitHub Actions.