Há algum tempo, o Google criou o App Engine, plataforma como serviço na nuvem do gigante das buscas, que até então suportava Java, Python e Go. No Google I/O de 2013, foi apresentada uma nova linguagem suportada pelo PaaS da empresa mais buscada de Mountain View: PHP. Essa foi a “feature” mais pedida pela comunidade App Engine e, nesse caso, os pedidos foram atendidos.
O que é cloud computing? O App Engine é melhor que seus concorrentes? Consigo fazer café no App Engine? São perguntas que não serão respondidas neste artigo. Pretendo apresentar um aplicativo simples até seu deploy no GAE (Google App Engine). Em um próximo artigo, iremos mais fundo no SDK PHP.
O primeiro passo é criar um aplicativo no Console de Desenvolvedor do GAE, informando um nome e um ID para o mesmo – para isso, basta ter uma conta Google. O ID, como esperado, deve ser um identificador único para o projeto e o usaremos em breve – para este artigo, usarei imasters-simple-math. Por hora, isso é suficiente.
Em seguida, você deve baixar o SDK e preparar seu ambiente de acordo com seu sistema operacional. Em suma, você deve ter Python 2.7, PHP 5.4 e MySQL 5.5 instalados e disponíveis no sistema para tirar proveito do GAE SDK. Descompacte o arquivo e mova o diretório google_appengine para o diretório de sua preferência – voltaremos já para ele.
Agora vamos criar nossa aplicação. Criei um diretório para ela em meu diretório de projetos. Vou usar o Composer para gerir minha dependência (no caso, o microframework Respect) e realizar o autoloading. Algo não padrão que também precisarei é o BCMath, extensão PHP com funções de aritmética em nível binário, que traz resultados precisos – essa é uma das extensões PHP suportadas pelo GAE. Vale ressaltar que o imasters-simple-math está no GitHub, portanto tudo o que precisa para rodá-lo em sua própria instância de GAE é cloná-lo forká-lo, rodar o update do Composer e editar o arquivo app.yaml com as configurações do seu projeto.
O arquivo app.yaml contém a configuração do seu projeto para o SDK. Na diretiva handlers, você configura o comportamento das requisições para sua aplicação (por exemplo, que toda requisição deve ser tratada pelo index.php, que é o comportamento padrão de nossa aplicação). Definimos também o runtime (php, duh :P) e, por último, mas não menos importante: application – este deve conter como valor o ID de sua aplicação (aquele que criamos no Console de Desenvolvedor; no nosso caso, imasters-simple-math).
Com tudo isso pronto, podemos rodar o servidor embutido no sdk com o seguinte comando:
/path/para/google_appengine/dev_appserver.py /path/para/seu-projeto/
Se você tiver não tiver problemas em seu ambiente, uma instância local estará disponível em http://localhost:9999. É possível que o SDK não encontre sua instalação de PHP: se isso acontecer, ele vai avisar, e você precisa informar no parâmetro –php_executable_path o caminho para o executável do PHP.
Aqui vale um pequeno lembrete: é o executável CGI de seu ambiente – em algumas instalações, já há um executável php-cgi, e é para este que você deve apontar; em algumas distribuições Linux, esse executável se chama php mesmo, mas se encontra em outro diretório. Nas versões mais recentes, ele está incluído no pacote php5-fastcgi. No meu caso, a chamada ficou assim, pois também quero usar outra porta para o webserver:
~/bin/google_appengine/dev_appserver.py --port=9999 --php_executable_path=/srv/www/cgi-bin/php ~/Projects/imasters-simple-math
Com o AppServer rodando, você tem disponível um ambiente com muitas das funcionalidades do GAE, inclusive um painel administrativo da instância na porta 8000. Agora você pode testar sua aplicação.
Com a aplicação testada, podemos fazer o deploy no GAE. Para isso, é só rodar:
/path/para/google_appengine/appcfg.py update /path/para/seu-projeto/
Insira seu usuário e senha (conta Google) e aguarde o término do processo. Agora é só testar sua aplicação em http://seu-projeto.appspot.com. No caso do projeto para este artigo, é http://imasters-simple-math.appspot.com (sim, ela está no ar e rodando).
Você pode utilizar essa aplicação como uma API. Por exemplo, para somar dois números, você deve acessar /add/55/128. Uma subtração com /sub/5.38/3.14. Uma multiplicação com /mul/5.43/0.44. Uma divisão com /div/0.1/0.7, e podemos ter o resto de uma divisão com /mod/5/4. Também deixei disponíveis um recurso para potência (/pow/2/8) e uma de raiz quadrada (/sqrt/144). Os números nos recursos que passei aqui podem ser substituídos, e a precisão que deixei é de 10 casas decimais. Se for usar em seu projeto “forkado”, você pode mudar essa precisão no arquivo application/bootstrap.php.
Se estiver usando Windows ou Mac, você pode contar com o GAE Launcher – um app que facilita sua vida lidando com o SDK; os instaladores estão no diretório dele. Há também uma integração com o GAE se você estiver utilizando o IDE PHPStorm – fiz um vídeo curtinho há pouco tempo mostrando por cima essa integração, veja em http://youtu.be/sdnaL_ud6bQ.
Esqueci de mencionar que você pode fazer tudo isso sem custos: o Google não vai te cobrar por simplesmente levantar uma aplicação simples. Se precisar de mais recursos, aí você pode configurar o GAE para a cobrança quando ultrapassar a cota grátis. Esse ambiente é muito poderoso – sem contar que é um serviço muito interessante para colocar uma PoC (Proof of Concept – Prova de Conceito) no ar sem custos em um ambiente de nuvem. Vale lembrar que, além das vantagens do Cloud Computing, no GAE sua aplicação tira proveito da camada de Cache do Google.
No próximo artigo, entraremos mais a fundo no SDK PHP do Google App Engine.
Até a próxima!
Links úteis:
- imasters-simple-math- https://github.com/duodraco/imasters-simple-math
- Console de Desenvolvedor do Google App Engine – https://console.developers.google.com
- Baixe o SDK do GAE – https://developers.google.com/appengine/docs/php/gettingstarted/installing
- Composer – http://getcomposer.org
- Respect – http://respect.li
- BCMath – http://br1.php.net/bcmath
- Extensões PHP suportadas pelo GAE – https://developers.google.com/appengine/docs/php/#PHP_Enabled_extensions
***
Artigo publicado originalmente na Revista iMasters: http://issuu.com/imasters/docs/revista_imasters__10_-_maio_2014