Fala pessoall! Tudo bem?

Muitas pessoas me perguntam sobre como devem utilizar Web Services no Azure. O Azure possui uma série de recursos e entre eles as Web Apps, onde é possível hospedar sua aplicação Web na nuvem, utilizando o modelo PaaS (Platform as a Service).

Porém, em alguns casos específicos precisamos ter um maior controle sobre o ambiente, e sabemos que arquitetura PaaS, nos restringe bastante quanto à configuração e gestão do ambiente.

Isso significa que temos (às vezes) que apelar para o modelo IaaS (Infrastructure as a Service), e nesse post irei falar sobre uma plataforma de Web Service (se é que eu posso chamar assim) que é muito utilizada em vários cenários envolvendo aplicações Web, principalmente PHP: o LAMP.

Pra quem não conhece nosso amigo LAMP, lá vai! lol

O que é LAMP?

LAMP é a abreviação de Linux (Sistema Operacional), Apache (Servidor Web), MYSQL (Banco de Dados) PHP (Linguagem de Programação). Basicamente é um conjunto de ferramentas (talvez podemos até chamarmos de “pilha de ferramentas”) de código aberto, que possibilitam o desenvolvimento de aplicações Web de forma mais simples. Ou seja, facilmente conseguimos montar um ambiente de desenvolvimento WEB, instalando apenas uma única ferramenta (que se desmembra em 3, claro).

Essas ferramentas possuem características marcantes e bem peculiares, por exemplo o Apache que permite hospedar vários sites no mesmo servidor (virtual hosts). O PHP por sua vez, é uma linguagem muito presente na Web hoje em dia, e bem utilizada por diversos desenvolvedores Web no Mundo. O uso dessa “plataforma” se tornou muito popular, devido a serem de código aberto são livres de custo.

Existem outros “derivados” do LAMP, como o WAMP (Windows, Apache, MySql e PHP), o MAMP (Mac OS X, Apache, MySql e PHP) e o XAMPP (X = Qualquer Sistema Operacional, Apache, MySql, PHP e Perl).

O MYSql pode ser substituído (em alguns casos) por MariaDB (basicamente um “fork”, ou seja, uma ramificação do MYSql, criada pelo próprio fundador do projeto após sua aquisição éla Oracle) ou até mesmo MongoDB (um banco de dados NoSQL, utiliza uma estrutura de dados relacional baseada em uma tabela tradicional semelhantes à JSON), também bancos de código aberto.

