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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.IO; | |
using System.Linq; | |
using System.Threading.Tasks; | |
using Microsoft.AspNetCore.Hosting; | |
using Microsoft.AspNetCore.Builder; | |
using Microsoft.Extensions.Configuration; | |
namespace WebAPI | |
{ | |
public class Program | |
{ | |
public static void Main(string[] args) | |
{ | |
var config = new ConfigurationBuilder().AddCommandLine(args).Build(); | |
var host = new WebHostBuilder() | |
.UseKestrel() | |
.UseContentRoot(Directory.GetCurrentDirectory()) | |
.UseConfiguration(config) | |
.UseIISIntegration() | |
.UseStartup<Startup>() | |
.Build(); | |
host.Run(); | |
} | |
} | |
} |
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! 😉