Publicando aplicativos Web no Linux pelo Azure

Olá pessoal,

aspnetdocker_msloveslinuxRecentemente a Linux Foundation incluiu a Microsoft como membro Platinum. Isso se deve a vários fatores e um deles é o compromisso da Microsoft em disponibilizar serviços usando o sistema operacional Linux. Um exemplo disso é o novo serviço de Aplicativos Web no Linux (Web App on Linux) que já está na versão preview no Microsoft Azure.

Antes o Web App do Azure era criado sob o sistema operacional Windows. Mas agora, através desse novo serviço, você pode disponibilizar sua aplicação Web no Linux. E um grande diferencial desse serviço é o de você conseguir configurá-lo para executar um container a partir de uma imagem Docker, o que proporciona uma maior flexibilidade na maneira de disponibilizar seu conteúdo na Web.

A seguir irei guiá-los na criação de uma aplicação Asp.NET Core, na definição de uma imagem Docker e na publicação da aplicação no Microsoft Azure. Tudo isso feito via linha de comando e também usando o Visual Studio Code. Todos os procedimentos a seguir podem ser executados tanto para Windows como Linux e iOS.

Antes de começar

Para executar os passos a seguir, precisamos antes preparar nosso ambiente de desenvolvimento:

Criando aplicação Web Asp.NET Core

Para começar, vamos criar uma aplicação Web Asp.NET Core e executá-lo localmente usando recursos do próprio Visual Studio Code. E vamos criar usando o recurso Yeoman.

O Yeoman é uma ferramenta de scaffolding, isto é, uma ferramenta que gera uma estrutura básica do projeto e que permite o início rápido do desenvolvimento.

  1. Abra o terminal de comando do seu sistema operacional.
  2. Instale o Yeoman, o Bower (gerenciador de pacores do lado do cliente) e o generator-aspnet (gerador de projetos Asp.NET) através do comando npm a seguir:

    npm install -g yo bower generator-aspnet

    Notas:

    • Usar o parâmetro -g para instalar em um escopo global.
    • Pode ser necessário executar o comando acima como administrador.
  3. Crie um diretório onde você irá criar sua aplicação e execute o comando yo:

    C:\dev>mkdir aspnetapp
    
    C:\dev>cd aspnetapp
    
    C:\dev\aspnetapp>yo aspnet
  4. O Yeoman irá guiá-lo na criação da aplicação .Net. Vamos selecionar a opção “Web Application Basic [without Membership and Authorization]”, Bootstrap e o nome “myaspnet” para a aplicação:
    aspnetdocker_yo
  5. Finalizada a criação do projeto, podemos agora usar o Visual Studio Code para testá-lo abrindo nele a pasta do projeto aspnet criado pelo Yeoman.
  6. Note que ao abrir a pasta no Visual Studio Code, ele detecta os arquivos de configuração do projeto (pode demorar um pouco), propõe ações para obter as dependências necessárias (restore) e também para criar recursos de testes e execução:
    aspnetdocker_openvscode

    • Ao clicar em “Restore“, ele irá baixar as dependencias do projeto.:
      aspnetdocker_vscoderestore
    • Ao aceitar (Yes) a criação dos recursos (assets), o Visual Studio Code irá criar os arquivos para compilação e execução/depuração do projeto:
      aspnetdocker_vscodecreateassets
  7. Agora execute o projeto através do F5 ou ainda F1 e depois o comando “Debug: Continue”. O projeto será executado e será aberto o browser com o site publicado localmente:
    aspnetdocker_vscoderun
  8. Pronto! O próprio site de exemplo já possui um layout padrão definido usando Bootstrap e possui também vários links para documentações que podem te orientar no desenvolvimento do seu projeto.

Executando container Docker com a aplicação Web Asp.NET Core

Quando criamos o projeto Asp.NET Core usando o Yeoman, um dos arquivos gerados é o Dockerfile que nos permite criar uma imagem com a aplicação Asp.NET e executá-la em um container.

