Cómo hosteo múltiples proyectos como freelance

¿Por qué dejé los hosting tradicionales?

Estaba aburrido del típico cPanel y de buscar hostings confiables para poner mis proyectos. Al final, siempre terminaba lidiando con fallas del mismo hosting, o alguno de mis clientes utilizaba más recursos de lo debido y hacía caer todo.

Por eso, me propuse aprender de infraestructura, no solo para llevar mis productos al siguiente nivel, sino también los de mis clientes. Fue entonces cuando decidí migrar a la nube.

Mi experiencia con diferentes proveedores cloud

Personalmente, he probado Rackspace, AWS, Digital Ocean y GCP. Aunque todas tienen sus ventajas y desventajas, elegir una u otra termina siendo más cuestión de gustos y confianza.

Cómo manejo los costos en la nube

La mayoría de las nubes tiene un modelo de cobro por uso, lo que implica que, según la estrategia de escalamiento, los costos pueden aumentar. Por esto, cuando vendo un proyecto como freelance, le informo claramente al cliente sobre estos costos, que serán traspasados directamente. Para lograr esto, es esencial mantener una separación correcta de cada proyecto. Así, puedes usar el mismo billing manager de cada nube para estimar los costos por proyecto y traspasarlos al cliente.

Además del costo directo de la nube, incluyo un valor adicional de mantención. Esto me permite reservar horas en caso de fallas y también mantener un colchón financiero en caso de que algún cliente se atrase en sus pagos.

Hosting gratuito para proyectos estáticos

Olvidé mencionar a Github. Cuando creo sitios estáticos, me gusta subirlos a un repositorio en Github y publicarlos mediante Github Pages, lo que permite tener un servidor gratuito para webs estáticas.

Terraform como herramienta principal

Para administrar proyectos diversos, utilizo Terraform. Esta herramienta me da flexibilidad para manejar cada proyecto como código, controlar cambios y además es portable. Por lo tanto, si un cliente desea mover su proyecto a otra cuenta, solo tengo que copiar los archivos correspondientes y entregárselos.

Cómo organizo los archivos de mis proyectos

Organizo el hosting de mis proyectos en un repositorio estructurado con una carpeta por cliente. Dentro de cada carpeta de cliente tengo subcarpetas por cada proyecto y, a su vez, dentro de cada proyecto, una carpeta por cada ambiente:

├── company-a
│   ├── proyecto-1
│   │   ├── dev
│   │   └── prd
│   ├── proyecto-2
│   │   ├── dev
│   │   └── prd
│   └── proyecto-3
│       ├── dev
│       └── prd
├── company-b
│   ├── proyecto-1
│   │   ├── dev
│   │   └── prd
│   ├── proyecto-2
│   │   ├── dev
│   │   └── prd
│   └── proyecto-3
│       ├── dev
│       └── prd
└── ...

En cada directorio guardo los archivos específicos del proyecto. Por ejemplo, para un proyecto alojado en GCP utilizo los siguientes archivos:

dev
├── cloudbuild.tf
├── cloudflare.tf
├── cloudrun.tf
├── domain_mapping.tf
├── iam.tf
├── main.tf
├── outputs.tf
└── variables.tf

Descripción de archivos Terraform

  • cloudbuild.tf: Configura Cloud Build para automatizar la compilación y despliegue tras cada actualización o push al repositorio, asegurando que siempre esté disponible la última versión.

  • cloudflare.tf: Define las configuraciones de Cloudflare, facilitando la gestión de DNS y asegurando que el dominio del proyecto apunte correctamente a la infraestructura.

  • cloudrun.tf: Configura Cloud Run, estableciendo recursos computacionales, memoria, entorno de ejecución y autoescalado, garantizando eficiencia y escalabilidad según la demanda.

  • domain_mapping.tf: Asocia un dominio específico con la instancia de Cloud Run, permitiendo acceso mediante un dominio personalizado.

  • iam.tf: Gestiona usuarios internos y permisos necesarios en Google Cloud Platform, asegurando que cada usuario tenga solo los accesos indispensables.

  • main.tf: Archivo principal que define el proveedor (en este caso GCP) y configuraciones generales necesarias para ejecutar los recursos.

  • outputs.tf: Muestra variables útiles generadas tras ejecutar Terraform, como URLs, IPs o identificadores.

  • variables.tf: Permite declarar variables de entrada para configurar fácilmente diferentes entornos o parámetros sin alterar el código directamente.

Conclusión

Con esta estrategia, he podido gestionar múltiples proyectos para distintos clientes de forma eficiente, minimizando caídas y optimizando costos. Además, existen estrategias adicionales para reducir gastos, como comprometer cierta cantidad de máquinas en la nube, disminuyendo así el costo por máquina, aunque esto requiere un compromiso de 1 a 3 años.

Si buscas asesoría específica para tu proyecto, no dudes en contactarme.

Autor: @rickyoncode
Fecha de creación: 18 de Marzo de 2025
Webstudio LogoBuilt with Webstudio