Configurando um pipeline com github actions para uma aplicação Dart para rodar no Azure App service
O título do artigo tem várias coisas incomuns e foi exatamente por eu não ter achado nada que apresentasse essa solução em buscas que fiz no google, que fui motivado a fazer.
Vou adiantar que algumas coisas não entrarei no detalhe, por ser etapa secundária ou por já ser conhecido. Mas vou listar os requisitos/passos necessários.
O começo
Primeiro você terá de instalar uma IDE e minha recomendação para quem usa windows é a receita: vscode e docker desktop com wsl2.
Configurando o dart
Você terá de instalar o dart para desenvolver e esse material é o que você precisa: https://dart.dev/get-dart#install-a-debian-package
Depois de instalado o dart, vamos para o aqueduct
- dart --version
- pub global activate aqueduct
- export PATH="$PATH":"$HOME/.pub-cache/bin"
- echo 'export PATH="$PATH":"$HOME/.pub-cache/bin"' >> ~/.profile
Material bacana sobre Dart API: https://itnext.io/building-restful-web-apis-with-dart-aqueduct-and-postgresql-part-2-routing-with-crud-operations-629fe58114fa
Agora, bora lá criar o projeto
aqueduct create dart_crud_api && cd dart_crud_api
*obrigatório o uso de snake_case para o nome do diretório
Criei um Docker file usando a imagem base https://hub.docker.com/r/google/dart/. E para executar local com dart ou rodando usando docker.
Local com dart:
aqueduct serve ou dart bin/main.dart
com Docker:
docker build -t my/dart-api .
e
docker run -d -p 8000:8000 my/dart-api
Importante não esquecer da porta utilizada pela aplicação. Local eu usei a porta 8000, porém, quando chegarmos na etapa de subir no App Service, precisaremos alterar o Dockerfile e o main.dart para usar a porta 80.
No DockerHub
Já criei e subi no github minha aplicação
Agora é o momento de criar seu pipeline com github actions e para isso, fiz algo bem simples para apenas jogar a imagem pro DockerHub.
Lembre-se que existem várias formas de construir seu pipeline, mas sempre que configurar seu pipeline, certifique-se de colocar os dados sensíveis em secrets do github.
E o Azure?
Bom, no Azure, eu utilizei (como o próprio título menciona), o Azure App Service para fazer com que o Azure busque as versões recentes de imagens disponibilizadas no DockerHub pelo GitHub e publique imediatamente em meu ambiente.
Lembre-se do que já falei. É importante que sua aplicação esteja configurada para porta 80, e no Azure App Service você deve configurar o ambiente para executar em container e pode usar o plano developer (free). De resto, é o default, configurar subscription (caso ainda não tenha), criar um resource group (ou usar um que já exista).
E depois?
Bom, você subiu a aplicação configurada com Dockerfile usando a porta 80 pro GitHub, criou o repositório no DockerHub, fez a configuração do GitHub Actions e configurou no Azure o App Service. Então, ta feito :)
Você deve ter sido direcionado para uma tela que apresenta alguns dados após a conclusão do provisionamento da aplicação no App Service. Lá terá uma URL (a URL que você configurou na imagem acima). Basta acessar essa url e sua aplicação estará rodando como essa: https://dart-crud-api.azurewebsites.net/books/10.
E eu vou ficando por aqui, mas deixo abaixo os links dos artefatos produzidos para esse artigo e uma mensagem: Dart não é só para Google Cloud ;)
Projeto no GitHub: https://github.com/rcelebrone/dart-crud-api
Imagem da aplicação gerada no Docker Hub pelo pipeline no GitHub actions: https://hub.docker.com/r/rcelebrone/dart-crud-api
Endereço da aplicação rodando no Azure App Service: https://dart-crud-api.azurewebsites.net