From 72c5aab36a138aab21b9e6dcd265249d5157ee21 Mon Sep 17 00:00:00 2001 From: Yutsuo Date: Mon, 19 Nov 2018 12:44:45 -0200 Subject: [PATCH] working on mongodb authentication with nodejs inside docker --- Dockerfile | 4 ++- README.md | 10 ++++++- app.js | 2 +- docker-compose.yml | 1 + org_cheat_sheet | 71 ++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 85 insertions(+), 3 deletions(-) create mode 100644 org_cheat_sheet diff --git a/Dockerfile b/Dockerfile index 9b65cb0..3f2c183 100755 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ FROM node WORKDIR /app # Copying npm config file setting npm repository location. -# COPY .npmrc .npmrc +COPY .npmrc .npmrc # If you add the package.json first and run npm install later, # Docker won’t have to install the dependencies again if you @@ -14,6 +14,8 @@ COPY package.json /app RUN npm install COPY . /app +ENV myName="John Doe" + CMD node app.js EXPOSE 3001 diff --git a/README.md b/README.md index f43b32e..4bdbe45 100755 --- a/README.md +++ b/README.md @@ -1 +1,9 @@ -Nothing to see here yet, folks. +Quarta tarefa: + +Faça com que o usuário e a senha do MongoDB seja passada para seu App utilizando variável de ambiente do Docker. + +Utilize um script bash para validar se as variáveis estão preenchidas antes de levantar o NodeJS. + +Mande foto do Dockerfile, código fonte e script bash. + +* passar usuário/senha por varíavel de ambiente docker (ENV). Usar bash para verificar se variável foi mesmo passada, se os campos de user/pass foram preenchidos. diff --git a/app.js b/app.js index cee3ace..261b473 100755 --- a/app.js +++ b/app.js @@ -2,7 +2,7 @@ var express = require('express'); var app = express(); var mongoose = require('mongoose'); var Schema = mongoose.Schema; -var database = 'mongodb://mongo:27017/test'; +var database = 'mongodb://myTester:test@mongo:27017/test'; var today = new Date(); var counter = 0; var Prometheus = require("prom-client"); diff --git a/docker-compose.yml b/docker-compose.yml index d45dd69..3c274b3 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -14,6 +14,7 @@ services: mongo: container_name: mongo image: mongo + command: --auth ports: - "27017:27017" prometheus: diff --git a/org_cheat_sheet b/org_cheat_sheet new file mode 100644 index 0000000..aeeb3fe --- /dev/null +++ b/org_cheat_sheet @@ -0,0 +1,71 @@ +SUPER ONBOARD HELP CHEATSHEET + +PREPARING ENVIROMENT + + +// Simple way to connect to database +mongoose.connect(database).then( + () => {console.log('Database is connected') }, + err => { console.log('Can not connect to the database' +err) +}); + +npm :: config +// npm config set registry +// using command line +npm config set registry http://npm.repo.labbs.com.br +// using .npmrc file +registry=http://npm.repo.labbs.com.br + +// Docker :: show container IP +docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' [container_name] + +// Docker :: daemon config +// daemon file path +/etc/docker/daemon.json +// daemon file content +{ + "bip": "192.168.128.1/18", + "dns": ["172.18.51.10", "172.18.51.11"] +} + +// Docker :: send command line +docker exec -it [container_name] + +// Ubuntu :: reload daemon and start/restart/stop services +systemctl daemon-reload +systemctl restart docker + +// Ubuntu :: check service status +// all services +service --status-all +// one specific service +service docker status + +// MongoDB Access control +// connecting to mongo shell inside docker: +docker exec -it mongo mongo +// create admin user +use admin +db.createUser( + { + user: "admin", + pwd: "admin", + roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ] + } +) +exit +// reconnect to mongo shell turning access control on +docker exec -it mongo mongo --auth +// create new user +use test +db.createUser( + { + user: "myTester", + pwd: "test", + roles: [ { role: "readWrite", db: "test" }, + { role: "read", db: "reporting" } ] + } +) +exit +// logging in as new user +mongo -u "myTester" -p "test" --authenticationDatabase "test"