Dokku y como solucionamos la falta de presupuesto en el equipo de Sistemas.
Una de la premisas que se debe tener presente al trabajar en la administración pública es "la falta de presupuesto" y, creo que no solo en la administración pública aunque hago referencia más a esto porque actualmente "trabajo actualmnente de planta como servidor público"
Te platicaré un poco sobre como terminamos con Dokku, acostumbrado a trabajar como "Freelance" e incluso actualmente tengo un proyecto personal, donde solo me dedico a codificar, hacer commits, push siguiendo los principios de CI/CD y hacer estos cambios los más transparentes para el usurio, claro en tecnologías tener fuera un servicio $ cuesta, así como tener parados aviones sin despegar en un Aeropuerto.
Hace dos semanas empecé a desarrollar un API en GraphQL para interconectar unas funcionalidades de dos bases de datos, pero vaya lio con la tendencia serverless y la costumbre de trabajar con Heroku me propuse buscar alguna forma de replicarlo, a decir verdad "me he vuelto algo flojo estos últimso meses me da por no querer instalar nada del lado del servidor, anteriormente "descargar código, instalar dependencias, y ya sabes... el proceso de despliegue".
Dokku al rescate, hacía tiempo que ya había escuchado hablar de este "software" que permite tener tu propia PaaS pero por "falta de tiempo o flojera" no me había puesto a investigar, ni mucho menos aprenderlo, sin embargo mi necesidad de "ahorrar tiempo en despliegues, lo que actualmente hago con Heroku" hizo por un lado esa decidía de no aprender, así que fijado con este nuevo reto me pregunté ¿y si le invierto tiempo hoy domingo para aprenderlo? Bueno al principio la aventura no fue nada grata, tipico primeriso mi instalación en Debian "colapso", bueno en el manual dice Ubuntu ... vamos a ello, volví a configurar un servidor pero ahora con Ubuntu Server 20.04 (aclaro, para esta prueba utilicé la nube de Huawei, contento porque tengo un servidor en México, ya saben eso de la politíca de privacidad en posesión de partículares), y sopresa la instalación fue de lo más transparente posible. Hasta aquí todo bien ya tenía el Dokku funcionando, vamos a lo siguiente.
El martirio, como les comenté "nunca he trabajado con Dokku, literal apenas lo estoy aprendiendo" mi repositorio en Github y un archivo .env que, por obvias rázones está ignorado en el .gitignore, pasé al rededor de siete horas (22:00 del Domingo a las 05:00 del día Lunes) tratando de hacer funcionar el repositorio del API, los ejemplos que tenía en Stackoverflow van pegados a sitios estáticos, mi impresión fue de "no mms" no puedo, frustrado por todo me dije "csm, si o si debe funcionar". Empecé a combinar los Workflows de Actions y hasta al final quedó de la siguiente manera.
name: deploy
on:
push:
branches:
- master
jobs:
deploy:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v1
- name: Deploy the application
uses: landmaj/github-action-dokku@master
with:
PRIVATE_KEY: ${{ secrets.DOKKU_SSH_PRIVATE_KEY }}
PUBLIC_KEY: ${{ secrets.DOKKU_PUBLIC_KEY }}
HOST: ${{ secrets.DOKKU_HOST }}
PROJECT: apiseguridad
Y sorpresa, si funcionaba pero... pero no se hacía el despliegue hasta que se me ocurrió la idea de "crear previo la aplicación antes de ejecutar el Workflow" y vaya, funcionó, pero para todo esto requerí al crear la aplicación, setear las variables de entorno... si eso también fue frustrante.
Recomendado por LinkedIn
dokku config:set apiseguridad DB="mi conexion mongo"
dokku config:set apiseguridad PARAPARA_KEY="mi generar token"
dokku config:set apiseguridad PORT="puerto"
Ahora si, después de realizar eso en la VM (Elastic Cloud Server) volví a correr el Workflow, vaya funciona.
La verdad, estaba contento de esto, pero empezó otro calvario el puerto al que estaba redireccionado nginx era uno distinto al que yo le había puesto. Total empecé a explorar en el ECS y encontré la información de mi APP y vaya ajusté manual del puerto... todo bien el tema feo empezó cuando corrí de nuevo la APP :( y aparecía una pantalla azul "aquí me fui a dormir"
Regresando a batalla, volví a revisar la configuración, ejecutar un Workflow y seguía la ventana azul. Al final mi ardilla me dijo y si "cambias el puerto 5000, por el puerto de la APP" y reinicias... y sorpresa, mi API estaba viva.
No puedo, de alguna manera dejar de compartir mi felicidad porque, como comenté en una presentación "mi vida como desarrollador gira en la administración pública" donde "hay que hacer con lo que se tiene, y resolverlo porque todo urge para ayer".
Aun así, agradezco a mi jefe actual por darme la libertad de literal, experimentar lo que aprendo y con esto cierro el ciclo de tener mi propio "intento de AWS" local una simulación de s3 utilizando MinIO en un NAS de 11 TB, un PaaS con Dokku en un servidor HP (Algo viejo por cierto) y replicación y copias de seguridad en otro servidor local.
Algún día aprenderé más cosas CI/CD pero para el momento esto nos "ahorra tiempo"