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:
- Frontend en Node.js.
- 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