Se você não tem o Docker instalado e/ou não está familiarizado com o Docker, sugiro rever artigos da série “Usando Docker no Windows 10”. Apesar dos artigos terem foco do Windows 10, quase todos os procedimentos se aplicam também as plataforms Linux e iOS.

  1. Ainda no Visual Studio Code, termine a execução do projeto e então abra o arquivo Dockerfile que contém configurações da imagem Docker. Altere a porta exposta para 80 e o valor de server.urls:

    aspnetdocker_opendockerfile

    Note que a configuração da nossa imagem Docker tem como imagem original o microsoft/dotnet que traz o .NET Core no Linux. A partir desta imagem original, fazemos customização copiando o conteúdo local da nossa pasta e executando os comandos dotnet restore e dotnet build. Ainda definimos o comando padrão da imagem (aquele executado quando um container dessa imagem é iniciado) como sendo dotnet run.

  2. Abra o terminal integrado (“View > Integrated Terminal” ou ainda CTRL + ') e execute o comando para construir a imagem docker a partir do Dockerfile e forneça um valor de tag para a nova imagem:

    docker build . -t suacontanodockerhub/myaspnetapp:latest

    Notas:

    • Para executar comandos Docker, é necessário que o Docker esteja iniciado na sua máquina.
    • Iremos definir uma tag para referenciar a imagem e aqui você deve especificar, em “suacontanodockerhub”, o nome da sua conta criada no Docker Hub.
  3. Depois vamos executar um container para essa imagem. Usando ainda o terminal integrado, execute o seguinte comando:
    docker run --rm -p 80:80 joaocunhaeld/myaspnetapp:latest

    aspnetdocker_dockerrun

    O container está sendo executado em primeiro plano no terminal integrado. Para finalizá-lo, basta pressionar CTRL + C. Além disso, o parâmetro --rm que usamos acima indica que o container deverá ser excluído após terminar a execução.

  4. Por fim, podemos publicar essa imagem na nossa conta do Docker Hub usando o comando docker push.
    docker push [tag_docker_image]

    Notas:

    • Antes de publicar, é necessário fazer login na sua conta Docker Hub através do comando docker login
    • Para detalhes de como criar uma conta no Docker Hub e publicar uma imagem, acesse o post Usando Docker no Windows 10 – Parte 4.
      aspnetdocker_dockerpush

Publicando aplicação Asp.NET Core no Microsoft Azure

Agora que já temos nossa aplicação criada localmente, chega uma hora que precisamos publicá-la. E para publicar, vamos usar o Microsoft Azure e, mais precisamente, o novo serviço “Web App on Linux” que ainda está em preview. Esse serviço permite a você disponibilizar aplicações Web usando um servidor Web Linux e definir uma imagem Docker para publicar. Até então as aplicações Web eram disponibilizadas em um servidor Windows sem o recurso de container Docker.

A publicação pode ser feita de duas formas: na Web, através do portal do Microsoft Azure, ou ainda através de linha de comando usando o Azure CLI 2.0 que se encontra na versão Preview na data de publicação deste artigo.

Para qualquer uma das opções, é necessário ter uma conta do Azure. Se você ainda não tem, é possível criar uma conta para testar por 30 dias com um crédito de R$ 750 reais não cumulativos. E, mesmo depois desse perído de testes, você ainda poderá usufruir de vários serviços gratuitos disponibilizados pelo Microsoft Azure.

Usando o Portal do Azure

  1. Acesse sua conta no Microsoft Azure através do link https://portal.azure.com/.
  2. Usando o símbolo de “+” e busque pelo serviço “Web App Linux”:

    aspnetdocker_portalnewwebapplinux

  3. Especifique o nome da aplicação, o grupo de recursos e o plano de serviço/localização. Para o plano de serviço, é necessário recomendado usar pelo menos o Standard S1 que é o padrão:

    aspnetdocker_portalcreatingwebapplinux

  4. Uma vez criada a aplicação Web, abra esse recurso no portal do Azure (você pode encontrá-lo na lista de recursos da sua conta) e selecione o item “Docker Container”. Nele, configure a fonte da imagem a partir do “Docker Hub” e defina como imagem aquela que você publicou a partir deste tutorial. No meu caso é o joaocunhaeld/myaspnetapp:latest

    aspnetdocker_portalconfigurecontainer

  5. Depois disso, o Web App irá automaticamente obter a imagem definida no Docker Hub e depois executar container. Para verificar, acesse as configurações gerais do serviço (Overview) e acesse o link da sua aplicação Web publicada no Microsoft Azure.

    aspnetdocker_portalopenwebapp

Usando o Azure CLI 2.0 Preview

Ainda outra opção as vezes mais cômoda, eficiente e programática é o uso de linha de comando. Foi disponibilizado recentemente pelo Microsoft Azure uma nova versão de linha de comando do Azure CLI (guia de instalação disponível no link).

Segue procedimento:

  1. Abra o terminal de linha de comando. Opcionalmente você pode ainda usar o terminal integrado do Visual Studio Code.
  2. Faça login na sua conta Azure através do comando az login:

    aspnetdocker_az_login

  3. Crie um grupo de recursos Azure. Abaixo estou criando um grupo de recursos na localização Oeste dos Estados Unidos:
    az resource group create -n myaspnetcli-group -l "West US"
  4. Crie um plano de serviços dentro do grupo de recursos recém criado. Abaixo estou criando um plano de serviços Linux (–islinux) do tipo Standard 1 (–sku S1):
    az appservice plan create -g myaspnetcli-group -n myaspnetcli-linux-plan --is-linux --sku S1
  5. Crie uma aplicação web dentro do plano de serviços linux recém criado:
    az appservice web create -g myaspnetcli-group -n myaspnetcli-linux-app --plan myaspnetcli-linux-plan
  6. Configure a aplicação Web para obter fonte a partir da imagem Docker que criamos a pouco:
    az appservice web config container update -n myaspnetcli-linux-app -g myaspnetcli-group --docker-custom-image-name joaocunhaeld/myaspnetapp:latest
  7. Abra o browser com a aplicação Web direto da linha de comando:
    az appservice web browse -n myaspnetcli-linux-app -g myaspnetcli-group
  8. No final, obteremos o mesmo resultado e nossa aplicação estará disponível online.

Referências:

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s