$ git clone <<URL>>
Cloning into 'reto-devops'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
$ cd ./reto-devops
$ npm install
npm WARN [email protected] No repository field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
added 530 packages from 308 contributors and audited 1203947 packages in 34.589s
21 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
$ npm run test
> [email protected] test /basic-unit-test
> jest
PASS tests/sum.test.js
PASS tests/string.test.js
Test Suites: 2 passed, 2 total
Tests: 3 passed, 3 total
Snapshots: 0 total
Time: 5.655s
Ran all test suites.
$ node index.js
Example app listening on port 3000!
Podrá acceder a la API localmente en el puerto 3000
.
$ curl -s localhost:3000/ | jq
{
"msg": "ApiRest prueba"
}
$ curl -s localhost:3000/public | jq
{
"public_token": "12837asd98a7sasd97a9sd7"
}
$ curl -s localhost:3000/private | jq
{
"private_token": "TWFudGVuIGxhIENsYW1hIHZhcyBtdXkgYmllbgo="
}
NT: En nuestro equipo consideramos que cada aplicación debe venir bien documentada por parte del desarrollador para que el equipo de DevOps puede realizar los procesos de automatización de una manera mas eficaz.
¿Qué pasa con los contenedores? En este momento (2021), los contenedores son un estándar para implementar aplicaciones (en la nube o en sistemas locales). Entonces, el reto es:
- Construir la imagen más pequeña que pueda. Escribe un buen Dockerfile :)
- Ejecutar la app como un usuario diferente de root.
Una vez que haya dockerizado todos los componentes de la API (aplicación de NodeJS), estarás listo para crear un archivo docker-compose, en nuestro equipo solemos usarlo para levantar ambientes de desarrollo antes de empezar a escribir los pipeline. Ya que la aplicación se ejecuta sin ninguna capa para el manejo de protocolo http, añace:
- Nginx que funcione como proxy reverso a nuesta app Nodejs
- Asegurar el endpoint /private con auth_basic
- Habilitar https y redireccionar todo el trafico 80 --> 443
Como buen ingeniero devops, conoces las ventajas de ejecutar tareas de forma automatizada. Hay algunos sistemas de cicd que pueden usarse para que esto suceda. Elige uno, travis-ci, gitlab-ci, circleci ... lo que quieras. Danos una tubería exitosa. Gitlab-CI es nuestra herramienta de uso diario por lo cual obtendras puntos extras si usas gitlab.
Ya que eres una máquina creando contenedores, ahora queremos ver tu experiencia en k8s. Use un sistema kubernetes para implementar la API. Recomendamos que uses herramientas como Minikube o Microk8s.
Escriba el archivo de implementación (archivo yaml) utilizalo para implementar su API (aplicación Nodejs).
- añade Horizontal Pod Autoscaler a la app NodeJS
Realmente el pan de cada día es crear, modificar y usar charts de helm. Este reto consiste en:
- Diseñar un chart de helm con nginx que funcione como proxy reverso a nuesta app Nodejs
- Asegurar el endpoint /private con auth_basic
- Habilitar https y redireccionar todo el trafico 80 --> 443
Ya que hoy en día no queremos recordar recetas ni comandos, el reto consiste en automatizar los retos en un Makefile, considera especificar cuales son las dependencias necesarias para que tu Makefile se ejecute sin problemas.