Workshop: Deploy descomplicado de aplicações em VPS 🚀

Utilizando Docker para escalonar aplicações Node.Js

Publicado em 20/12/2016

Atualizado em 04/06/2024

Ao iniciar um projeto, é muito importante conhecer os requisitos do sistema, bem como saber qual carga de acesso que ele deve suportar. O Node.JS é uma ótima solução para criar aplicações onde ocorrem entrada e saída de muitos dados, pois possui uma grande facilidade de escalonamento horizontal. Neste artigo, vamos demonstrar como configurar o ambiente de desenvolvimento para a criação de projetos escalonáveis com o Docker. Utilizando essa plataforma aberta, é possível realizar deploys e escalonar aplicações com tranquilidade. Além disso, o Docker providencia um ambiente isolado e leve para sua aplicação, graças à virtualização por containers.

A grande diferença entre a virtualização por containers e a de uma VM (Virtual Machine) é o consumo de espaço e recursos utilizados pela máquina. O motivo dessa disparidade é o fato de a VM emular o hardware de uma máquina utilizando uma camada denominada hypervisor, enquanto um container faz a virtualização pelo próprio sistema operacional. Em outras palavras, um container faz o agrupamento e o isolamento de recursos. Tudo o que está dentro de um container não enxerga o que está fora (Host).

A virtualização por container já existe há algum tempo, mas o Docker acrescenta um grande diferencial ao processo. No Docker, cada imagem contém várias camadas, sendo assim, ele utiliza o UnionFS para reunir todas as camadas. Esse é um processo que concede rapidez, pois não há a necessidade de fazer rebuild para atualizar as imagens.

Dito isso, vamos configurar um ambiente em Docker para uma aplicação NodeJs. Um proxy reverso na frente das instâncias da aplicação é uma das configurações padrão que vamos utilizar. Não será necessário realizar qualquer tipo de configuração manual. Graças à comunidade, as imagens já estão prontas, sendo necessário apenas realizar pequenos ajustes para sua aplicação rodar. Para iniciar o proxy (vamos assumir que você já tenha instalado o Docker), basta executar o seguinte comando:

1 $ docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock -t jwilder/nginx-proxy

Ao executar o “run”, o daemon do Docker irá procurar pela imagem “jwilder/nginx-proxy” na sua máquina. Caso não encontre, ele irá baixar diretamente do Docker Hub. O comando “-v /var/run/docker.sock:/tmp/docker.sock” faz com que os dois arquivos fiquem sincronizados, tanto no host quanto no container. Mais informações sobre a imagem você pode verificar no link https://hub.docker.com/r/jwilder/nginx-proxy/. Agora é possível subir o container da aplicação com o seguinte comando:

1 $ docker run -d -e VIRTUAL_HOST=<HostDoSeuApp> --expose 8888 -v "<CaminhoDoSeuApp>":/usr/src/app -w /usr/src/app node:4.4 node index.js

Esse comando é similar ao primeiro, sendo a passagem da variável VIRTUAL_HOST a diferença-chave para o funcionamento dessa configuração. O comando deve conter o host que aponta para sua máquina – essa variável é utilizada para a configuração do proxy. Será necessário deixar a porta em que o servidor node está rodando aberta para o host (comando “–expose”).

Com isso, você tem seu ambiente pronto para ser executado localmente ou em produção. Além disso, você pode executar o comando para iniciar outro container da aplicação e, assim, escalar mais instâncias.

O Docker possui um sistema de versionamento de imagens pelo Docker Hub. Assim, se o autor da imagem fizer alguma atualização na configuração da imagem, ele pode fazer um commit e um push. Da mesma forma, as pessoas que possuem a imagem podem usar o comando pull para atualizar a sua versão. Além disso, é possível realizar rollbacks em alterações efetuadas no container.

Como foi demonstrado acima, é possível realizar a configuração de ambientes de maneira simples e rápida. Mesmo não sendo ainda recomendada a utilização dessa tecnologia (Docker) em produção, acreditamos que seja muito importante o desenvolvimento do seu estudo. Consideramos que pelo poder de automação, fácil configuração e gerenciamento que o método propõe, em um futuro próximo, ele fará parte do desenvolvimento das aplicações web e serviços cloud.

O que você achou deste conteúdo?

O que você achou deste conteúdo?

Bruno
Bruno Fidelis
Estudante de ciência da computação. Atualmente trabalha como desenvolvedor web na KingHost. Gosta de estudar novas tecnologias e criar soluções inteligentes a partir delas.
Bruno
Bruno Fidelis
Estudante de ciência da computação. Atualmente trabalha como desenvolvedor web na KingHost. Gosta de estudar novas tecnologias e criar soluções inteligentes a partir delas.

Compartilhe esse conteúdo com alguém que possa gostar também

Receba todo mês conteúdos
incríveis como esses para
seguir evoluindo

Conteúdos relacionados

Saber o que é HTTPS significa entender que vai muito além de um protocolo de segurança, mas sim um recurso essencial para proteger a credibilidade do seu negócio e até mesmo a performance das suas páginas. Mais do que pensar no layout das suas páginas, nos produtos que você vai oferecer ou até mesmo o...
O wireframe é uma ferramenta de alinhamento técnico, validação de requisitos e muito útil para a redução de retrabalho. Quando bem elaborado, antecipa problemas de navegação, arquitetura da informação e fluxo de usuário, economizando recursos em outras etapas. No desenvolvimento de produtos digitais, decisões tomadas nas primeiras fases impactam diretamente no custo, prazo e performance...
Diferentemente de builders tradicionais baseados em templates, o Lovable produz código editável e pronto para ser integrado a um repositório GitHub. Ou seja, é muito mais do que uma solução de prototipagem, é o ponto de partida para produtos reais. A criação de aplicações e sites por meio de IA generativa deixou de ser experimento...
A vCPU serve para executar processos dentro do sistema operacional da máquina virtual, permitindo que aplicações rodem como se estivessem em um servidor físico próprio. Conhecer esse modelo pode ser ideal para quem quer maior eficiência em um mesmo hardware. A virtualização é a base da infraestrutura moderna e, dentro de ambientes de cloud computing,...

Mensagens para você