Deploy do .Net Core WebAPI no Heroku

Normalmente desenvolvedores dotnet preferem fazer deploy no Windows Azure por conta da facilidade do uso da plataforma mas muitos acabam procurando opções mais baratas e ágeis do que a plataforma da MSFT.

Hoje vou mostrar como fazer deploy no Heroku, um serviço de hospedagem na nuvem um pouquinho bem diferente do nosso querido Azure.

Heroku é um serviço do tipo PaaS (Platform as a Service) altamente customizável por conta das “buildpacks” que são arquivos que apontam detalhes das necessidades de software a serem instalados na sua infraestrutura a fim de hospedar sua aplicação. No Heroku, assim como no Azure temos uma estrutura de instâncias que são chamadas de Dynos, você iria optar por aumentar a quantidade de Dynos de sua infraestrutura caso você desejasse maior escalabilidade e redundância, assim como no Azure.

Mas vamos lá.. “Less talk, more code!”
Vou deixar para falar do Heroku, seus preços, Dynos e etc em um post dedicado.

Instalando o Heroku

O Heroku, como quase tudo, possui um CLI e eu inicialmente recomendo que você acesse este link e baixe a versão do instalador ao invés de instalar via NPM.

Após a instalação vale a pena reiniciar seu PC para garantir o bom funcionamento deste CLI.

Criando repositório no Git

Fique à vontade para criar um repositório no Git o qual você irá armazenar seu projeto e posteriormente ligá-lo a sua aplicação no Heroku.

Iniciando sua solution

Você pode usar o .Net Core CLI ou Visual Studio. O importante será criar seu projeto e abrir o arquivo packages.json e alterar a versão para “1.0.0“. A versão “1.0.1” não irá funcionar.

A seguir, execute o seguinte comando do Nugget no Package Manager Console:

Install-Package Microsoft.Extensions.Configuration.CommandLine

Por fim, altere as linhas de código do método Main em Program.cs

Assim que terminar, faça commit e push de suas alterações e vamos ao Heroku.

git commit -am "Setup for Heroku"
git push

Criando sua aplicação no Heroku

Você pode criar um aplicação na interface gráfica caso tenha algum temor com linhas de comando no Bash ou Cmd (espero que não tenha) ou usar o CLI para acelerar as coisas.

Execute o login, você terá que fazer isso uma só vez:

heroku login

Na sequencia crie uma nova aplicação:

heroku create nome-da-app

Lembra que eu te disse que os buildpacks são responsáveis por “configurar” sua instância no Heroku. É exatamente isso que faremos, mesmo sabendo que este buildpack não é oficial do Heroku. (Sim, existem usuários que criam buildpacks para que você possa publicar suas aplicações independente do Heroku suportá-la nativamente)

heroku buildpacks:set http://github.com/noliar/dotnet-buildpack.git

Vale dar uma passada lá na interface do Heroku e verificar se a mesma está conectada a seu repositório git para que as coisas fluam logo na primeira tentativa.

Na sequência execute os seguintes comandos

heroku git:remote -a your-app-name
git commit -am "Setup for Heroku"
git push heroku master

Neste momento você irá acompanhar uma série de instruções referentes ao deploy de sua aplicação e no final você encontrará o seguinte resultado

remote: Verifying deploy... done.

Agora abra sua ferramenta favorita para testes de APIs (no meu caso Postman) ou a aplicação cliente diretamente e contemple os resultados!

Caso você tenha problemas com o buildpack selecionado você pode removê-lo ou limpar todos os buildpacks relacionados com os comandos

heroku buildpacks:remove http://github.com/jenyayel/dotnet-buildpack.git

ou

heroku buildpacks:clear

E também pode forçar o deploy da aplicação a partir do repositório Git pela própria interface do Heroku.

Bonus! Comando útil!

Você pode controlar a quantidade de Dynos da sua aplicação com o comando

heroku ps:scale web=2

Sendo que nos planos Free (Fique atento aos planos) você só consegue utilizar 1 Dyno e se você inserir web=0 derrubará sua aplicação mas poderá voltar a atividade rapidamente utilizando web=1.

Sempre que atualizar sua aplicação lembre se de dar commit no git e push no git e no Heroku. Se suas alterações não forem refletidas, execute o deploy manualmente.

Importante: Este artigo é dedicado ao amigo Arthur Baptista que sofreu um pouquinho tentando fazer esse deploy mas acho que agora estará salvo para sempre!

É isso aí! Até a próxima! 😉

Anúncios

Desenvolvendo ASP.Net MVC diretamente no Mac.. Pode? Pode!

Hoje acordei pensando em colocar em prática a missão de desenvolver uma aplicação web utilizando somente o Visual Studio  Code diretamente no Mac OSX sem abrir minha VM de windows e recorrer ao Visual Studio de maneira convencional.

