Back-End

22 nov, 2018

Nanobox com PHP – Uma introdução ao Micro-PaaS

Publicidade

Querido(a) desenvolvedor(a), escrevo esta série de artigos pensando em você, que assim como eu, não pode se dar ao luxo de delegar a um sysadmin a configuração da infraestrutura dos seus projetos pessoais, mas também não deseja perder horas configurando volumes, máscaras de rede, balanceamento de carga, entre outras tarefas rotineiras em ambientes de desenvolvimento, testes e produção. Se esse é o seu caso, o que tenho a lhe mostrar cairá como uma luva, assim como aconteceu comigo.

Ao leitor mais impaciente, um breve disclaimer: o termo “Nanobox”, nas páginas do Brasil, relata até a presente data apenas ocorrências sobre receptores analógicos de antenas parabólicas. Mudar esse cenário caótico também faz parte do objetivo deste artigo.

Com o advento da cultura devops, é cada vez mais comum ver times pequenos, compostos basicamente por desenvolvedores executando tarefas que antes eram delegadas a um sysadmin. Por um lado isso é excelente, pois diminui a dependência do time e desburocratiza os deploys, mas isso também pode ter um lado negativo que é a perda de foco no que tange a entrega dos requisitos funcionais do projeto, que no final das contas, é o que nossos usuários anseiam.

É justamente nesses cenários, que dispõem de poucos recursos e prazos cada vez mais apertados, que se faz necessário o uso de ferramentas que tornam nosso dia a dia mais simples e prático.

No universo PHP, por exemplo, ainda existem aqueles projetos hospedados, por um motivo ou outro, em servidores compartilhados e cujo desenvolvimento foi baseado em ferramentas rudimentares como Wamp, Xamp, Lamp, etc.

O deploy costuma ser fácil e rápido e possibilita ao desenvolvedor por seu app à prova em pouco tempo, mas como esses ambientes não são uniformes, logo os problemas surgem.

Aquela versão do banco que é diferente, uma extensão que você esqueceu de instalar, o provedor que não disponibiliza a versão do PHP que você precisa, aquele FTP cheio de “_old” ou “_bkp”, enfim, poderia listar vários problemas dessa abordagem, mas acredito que esse assunto já foi esgotado e que é uma prática ultrapassada. Porém, há de se concordar que sua simplicidade era muito convidativa.

Concordamos também que é importante manter a paridade entre os diferentes ambientes. Logo, se você ainda desenvolve em Windows e disponibiliza seu produto, digamos, em ambiente Linux, que é grande a chance de ocorrer efeitos colaterais indesejáveis.

Certamente você já ouviu falar de ferramentas de automação de configuração, tais como Vagrant, Chef, Docker, etc. Todas elas foram concebidas com o intuito de resolver o problema acima, diminuindo a disparidade entre a máquina de quem desenvolve e o host de produção.

Até o momento o Docker tem feito isso com maestria, mas convenhamos que na medida em que o produto é encorpado com novos microsserviços, passa a ser um trabalho árduo para um dev a tarefa de dar manutenção nisso tudo e ele se vê perdido diante de containers numerosos e efêmeros.

Outra questão é o deploy. Qual ferramenta utilizar? Travis, Jenkins, Heroku? São inúmeras as opções. Cada qual ao seu estilo. Podemos listar mais rotinas como registro e acesso a logs, DNS, monitoramento em geral, escalabilidade! Se o seu público aumenta, é simples escalar sua aplicação? Tudo está muito amarrado em um único cloud provider? E se o preço subir e uma migração for necessária?

Pois é, diante de tudo isso é compreensível desejar a existência de uma ferramenta que nos permite descrever e implantar toda a infraestrutura da nossa aplicação através de uma configuração simples e padronizada.

Foi pensando nisso que @tyler_flint criou o Nanobox, um serviço de implantação automatizada, aliado a um utilitário na linha de comando, que abrange do início ao fim, todo o workflow de construção de aplicativos web. Tyler é um cara com vasta experiência em provisionamento de servidores para grandes empresas.

Utilizando o Docker por baixo do capô para provisionar um ambiente de desenvolvimento, o Nanobox fornece ambientes isolados e consistentes, permitindo a implantação de forma confiável quando tudo estiver pronto localmente.

Para minha surpresa, o Nanobox, que atingiu a versão beta em fevereiro de 2017, entregou muito mais do que eu estava procurando. Além de configurar meu ambiente com um arquivo YAML bem enxuto, ele também disponibiliza meios de:

  • Gerenciar tarefas de build da aplicação
  • Logar nos containers
  • Fazer o deploy com apenas um comando
  • Rollback de versão
  • Simular o ambiente de produção localmente
  • Escalar recursos de hardware
  • Monitorar os arquivos de log via dashboard
  • Backup automático
  • Configurar DNS e o certificado SSL da página

Micro-PaaS

O termo Micro-Paas ou μPaaS representa uma mudança na forma como os aplicativos são desenvolvidos e implantados. Ao invés de um aplicativo ser desenvolvido isoladamente de sua infraestrutura, ele é desenvolvido dentro de sua infraestrutura. Onde quer que ele vá, sua infraestrutura também irá. Ou melhor, onde quer que sua base de código esteja, sua infraestrutura também estará presente.

Muita informação, né? Mas calma: por enquanto, o que você precisa ter em mente é que o Nanobox vai funcionar como seu personal sysadmin, que ele é gratuito para desenvolvedores independentes, e que como todos os cloud providers oferecem pacotes gratuitos de entrada, você poderá disponibilizar sua app online sem gastar um único centavo.

Agora chega de conversa e vamos ao que interessa.

Download e instalação

Instalar o Nanobox é bem simples, basta seguir o guia oficial de acordo com seu sistema operacional. Lembrando que é necessário ter o Docker instalado e obviamente uma conta cadastrada para poder baixar o instalador.

Criação do ambiente de desenvolvimento

Vamos criar um projeto PHP do zero no diretório “php-nanobox”.

Dentro do diretório php-nanobox crie um arquivo chamado boxfile.yml.

Esse arquivo YAML centralizará todas as instruções necessárias para o Nanobox subir nosso ambiente, tanto na máquina local quanto no servidor de produção.

Instalação do PHP

Agora informaremos ao Nanobox que desejamos levantar um ambiente com PHP 7.2.

Repare bem, já temos uma receita PHP básica com apenas quatro linhas de código. Com ela já somos capazes de subir nosso ambiente. Para fazer isso, utilizaremos o seguinte comando:

Rodando o comando acima o nanobox vai startar as tarefas necessárias para prover um ambiente totalmente isolado através de containers Docker. Uma vez provisionado, seremos levados a um console interativo dentro desse ambiente.

Rodaremos o comando php -v para conferir se a versão instalada confere com aquela que especificamos no nosso boxfile:

Extensions! We like Extensions!

Adicione as extensões que você ama num estalar de dedos.

Instalação do Composer

Não poderíamos deixar nosso gerenciador de dependências de fora, não é mesmo? Para instalar o Composer adicione as linhas a seguir:

Até agora tudo tranquilo, certo? No próximo adicionaremos ao nosso boxfile o Nginx, o Mysql e o Redis.

O que é preciso ter em mente é que nossa infra vai acompanhar nosso código pra onde quer que ele vá. Uma vez que você publique algo no seu GitHub, por exemplo, bastará o desenvolvedor na outra ponta clonar seu repositório e rodar o comando nanobox run para ter exatamente o mesmo ambiente que o seu.

Um forte abraço!

Link para o projeto completo no GitHub: