Glab - S05 - Dapaza - 2024-02
Glab - S05 - Dapaza - 2024-02
Glab - S05 - Dapaza - 2024-02
LABORATORIO 05
Contenedores Microservicios II
Grupo: C Ciclo: V
Requiere No Puntaj
Excele Regul
Bueno mejora acept e
Criterio de Evaluación nte ar
(3pts) (1pts) . Lograd
(4pts) (2pts)
(0pts) o
Configura proyectos con múltiples
4
contenedores utilizando el servicio de
docker-compose
Utiliza comandos Docker para
4
verificar imágenes y contenedores
creados con docker-compose
Accede a múltiples contenedores y
4
verifica su correcto funcionamiento
Realiza observaciones y conclusiones
3
que aporten un opinión crítica y
técnica
Es puntual y redacta el informe
2
adecuadamente sin copias de otros
autores
Evidencia avance en la sesión de
3
laboratorio
LABORATORIO
Objetivos:
● Computadora personal.
Introducción:
Seguridad:
Procedimiento y Resultados:
Evidencia
cd app_node
"devDependencies": {
"nodemon": "^1.18.10"
}
Evidencia
4. Modifique el archivo app.js con el siguiente contenido (no elimine el código del archivo)
Evidencia
---antes ----
const MONGO_USERNAME = 'userdemo';
const MONGO_PASSWORD = 'Tecsup';
const MONGO_HOSTNAME = '127.0.0.1';
const MONGO_PORT = '27017';
const MONGO_DB = 'deliverydb';
---después ----
const {
MONGO_USERNAME,
MONGO_PASSWORD,
MONGO_HOSTNAME,
MONGO_PORT,
MONGO_DB
} = process.env;
Evidencia
MONGO_USERNAME=userdemo
MONGO_PASSWORD=Tecsup
MONGO_PORT=27017
MONGO_DB=deliverydb
Evidencia
.env
Evidencia
const options = {
useNewUrlParser: true,
reconnectTries: Number.MAX_VALUE,
reconnectInterval: 500,
connectTimeoutMS: 10000,
};
Evidencia
https://github.com/eficode/wait-for/blob/master/wait-for
Evidencia
chmod +x wait-for.sh
Evidencia
https://docs.docker.com/compose/compose-file/compose-file-v3/
version: '3'
services:
nodejs:
build:
context: .
dockerfile: Dockerfile
image: nodejs
container_name: nodejs
restart: unless-stopped
env_file: .env
environment:
- MONGO_USERNAME=$MONGO_USERNAME
- MONGO_PASSWORD=$MONGO_PASSWORD
- MONGO_HOSTNAME=db
- MONGO_PORT=$MONGO_PORT
- MONGO_DB=$MONGO_DB
ports:
- "3000:8080"
volumes:
- .:/home/node/app
- node_modules:/home/node/app/node_modules
networks:
- app-network
command: ./wait-for.sh db:27017 --
/home/node/app/node_modules/.bin/nodemon app.js
db:
image: mongo:4.1.8-xenial
container_name: db
restart: unless-stopped
env_file: .env
environment:
- MONGO_INITDB_ROOT_USERNAME=$MONGO_USERNAME
- MONGO_INITDB_ROOT_PASSWORD=$MONGO_PASSWORD
volumes:
- dbdata:/data/db
networks:
- app-network
networks:
app-network:
driver: bridge
volumes:
dbdata:
node_modules:
OJO: Se están definiendo dos servicios (nodejs y db).
El servicio nodejs será construido en base al archivo Dockerfile que se encuentra en el
proyecto, se están definiendo variables de entorno(environment), trabajar en el puerto
local 3000 y remoto 8080(ports), se define un volumen para guardar los
archivos(volumes), se define en que red trabajara(networks) y se define que se ejecute
el archivo app.js(command).
El servicio db se construye en base a una imagen de mongo(image), se define nombre
de contenedor(container_name), se definen variables de entorno(environment), se
define volumen para guardar datos(volumes), y se define en que red
trabajara(networks).
Por último, para ambos servicios se crea la red(networks) y se definen los volúmenes a
utilizar(volumes).
Evidencia
docker-compose up -d
docker ps
Evidencia
Evidencia
16. En su navegador web acceda a la dirección local para probar el servicio. Se está
accediendo al servicio creado nodejs
http://localhost:3000/
Evidencia
17. Realice un nuevo pedido: coloque su nombre y apellido y haga clic en Enviar
Evidencia
Evidencia
show dbs
Evidencia
20. Utilizar la base de datos deliverydb y listar los elementos insertados. Presione control +
c para salir del servicio
use deliverydb
db.pedidos.find()
Evidencia
docker-compose down
Evidencia
Evidencia
Tarea
Paso 1:
Crear una carpeta para el proyecto y organiza los archivos:
Evidencia
Evidencia
Evidencia
Evidencia
Evidencia
Evidencia
Evidencia
Evidencia
Luego, dentro de PostgreSQL, ejecuta la siguiente consulta para crear la tabla tasks:
OBSERVACIONES (5 mínimo):
(Las observaciones son las notas aclaratorias, objeciones y problemas que se pudo
presentar en el desarrollo del laboratorio)
Al principio, el middleware body-parser no estaba configurado correctamente o no se estaba
utilizando express.json() para manejar solicitudes JSON. Esto causaba que los datos enviados
desde Postman llegaran como null al servidor.
La falta del encabezado Content-Type: application/json puede provocar que el servidor
no interprete correctamente el cuerpo de la solicitud, lo que resultó en que los datos llegaran como
null.
Si bien la aplicación manejaba algunos errores en las rutas del servidor, un manejo de errores más
robusto podría ayudar a detectar y solucionar problemas antes. En algunos casos, no se
proporcionaban mensajes de error detallados.
Los cambios en la configuración de los archivos o en el código de la aplicación a menudo requieren
un reinicio completo de los contenedores Docker para que surtan efecto. No hacer esto causó
confusión al no ver los cambios aplicados inmediatamente.
Es posible que no se haya verificado la estructura de la tabla tasks en PostgreSQL correctamente
antes de enviar solicitudes POST. Esto puede causar que los datos no se almacenen como se esperaba.
CONCLUSIONES (5 mínimo):
(Las conclusiones son una opinión personal sobre tu trabajo, explicar cómo resolviste las
dudas o problemas presentados en el laboratorio. Además de aportar una opinión critica
de lo realizado)
Se logró configurar y ejecutar un entorno de desarrollo que incluye tanto un servicio de base de datos
PostgreSQL como un servicio de aplicación Node.js usando Docker-Compose. Esto permite una fácil
administración y despliegue de aplicaciones de múltiples servicios con una sola configuración.
La aplicación Node.js fue capaz de recibir y procesar correctamente solicitudes HTTP POST y GET
para crear y obtener tareas a través de rutas CRUD. El uso adecuado del middleware
express.json() permitió procesar los datos enviados en formato JSON de manera efectiva.
Se logró establecer una conexión efectiva entre la aplicación Node.js y la base de datos PostgreSQL. Se
configuraron las credenciales de conexión y la estructura de la tabla para almacenar correctamente las
tareas con campos como nombre_tarea, encargado_tarea, fecha_entrega_tarea y
estado_tarea.