Guía de Fly.io: despliega tu primera app multicontenedor y optimiza regiones globales

·

·

Guía de Fly.io: despliega tu primera app multicontenedor y optimiza regiones globales

Introducción

Fly.io es una plataforma de despliegue distribuido que permite ejecutar tus aplicaciones cerca de tus usuarios, con soporte nativo para contenedores múltiples y regiones globales. En esta guía detallada aprenderás a:

  • Configurar tu entorno y Fly CLI.
  • Crear y desplegar una app multicontenedor.
  • Optimizar el despliegue en regiones globales.
  • Gestionar escalado, volúmenes y monitorización.

La siguiente documentación asume que ya tienes instalados Docker y Git. Vamos paso a paso.

1. Instalación y configuración del CLI

El primer paso es instalar el cliente de Fly.io y autenticarse:

curl -L https://fly.io/install.sh  sh
fly auth signup   # o fly auth login si ya tienes cuenta

Una vez autenticado, comprueba la versión:

fly version

Deberías ver algo similar a fly version x.y.z.

2. Estructura de una app multicontenedor

Para este ejemplo crearemos una aplicación sencilla con dos servicios:

  1. Frontend en Node.js.
  2. Backend en Go.

La estructura de directorios:

my-multiapp/
  ├─ frontend/
  │   ├ Dockerfile
  │   └ src/
  └─ backend/
      ├ Dockerfile
      └ cmd/

Además necesitaremos un fly.toml en la raíz:

app = my-multiapp
primary_region = iad

[[services]]
  internal_port = 3000
  protocol = tcp
  processes = [frontend]
  [services.http_checks]
    path = /
    interval = 10000
    timeout = 2000

[[services]]
  internal_port = 8080
  protocol = tcp
  processes = [backend]
  [services.http_checks]
    path = /healthz

3. Definir Dockerfiles

3.1 Frontend (Node.js)

FROM node:18-alpine
WORKDIR /app
COPY src/package.json ./
RUN npm install --production
COPY src .
EXPOSE 3000
CMD [node, server.js]

3.2 Backend (Go)

FROM golang:1.20-alpine AS build
WORKDIR /src
COPY cmd/ .
RUN go build -o backend

FROM alpine:3.16
WORKDIR /app
COPY --from=build /src/backend .
EXPOSE 8080
CMD [./backend]

4. Despliegue inicial

Con todo listo, inicializa y lanza tu app en Fly:

fly launch --name my-multiapp --no-deploy
# Revisa y ajusta fly.toml
fly deploy

Cuando finalice, obtendrás la URL pública:

my-multiapp.fly.dev

5. Escalado automático y procesos

Puedes definir el número de instancias por proceso en fly.toml:

Luego, actualiza con fly deploy. Fly equilibrará la carga entre instancias.

6. Optimización de regiones globales

Fly.io permite distribuir tu app en múltiples regiones para minimizar latencia. Para listar regiones disponibles:

fly regions list

Por ejemplo:

Región Código Latencia estimada
Washington DC iad 10 ms
São Paulo gru 80 ms
Tokio nrt 180 ms

Para habilitar regiones adicionales, edita primary_region y añade bloques [[regions]]:

regions = [iad, gru, nrt]

Y vuelve a desplegar:

fly deploy

7. Volúmenes persistentes

Si tu backend necesita almacenamiento, crea un volumen:

fly volumes create data-vol --size 1 --region iad

A continuación, mántalo en fly.toml:

Deploy y tu servicio tendrá almacenamiento persistente.

8. Monitorización y logging

  • Logs en tiempo real: fly logs
  • Métricas: Accede al panel en https://fly.io/dashboard
  • Alertas: Configura alertas en tu cuenta para uso de CPU, memoria o errores.

9. Buenas prácticas y consejos

  • Divide procesos: Mantén frontend y backend independientes.
  • Usa health checks: Garantiza redirecciones solo a instancias sanas.
  • Region fallback: Escoge regiones secundarias con latencia aceptable.
  • Actualizaciones sin downtime: Utiliza fly deploy --strategy rolling.
  • Seguridad: Gestiona secretos con fly secrets set.

Conclusión

Fly.io ofrece una solución potente y flexible para desplegar aplicaciones multicontenedor en múltiples regiones del mundo. Con esta guía has visto desde la configuración inicial hasta la optimización de regiones y volúmenes. Ahora estás preparado para ofrecer baja latencia a tus usuarios, escalar de forma automática y mantener un flujo de trabajo profesional.

Para más detalles y documentación avanzada, visita https://fly.io/docs/ y únete a la comunidad en https://community.fly.io/.



Leave a Reply

Your email address will not be published. Required fields are marked *