webBudget agora com Docker!

Quer usar o webBudget mas não quer perder tempo com a instalação do ambiente? Fique feliz! Agora o webBudget tem um container Docker!

Ainda não conhece o webBudget?

Acesse a página oficial do projeto e conheça este sistema de controle financeiro open-source, é grátis! Mais em: http://webbudget.com.br/

O que é Docker?

Por definição, Docker é:

Docker containers wrap a piece of software in a complete filesystem that contains everything needed to run: code, runtime, system tools, system libraries – anything that can be installed on a server. This guarantees that the software will always run the same, regardless of its environment.

From: https://www.docker.com/what-docker

Ou seja, é como se pegássemos nossas aplicações e no lugar de disponibilizar um simples executável, entregássemos junto todo um conjunto computacional, com sistema operacional, banco de dados e tudo mais que o sistema requer para conseguir ser executado. Tudo isso disponível com apenas um simples comando.

Claro que montar um container da um certo trabalho, mas vale a pena pois evita aquele clássico jargão do mundo do desenvolvimento: "mas na minha máquina funciona!".

Eu poderia citar N outros motivos mas incentivar o uso do Docker, mas não é este o foco deste post, para isso vou deixar uma apresentação de Jérôme Petazzoni, ele é engenheiro do time do Docker e vai te ajudar a entender as coisas.

Dica: se você é da área de TI, mais especificamente de uma área ligada a desenvolvimento de software/infraestrutura e não sabe o que é Docker ou ao menos o básico para usá-lo, você está bem atrasado.

webBudget + Docker

Fazia um tempo que vinha trabalhando em algumas coisas com o Docker mas nunca havia pensando no wB com o ele. 

Nos ultimos dias recebi alguns e-mails de pessoas com dificuldade para instalar o sistema e confesso que isso me preocupa afinal o ecossistema JEE na qual ele é montado não é tão simples de configurar… Ai entra o Docker!

Montei basicamente 2 containers, um com o BD e outro com a aplicação, você roda primeiro o BD e depois a aplicação e vrauuu! Digita o IP do container no browser e pode usar o wB a vontade! Mas como fazer? 

Passo #0: não tenho docker

Instalar o docker caso você não tenha ele é a primeira parte, para isso siga a documentação oficial que é bem simples e 100% certeira na arte de te ensinar a usar a magia dos containers. Basta selecionar o seu sistema operacional e seguir o passo-a-passo.

Você também vai precisar do compose que trabalha como um facilitador para o uso do Docker, possibilitando que você crie containers e defina configurações de maneira mais simples. Para instalar o compose, é bem simples também bastar seguir este tutorial também da documentação oficial do Docker.

Passo #1: rodando o wB no modo hard

Você instalou o Docker e agora quer rodar a aplicação, bom, adianto que vai trabalhoso… Execute os dois comandos abaixo no seu shell na ordem apresentada:

docker run --name wb-db -it -p 3306:3306 -d arthurgregorio/webbudget-db

Isso vai dizer ao docker para baixar o container do banco de dados do webBudget e iniciá-lo. Agora vamos rodar a aplicação:

docker run --name wb-app --link wb-db:db -it -p 8080:8080 -d arthurgregorio/webbudget-app

Isso vai dizer ao Docker para baixar o container da aplicação, com o wildfly e o war para deploy, e em seguida fazer um link entre eles (bd e app) para que o wildfly consiga conectar a aplicação ao banco de acordo com as configurações do datasource.

Pronto! Agora você só precisa pegar o IP atribuído ao wildfly:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' wb-app

… e acessar a aplicação pelo browser, por exemplo: http://172.17.0.3:8080/

Passo #1.5: roda o wB no modo easy

Se você achou o jeito anterior difícil, ok, tem um jeito mais fácil… Lembra do compose? Então, com ele podemos simplificar este processo ai de cima… Salve o arquivo abaixo em algum lugar no seu PC com o seguinte nome docker-compose.yml:

version: '2'

services: 
  db:
    container_name: "wb-db"
    image: arthurgregorio/webbudget-db:latest
    volumes:
      - db-data:/var/lib/mysql
    restart: always
  app:
    container_name: "wb-app"
    image: arthurgregorio/webbudget-app:latest
    depends_on:
      - db
    links:
      - db
    ports:
      - "8080:8080"
    restart: always
volumes:
  db-data:

Depois, no diretório onde você salvou o arquivo rode o seguinte comando no shell:

docker-compose up -d --no-recreate

Ele vai dizer ao compose para ler este arquivo e fazer a mesma coisa que fizemos no passo 1 porém de uma maneira muito mais simples, veja que com apenas 1 comando fizemos um sistema completo rodar, sem ter que configurar praticamente nada.

Para pegar o IP, o comando muda um pouco:

docker inspect --format '{{ .NetworkSettings.Networks.docker_default.IPAddress }}' wb-app

Mas o princípio é o mesmo, pegar, colocar no browser e sucesso!

Simples e prático! Neste container o wB esta na versão 2.3.1, o próximo release do sistema que pretendo liberar até o final de fevereiro. Dúvidas ou sugestões? Escreva nos comentários ou me envie um e-mail! 

Documentação que utilizei como referência:

@gregorioarthur