Por sua vez o LAMP oferece flexibilidade, uma farta documentação (como esta por exemplo http://www.lamphowto.com/ ) , segurança e uma comunidade muito ativa (isso envolve correção de bugs, etc)

Mas então vem a pergunta: É possível criar um servidor LAMP no Azure?

A resposta é: CLARO! Sem sombra de dúvidas!

O que faremos a seguir é a criação de uma VM (Máquina Virtual) Linux (Ubuntu) e passaremos os comandos de instalação do LAMP para a máquina. No final, conseguiremos acessar via http ou https, nosso Web Server na nuvem.

Então, mãos à Obra! (Dessa vez eu vou utilizar o Azure CLI 2.0 para criar nosso servidor Linux no Azure)

(Já sabe como instalar o Azure CLI? Não? Relaxa, neste post aqui eu ensino. Corre lá, que ainda dá tempo! haha)

Criando o Grupo de Recursos:

[sourcecode language=”bash”]az group create -l "eastus2" -n "rg-new"[/sourcecode]

 

Obs.: O parâmetro -l é de “Location”, ou seja a localização do grupo de recursos e o parâmetro -n referente ao Nome do grupo de recursos.

 

Criando uma VM Linux, com o S.O. Ubuntu, já contendo as características de rede como IP Público, VNET, etc.:

[sourcecode language=”bash”]az vm create –resource-group "rg-new" –name "vm-lamp-ubuntu" –image UbuntuLTS –admin-username admlamp –admin-password "Azure;123456"[/sourcecode]

 

Permitir o tráfego na porta 80 [Setado diretamente na NSG] [Necessário para o Apache]:

[sourcecode language=”bash”]az vm open-port –port 80 –resource-group "rg-new" –name "vm-lamp-ubuntu"[/sourcecode]

 

Checar o IP Público da Máquina:

[sourcecode language=”bash”]az network public-ip list –resource-group "rg-new" –query [].ipAddress[/sourcecode]

 

Criar uma Storage Account, para armazenar o script:

[sourcecode language=”bash”]az storage account create -g "rg-new" -n "stgmagella" –sku Standard_LRS[/sourcecode]

 

Precisamos agora, pegar a chave de acesso para a Storage Account:

[sourcecode language=”bash”]az storage account keys list –account-name "stgmagella" –resource-group "rg-new"[/sourcecode]

 

Copie a chave de acesso [Key 1] | Iremos utilizá-la para enviar nosso script para a Storage Account:

Obs.: A chave é única, ou seja, cada Storage Account possui a sua. Essa chave pode mudar (em alguns casos) em 72 Horas.

[sourcecode language=”powershell”]"dwjgJ+rSrChCE4lfTLpBlobPJ8aenhchW50j8axj2sNxNklW+Jd9xDTOd4oFEbOfaECGFhoEXwDAip3Qsnbzng=="[/sourcecode]

 

Criar um Blob Container da Storage Account [Que basicamente, será nosso local para armazenar nosso Script, tipo um diretório]:

[sourcecode language=”bash”] az storage container create –n scripts –account-name "stgmagella" –account-key "dwjgJ+rSrChCE4lfTLpBlobPJ8aenhchW50j8axj2sNxNklW+Jd9xDTOd4oFEbOfaECGFhoEXwDAip3Qsnbzng==" –public-access blob[/sourcecode]

 

Crie um Script Bash [.sh] (Pode ser com o Notepad ++ mesmo), com as instruções de instalação do LAMP:

[sourcecode language=”bash”] #!/bin/bash

echo "########################################################"
echo " Instalacao do LAMP | Linux, Apache, MySQL, PHP "
echo "########################################################"

sudo tee /etc/sudoers.d/$USER <<END
END

echo "########################################################"
echo " Atualizando Bibliotecas "
echo "########################################################"

sudo apt-get update

echo "########################################################"
echo " Setando a senha de Administrador do MY SQL "
echo "########################################################"

sudo debconf-set-selections <<< ‘mysql-server mysql-server/root_password password SENHA123’

sudo debconf-set-selections <<< ‘mysql-server mysql-server/root_password_again password SENHA123’

echo "########################################################"
echo " Instalando o LAMP Server "
echo "########################################################"

sudo apt-get install lamp-server^ -y

echo "########################################################"
echo " Fim do Script | Obrigado! www.gustavomagella.com "
echo "########################################################"
[/sourcecode]

 

Agora, vamos enviar nosso script [.sh] para a Storage Account no Azure.

[sourcecode language=”bash”]az storage blob upload –container-name scripts –name Azure_Linux_LAMP.sh –account-name "stgmagella" –account-key "dwjgJ+rSrChCE4lfTLpBlobPJ8aenhchW50j8axj2sNxNklW+Jd9xDTOd4oFEbOfaECGFhoEXwDAip3Qsnbzng==" –file Azure_Linux_LAMP.sh[/sourcecode]

 

Vamos criar o Arquivo JSON (mais uma vez o Notepad ++, nos ajudará com isso…haha) com a URI + nome do Script que será executado.

URI: https://<nome-da-storage-account>.blob.core.windows.net/<nome-do-share>/<nome-do-arquivo>

Arquivo JSON Criado: Azure_LAMP.json

[sourcecode language=”css”]{
"fileUris": ["https://magellasa.blob.core.windows.net/tst/Azure_Linux_LAMP.sh"],
"commandToExecute": "./Azure_Linux_LAMP.sh"
}[/sourcecode]

O comando abaixo, deverá ser executado dentro do diretório (local) que contém o arquivo JSON. Nele, vamos apontar o arquivo JSON que será utilizado para executar nosso script na VM Linux.

[sourcecode language=”bash”]az extension set –resource-group "rg-new" –vm-name "vm-lamp-ubuntu" –name customScript –publisher Microsoft.Azure.Extensions –settings ./Azure_LAMP.json[/sourcecode]

E pronto!

Agora, abriremos o browser, digitaremos o IP dessa nossa VM, e já veremos nosso Apache funcionando! 😉

Agora já podemos ter sites e Web Apps no Azure, utilizando um ambiente totalmente controlado e gerenciado por nós, com o LAMP!!

Simples? Fácil? Rápido? (Deixe seu feedback!)

Se gostou, compartilhe esse post! Deu Muuuuuuito trabalho automatizar, mas acredito que ficou bem legal.

Aguardo você para ler meu próximo post! (Vou pensar em algo bem bacana!) ????

Um Forte Abraço!

Gustavo Magella

#borapranuvem #cloud4all