Como desplegué todos mis proyectos en servidores de 24GB Ram 4CPU gratis

10 minutos de lectura · 1 ene 2024

En el anterior artículo Como usar Minio con Strapi v4 mencioné cómo podíamos obtener de forma gratuita más de 80GB de almacenamiento en la nube.

Lo prometido es deuda.

Preámbulo

Actualmente existen una cantidad enorme de empresas que ofrecen sus servicios en la nube a nosotros los desarrolladores. Normalmente tienen una capa bastante limitada, es suficiente para construir varios proyectos personales, pero no es muy escalable. Para escalar, hay que pagar.

Disconforme con la situación, decidí alquilar un servidor en contabo.com! que tenía un precio bastante competitivo, unos 70 euros al año por 8GB de RAM, 200GB almacenamiento Nvme y varias CPU.

Contabo fue una gran apuesta para el desarrollo de mis proyectos, pero con el paso del tiempo cada vez su performance era peor. Al ser un servidor compartido a veces los recursos se elevaban al 90%

Contabo sigue siendo la mejor alternativa calidad precio actualmente para pequeñas empresas / freelancers.

Sin embargo, aquí hemos venido a obtener 24GB RAM y 4CPU gratis.

Oracle en decadencia

No es ningún secreto que oracle cloud sea una de las plataformas con menos soporte a usuarios y peor UI del mercado. Sin embargo, su free tier es francamente increíble.

Podéis ver todo lo que ofrece en este post de Arnold Galovics.

Cómo nos aprovechamos de Oracle

Para ello utilizaremos este repo de Arnold Galovics y seguiremos todo lo que comenta en su post. No es necesario saber terraform, simplemente seguimos los pasos de la guía y obtendremos un clúster de kubernetes gratuito.

Cómo utilizamos este Cluster de kubernetes

Con este Clúster de Kubernetes, podemos seguir toda la serie de vídeos de nuestro amigo Viktor Farcic

Una vez entendemos cómo funciona argo-workflows, argo-events y argocd podemos utilizar estos dos repositorios:

Victor ha creado una infraestructura en la que simplemente podemos añadir la carpeta Kustomize a cada uno de nuestros proyectos y al efectuar git push y configurando un webhook de github conectado con argo-events se lanzan los workflows que se encargarán de buildear y desplegar la imagen automáticamente en nuestro clúster.

Necesitaremos configurar de forma correcta argo-combined-demo para añadir cada uno de los proyectos a nuestro cluster.

Cuál es la infraestructura que yo utilizo?

A lo largo del artículo he ido añadiendo todas las referencias que he utilizado para construir mi propia infraestructura cloud que me permite levantar numerosos proyectos gratuitamente ( al menos mientras Oracle no decida destruir mi Cluster sin motivo )

Utilicé como base argo-combined-demo, aunque es un repo que se me quedaba corto. Quería fácilmente poder añadir proyectos, pero había muchas limitaciones.

Kaniko construía mis imágenes de NextJS demasiado lento, así que modifiqué los workflows para conectarme a uno de mis servidores mediante ssh y efectuar el build de las imágenes en él directamente para optimizar el tiempo que tarda en crear dichas imágenes.

Posteriormente las imágenes se suben a oracle cloud registry con un nuevo nombre y se actualiza el nombre de la imagen en mi cluster de kubernetes mediante otro workflow que se encarga de hacer el despliegue continuo con argoCD.

El repositorio argo-combined-app es un gran ejemplo y una buena base, sin embargo, tiene la limitación de que solo está configurado para un solo Dockerfile.

En mi caso, utilizo monorepos que contienen el backend, front end, strapi y otros microservicios. Por lo que tuve que modificar el Kustomize a mi medida y crear un sistema para decidir que microservicios quiero que se vuelvan a construir tras hacer un commit a la rama main utilizando un json como este:

[
  {
    "name": "frontend",
    "folder": "../storefront",
    "enabled": true
  },
  {
    "name": "backend",
    "folder": "../backend",
    "enabled": false
  },
  {
    "name": "frontend-admin",
    "folder": "../admin",
    "enabled": false
  }
]

Este json es leído por mi workflow y se encarga de buildear la imagen asociada a cada microservicio.

Esta infraestructura me ha permitido construir un CI/CD basado en eventos con una escalabilidad muy grande y una configuración muy sencilla. Simplemente necesito hacer pequeñas modificaciones a la carpeta kustomize de cada proyecto y ejecutar un script que añade el webhook de argo-events a mi repositorio y añade el repositorio de github a argoCD.

Esta es toda la lógica que hay detrás de mis proyectos. Personalmente me tomó 20 días completos montar esta infraestructura sin saber nada. Estoy seguro de que también podrás escapar de tener que pagar altísimos costos a empresas cloud para desplegar tus numerosos proyectos.

Estás Interesado en montar esta infraestructura?

Puedes agendar una llamada conmigo aquí