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

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, dentre outras tarefas rotineiras em ambientes de desenvolvimento, testes e produção. Se esse é o seu caso o que tenho a lhe mostrar vai 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 desse texto. 😀


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 tornem 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 muito 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 a 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, é 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 micro-serviç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, que 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 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 permita, descrever e implantar toda a infraestrutura da nossa aplicação através de uma configuração simplista 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 vai 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 iremos informar ao Nanobox que desejamos levantar um ambiente com PHP 7.2.

Repare bem, já temos uma receita PHP básica com apenas 4 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.

Vamos rodar 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 artigo iremos adicionar 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:
https://github.com/dibmartins/php-nanobox

Nota: Este artigo não é um anúncio ou endosso pago pela Nanobox, quem me dera! Eu genuinamente penso que seu serviço é fantástico e libertador. Dê uma chance a ele e você também vai se apaixonar!