Isso porque após ter focado no desenvolvimento frontend e ter mergulhado no mundo do node.js e do AngularJS eu realmente sonhei com o dias aonde eu poderia construir uma WebAPI com a mesma facilidade que se constrói uma app web com Yeolman.

DNU, DNX, DNVM e nada mais disso é verdade graças ao .NET CLI

Fato, eu não inventei nada. Quem alimentou essa esperança em mim foi o @vquaiato, nesse postnesse, e nesse, onde ele explicou o que era o DNU, DNX e o DNVM. Caso você queira entender melhor esses carinhas, acesse os posts e leia com mais calma. Basicamente o DNX era o ambiente de execução do SDK, DNU era o gerenciador de pacotes e o DNVM era o gerenciador de runtimes do dotNet.

Complicado né? Mas relaxa porque o @giovannibassi mostrou nesse post, depois de um bom tempo que agora tudo ficou mais fácil você só precisa do .NET CLI.

“Less talk, more code!”

Configurando seu ambiente de desenvolvimento

Agora que já expliquei o que eu queria, porque e quem me ajudou, vamos compartilhar logo a maneira de fazer esse negócio funcionar:

1. Instale o homebrew no seu Mac com o seguinte comando (Caso tenha problemas, acesse o site oficial do homebrew):

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Homebrew

2. Execute os seguintes comandos em seu terminal:

˜$ brew update
˜$ brew install openssl
˜$ brew link --force openssl

3. Instale o .NET Core a partir deste link

.NET Core

4. Instale o Node.js caso já não tenha instalado.

Node.js

5. Assim que terminar de instalar o Node.js instale o generator Yeoman para dotnet via NPM. Volte ao terminal e execute o comando:

npm install -g generator-aspnet

Importante: O próprio npm e a comunidade do Node.js não indica utilizar sudo antes dos comandos, entretanto para fins de teste você pode se livrar de problemas de acesso diretórios facilmente utilizando sudo + comando do npm. Agora se você quer realmente aprender a resolver este problema de permissão ao instalar pacotes via npm, acesse este link.

Iniciando e executando um novo projeto

1. Abra o terminal, acesse sua pasta de projetos utilize os comandos:

mkdir aspnet-mvc
cd aspnet-mvc
yo aspnet

Yo

project

2. Uma série de coisas irão acontecer no seu terminal, fique atento para possíveis erros durante este processo. Neste momento o Yeoman generator vai acessar diversos repositórios e preparar todos os arquivos de seu projeto. Para executar sua aplicação, você deverá utilizar os comandos (na minha opinião, bem auto explicativos):

dotnet restore
dotnet build
dotnet run

webpage

Hey! Você cansou de ver essa linda página em seus projetos, certo? Ótimo! As coisas estão funcionando como deveriam; mas para nos certificar, vamos alterar alguma coisa nesse projeto.

3. Abra seu Visual Studio Code (caso não tenha instalado, clique aqui) e acesse a pasta de seu projeto (command + O). Você também precisará da extensão do C# para o Visual Studio Code. Caso o mesmo não sugira o download acesse este link.

4. Agora vamos editar a action About dentro de HomeController.cs. Vamos inserir algo bem proximo do que antes você fazia com ViewBags:

ViewData["SomeData"] = "pseudo viewbag msg..";

controller

5. Agora vamos alterar a view About.cshtml a fim de refletir a alteração da action About:

<p>Test data from controller:
<strong>@ViewData["SomeData"]</strong></p>

view

6. Tudo extremamente simples, agora a parte triste: Infelizmente ainda precisamos recompilar o C#, então ainda não temos recursos bacanas como livre reload; mas você perceberá que ainda sim é muito mais rápido do que você estava acostumado no ASP.NET MVC dentro do Visual Studio. Volte a tela do terminal e utilize (control + c) para parar a instancia atual de seu site e execute novamente o comando:

dotnet run

resultado

7. Pronto.. Graças ao .Net Core, você conseguiu criar um projeto ASP.Net MVC sem auxilio do Visual Studio, utilizando somente o .NET CLI, Visual Studio Code e o Yeoman!

Referências

Building Projects with Yeoman
ASP.NET 5 – Primeiros passos (dnvm, dnu, dnx e yeoman)
Adeus DNX, bem vindo .NET CLI

Conclusão

Podemos perceber que a Microsoft está super alinhada com tecnologias extremamente ágeis que já fazem parte da vida de um montão de gente como: Node.js/NPM, Bower, generators do Yeoman etc.. isso é muito bom! Acredito que o .Net Core veio para integrar e enxugar uma série de soluções que já eram boas e tem tudo para ficar ainda melhores!

Legal né?! 😉