Delen via


Como rodar aplicações PHP no Windows Azure utilizando o Visual Studio 2010

Olá pessoal,

Ouvi de muitas pessoas um mito que o Windows Azure somente consegue rodar aplicações desenvolvidas em .NET Framework e que não seria compatível com outras tecnologias. Como disse, isso é um mito, no Windows Azure a sua aplicação roda em um sistema operacional compatível com o Windows Server 2008 ou Windows Server 2008 R2, ou seja, praticamente tudo que é possível instalar e rodar nesses sistemas operacionais é possível fazer rodar no Windows Azure.

Tanto que a página sobre desenvolvimento do portal do Windows Azure, traz uma série de links e documentações sobre o assunto:

image

Existem várias maneiras de configurar um ambiente PHP no Windows Azure, nos passos abaixo vou utilizar o Visual Studio 2010 para isso. Apenas notem que não utilizarei o Visual Studio 2010 para desenvolver nem depurar PHP, vou utilizá-lo apenas para deploy de uma aplicação web no Windows Azure.

O primeiro passo é criar um projeto de de Windows Azure e adicionar uma Web Role:

image

Depois remova os arquivos criados por padrão pelo Visual Studio até que seu projeto fique com uma estrutura similar à estrutura abaixo:

image

Em seguida adicione os arquivos da aplicação PHP no projeto da Web Role, no meu caso adicionei o arquivo index.php, que somente traz informações do ambiente PHP através da chamada phpinfo().

image

image 

O próximo passo é instalar o PHP no Windows Azure. Lembre-se, estamos utilizando uma Web Role no nosso projeto que na prática instala nossa aplicação para rodar no IIS, o que precisamos fazer é configurar o PHP para rodar em conjunto com o IIS. Além dessa configuração básica de execução do PHP também pode ser interessante instalar drivers de comunicação com o SQL Azure e um acelerador, como o caso do WinCache.

Para realizar essas configurações, vou utilizar uma startup task  responsável por disparar as instalações utilizando o WebPICmd, que é a versão linha de comando do Web Plataform Installer, facilitando bastante a automação da instalação de ambientes web.

O primeiro passo da startup task é adicioná-la no projeto da web application, no meu caso, criei uma pasta chamada startup e adicionei a WebPICmd descompactada e um arquivo batch, o setup.cmd. Neste ponto é importante definir a propriedade “Copy to Output Directory” de todos os arquivos com o valor “Copy always”. No print abaixo é possível ver a estrutura de pastas e arquivos:

 image

O conteúdo do arquivo setup.cmd contém as chamadas para o WebPICmd realizar as instalações necessárias dos componentes do PHP no IIS

cd "%~dp0"
md appdata
reg add "hku\.default\software\microsoft\windows\currentversion\explorer\user shell folders" /v "Local AppData" /t REG_EXPAND_SZ /d "%~dp0appdata" /f
WebPICmdLine.exe /accepteula /Products:PHP53
WebPICmdLine.exe /accepteula /Products:SQLDriverPHP53IIS
WebPICmdLine.exe /accepteula /Products:WinCache53
reg add "hku\.default\software\microsoft\windows\currentversion\explorer\user shell folders" /v "Local AppData" /t REG_EXPAND_SZ /d %%USERPROFILE%%\AppData\Local /f
net start w3svc
iisreset /start
exit /b 0

Já a sua indicação como startup task fica no arquivo ServiceDefinition.csdef, conforme trecho abaixo (notem que o arquivo e nem todas as tags estão completas por economia de espaço)

<ServiceDefinition name="WindowsAzurePHP" …>
<WebRole name="PHPApp" vmsize="Small"> 
<Startup> 
<Task commandLine="startup\setup.cmd >> %Public%\Documents\setup.log"
      executionContext="elevated"
      taskType="simple" /> 
</Startup>…

Na definição da startup task digo que ela deverá executar de maneira elevada, ou seja, com permissões de administrador para poder realizar as instalações no ambiente e que também todos o texto que normalmente seria exibido na tela será redirecionado para o arquivo setup.log, podendo ser utilizado posteriormente em um diagnóstico em caso de problema.

Depois disso é só fazer o deploy e testar a aplicação

image

O código fonte deste projeto pode ser encontrado aqui.

RG