Browse Source

Phase III Task 2

master
Yutsuo 7 years ago
parent
commit
d45112fd50
  1. 10
      README.md
  2. 61
      docker-compose-full.yml
  3. 33
      docker-compose.yml
  4. 19
      nginx/nginx.conf
  5. 21
      nginx2/index.html
  6. 6
      node/app.js

10
README.md

@ -1,3 +1,11 @@
Fase III
Primera tarefa:
Implemente um serviço REST em NodeJS que exponha o endpoint "/token" que receba o JSON "{user:'user1', password:'pass1'}" e retorne um token JWT caso sucesso, ou status 500 caso contrário.
Implemente um serviço REST em NodeJS que exponha o endpoint "/token" que receba o JSON "{user:'user1', password:'pass1'}" e retorne um token JWT caso sucesso, ou status 500 caso contrário.
Segunda tarefa:
Crie uma página HTML que solicite usuário/senha, invoque o serviço da primeira tarefa e mostre a mensagem "Autenticado com sucesso" ou "Falha na autenticação".
Essa página deve estar em um segundo container e servida por NGINX. Mande o print da sua tela!

61
docker-compose-full.yml

@ -0,0 +1,61 @@
version: '3'
services:
nginx:
container_name: nginx
depends_on:
- app
restart: always
build: ./nginx
image: custom/nginx
ports:
- 8000:8000
networks:
- network_1
app:
container_name: app
depends_on:
- mongo
restart: always
build: ./node
image: custom/node
networks:
- network_1
- network_2
mongo:
container_name: mongo
build: ./mongo
image: custom/mongo
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: ruth
networks:
- network_2
ports:
- 27017:27017
prometheus:
container_name: prometheus
image: prom/prometheus:latest
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
networks:
- network_2
ports:
- 9090:9090
grafana:
container_name: grafana
image: grafana/grafana
networks:
- network_2
ports:
- 3000:3000
networks:
network_1:
ipam:
driver: default
config:
- subnet: 192.168.5.0/24
network_2:
ipam:
driver: default
config:
- subnet: 192.168.6.0/24

33
docker-compose.yml

@ -1,3 +1,4 @@
version: '3'
services:
nginx:
@ -8,19 +9,27 @@ services:
build: ./nginx
image: custom/nginx
ports:
- 8000:8000
- 80:80
networks:
- network_1
nginx2:
container_name: nginx2
restart: always
image: nginx
ports:
- "8080:8000"
environment:
- NGINX_PORT=8000
app:
container_name: app
depends_on:
- mongo
# depends_on:
# - mongo
restart: always
build: ./node
image: custom/node
networks:
- network_1
- network_2
# - network_2
mongo:
container_name: mongo
build: ./mongo
@ -29,7 +38,7 @@ services:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: ruth
networks:
- network_2
- network_1
ports:
- 27017:27017
prometheus:
@ -38,14 +47,14 @@ services:
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
networks:
- network_2
- network_1
ports:
- 9090:9090
grafana:
container_name: grafana
image: grafana/grafana
networks:
- network_2
- network_1
ports:
- 3000:3000
networks:
@ -54,8 +63,8 @@ networks:
driver: default
config:
- subnet: 192.168.5.0/24
network_2:
ipam:
driver: default
config:
- subnet: 192.168.6.0/24
# network_2:
# ipam:
# driver: default
# config:
# - subnet: 192.168.6.0/24

19
nginx/nginx.conf

@ -8,18 +8,23 @@ http {
upstream app {
server app:3001;
server prometheus:9090;
server grafana:3000;
}
server {
listen 8000;
listen 80;
location / {
proxy_pass http://app;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_pass http://app;
}
# location /prometheus {
# proxy_pass http://prometheus;
# }
# location /grafana {
# proxy_pass http://grafana;
# }
}
}

21
nginx2/index.html

@ -0,0 +1,21 @@
<body>
<div>
<h1>WELCOME, MAGUILA</h1>
</div>
<div class="form-header" style="background-color:black; color:white; padding:20px; left:50%; ">
<h2>Authenticate thyself</h2>
</div>
<form method="post" action="/token" novalidate>
<div class="form-field" style="background-color:black; color:white; padding:20px; left:50%; ">
<label for="message">Username</label>
<input class="input" id="username" name="username" autofocus >
</div>
<div class="form-field" style="background-color:black; color:white; padding:20px; left:50%; ">
<label for="email">Password</label>
<input class="input" id="password" name="password" type="password" value="" />
</div>
<div class="form-actions" style="background-color:black; color:white; padding:20px; left:50%; ">
<button class="btn" type="submit">LOGIN</button>
</div>
</form>
</body>

6
node/app.js

@ -8,7 +8,6 @@ var counter = 0;
const Prometheus = require('prom-client');
const fs = require('file-system');
const marked = require('marked');
// const bodyParser = require('body-parser');
const jwt = require('jsonwebtoken');
// database connection (with retries)
@ -138,8 +137,9 @@ app.post('/info/add/:name', function(req, res){
res.send('color ' + req.params.name + ' added to database');
});
connectWithRetry();
// connectWithRetry();
app.listen(3001, () => {
console.log('Server running on port 3001');
console.log('Server running on port 3001');
console.log('process.env.PORT: ' + process.env.PORT);
});
Loading…
Cancel
Save