Mongodb, Nodejs e Docker
A AWS web services nos dá uma gama muito grande de serviços onde pode-se apenas preocupar-se com o desenvolvimento e gestão do seu aplicativo, deixando as configurações de modo automático e fixando-se em outros pontos.
Neste tutorial vamos montar um ambiente sem uso do AWS RDS em uma máquina local com nodejs, mongodb e docker.
Pré-requisitos:
- nodejs e npm instalados
- docker e docker-compose instalados
- conhecimento em linha de comando neste caso linux, mas pode ser o sistema que estiver usando
- conhecimento em javascript
- conhecimento em node e npm (node package manager) -
- conhecimento básico de redes
- conhecimento básico de banco de dados
Na linha de comando do seu computador onde queira ter seu workspace digite o seguinte comando:
- npm init -
Siga as instruções e construa o esqueleto da sua aplicação node conforme imagem abaixo:
Vamos instalar as dependências node via npm:
- npm install --save express mongoose
Para fazermos o “live reload da aplicação” iremos usar o nodemon - useo o comando abaixo para instalar sua dependência:
- npm install --save-dev nodemon
Vamos criar um ponto de start para o nodemon no package.json para iniciar a aplicação com o mesmo no ambiente de dev, abra a aplicação no seu editor preferido. No meu caso uso visual studio code.
- “start”: “nodemon index.js”
Seu arquivo package.json deverá estar desta forma depois da alteração:
Agora iremos criar uma rota na aplicação usando express, mas para isto temos de criar um arquivo de entrada da nossa aplicação chamdo “index.js” na raiz do projeto:
- index.js
Este arquivo index.js deverá ter o sequinte conteúdo abaixo:
const express = require('express');
const app = express();
const PORT = 3000;
app.get('/',(req,res) =>{
res.json({mesage: ‘Hello API com nodejs, mongodb e docker’});
})
app.listen(PORT,()=>{
console.log(`app running on url http://localhost:${PORT}`);
})
Agora já temos uma aplicação funcional com 1(um) endpoint e para testar vamos executar o seguinte comando na sua CLI:
- npm run start (irá chamar o nodemon para fazer o live reload da aplicação)
Verás uma tela igual a abaixo:
Vá no seu browser até http://localhost:3000 e verás a tela abaixo:
Execute “CTRL+C” no seu terminal para finalizar sua aplicação.
Com sua aplicação funcional agora é hora de inserir o docker no projeto.
Neste momento temos o projeto inicial em nodejs criado e vamos adicionar o docker na aplicação. Para isto iremos criar 2(dois) arquivos na raiz do projeto:
- docker-compose.yml
- Dockerfile (exatamente com este nome e sem extensão)
O conteúdo destes arquivos serão:
Dockerfile:
- FROM node:16.14.0
- MAINTAINER mauroslucios
- RUN mkdir -p /var/www/app/node_modules && chown -R node:node /var/www/app
- WORKDIR /var/www/app
- COPY package.json ./
- RUN npm install
- COPY . .
- COPY --chown=node:node . .
- USER node
- EXPOSE 3000
- CMD ["node","app.js"] ENTRYPOINT ["npm","start"]
Nesta etapa temos que fazer o build da aplicação para gerar a imagem que será usada no docker-compose.yml para criar o container do nodejs, use o comando abaixo, mas troque pelo seu usuário(mauroslucios) dockerhub.
- docker build -t mauroslucios/tutorial:1.0 .
- docker build -t <seu-usuario-dockerhub>/tutorial:1.0 .
O comando acima deverá produzir a seguinte saída abaixo no terminal:
Ao final deverá aparecer a mensagem de sucesso do build conforme imagem abaixo:
- Successfully tagged <seu-usuario-dockerhub>/tutorial:1.0
Execute o comando abaixo para ver a imagem docker do nodejs criada:
- docker images
Vamos criar a conexão com o banco de dados mongo. Crie uma pasta chamada database na raiz do seu projeto e nesta pasta crie um arquivo chamado: “connection.js” e adicione o conteúdo abaixo no mesmo.
const mongoose = require('mongoose')
mongoose.connect('mongodb://mongodb:27017/apirest').then(()=>{
console.log('Mongodb conectado...')
}).catch((err)=>{
console.log('Houve um erro ao conectar: '+ err)
})
mongoose.Promise = global.Promise
module.exports = mongoose
No arquivo docker-compose.yml na raiz do projeto insira o conteúdo abaixo:
version: "3.7"
services:
web:
image: mauroslucios/tutorial:1.0
ports:
- 3000:3000
volumes:
- ./:/var/www/app
environment:
NODE_ENV: development
depends_on:
- db
links:
- db
db:
image: 'mongo'
container_name: mongodb
ports:
- '27017:27017'
volumes: - ./data/db:/data/db
Agora é monento de rodar a aplicação em um container docker, para isto execute o comando abaixo:
- docker-compose up (aqui não usei a flag -d para ver o resultado do log no console)
Verás uma tela parecida com a mesma abaixo:
Se você for bem atento e olhar no log do terminal irá ver a mensagem: “Mongodb conectado”, conforme imagem abaixo:
Volte ao browser na url: http://localhost:3000 e verás sua aplicação dockerizada em funcionamento. "Isto é magnífico!" I love you docker.
Na sua CLI execute os seguintes comandos de verificação docker:
- docker ps (verás os containers em execução)
- docker inspect <id-container> (mostrará as configurações do container)
- docker stop <id-container> (para o container em execução)
- docker exec -it <id-container-mongo> /bin/bash (entrará no terminal do container)
- dentro do terminal do container mongo execute: mongo (entrará no shell do mongo)
- execute “show databases” e verá os bancos criados no mongo
- CTRL + P + Q sai do shell do container
Com estes passos temos um ambiente nodejs com mongo funcionado dentro do docker. Se quiser pode trocar pelo banco de dados que seu projeto se adaptar melhor conforme necessidade.
OBS: o backup do seu banco mongo está na pasta “data/db” na raiz do seu projeto.
Isto é apenas uma forma de mostrar a utilização desta ferramenta fantastica chamada docker. “I love You Docker”.
github de um exemplo mais completo: “mauroslucios/restapi-nodejs”
Até a próxima!
Mauro Lúcio Pereira da Silva
Ciência e TecnologiaArtigos de mauro pereira
Ver blogHoje iremos criar um simples container docker com Apache “Tomcat/10.0.23” de maneira rápida e com po ...
No Console do AWS, Acesse o RDS Management Console · No painel de navegação esquerdo, clique em Data ...
Profissionais relacionados
Você pode estar interessado nestes trabalhos
-
Encanador para motor de agua de encanamento
Encontrado em: Cronoshare BR C2 - há 16 horas
Cronoshare Araranguá (Santa Catarina), BrasilEscapo duas boia dentro do poço e daí o motor não puxa águaQual serviço de encanador está precisando? · Motor de agua · O que precisa de conserto/manutenção? · Encanamento · Que tipo de problema necessita resolver? · Não tá subindo água na caixa · Qual é o local do serviço? · Cas ...
-
Auxiliar Administrativo de Oficina
Encontrado em: Talent BR C2 - há 1 dia
Grupo Sinosserra Porto Alegre, Brasil effectiveJOB DESCRIPTION · Com você, somos mais COMPLETOS. · Venha fazer parte de um Grupo que acredita nas pessoas e cresce com elas · #VemproGrupo · Grupo Sinosserra · RESPONSIBILITIES AND ASSIGNMENTS · Atender com excelência os usuários do Grupo (internos e externos), tornando a ex ...
-
Casa de retiro para pessoa com mobilidade: cadeirante
Encontrado em: Cronoshare BR C2 - há 1 dia
Cronoshare Porto Alegre (Rio Grande do Sul), BrasilProcuro uma casa onde possamos asilar a vó. Ela está passando por períodos de esquecimento. Não caminha, come tudo sem restrições, fazemos papinhas e ela usa fraldas. Conversa, mas não reconhece mais a maioria das pessoas. Tem 85 anos. Não recebe nenhum benefício em razão de uma ...
Comentários