Introducción
Fly.io es una plataforma moderna de edge computing que permite desplegar aplicaciones cerca de los usuarios finales,
reduciendo latencia y mejorando la experiencia de uso. Por defecto, las aplicaciones en Fly.io son stateless: cada despliegue se considera
efímero y no preserva datos entre reinicios de instancias. Sin embargo, muchas aplicaciones requieren almacenar datos duraderos: bases de datos,
ficheros de usuario, cachés persistentes, etc. Para esos escenarios, Fly.io ofrece volúmenes persistentes, que garantizan que la información
sobreviva a reinicios, escalado y recuperaciones automáticas.
1. Conceptos Clave de Volúmenes Persistentes
1.1 ¿Qué es un volumen persistente
- Persistencia: Datos almacenados en disco permanecen intactos después de detener o reiniciar una máquina virtual.
- Desacoplamiento: El almacenamiento se gestiona independientemente de la lógica de la aplicación.
- Durabilidad: Resistencia a fallos de hardware y a actualizaciones de software.
1.2 Documentación Oficial
Consulta siempre la guía oficial de Fly.io para configurar volúmenes.
2. Requisitos Previos
- Cuenta activa en Fly.io.
- Fly CLI instalado:
brew install superfly/tap/flyctlocurl -L https://fly.io/install.sh sh. - App creada o existente:
fly launchofly apps create mi-app. - Acceso SSH config. (opcional para debugging).
3. Pasos para Configurar un Volumen Persistente
3.1 Crear el Volumen
Fly.io permite crear volúmenes regionales:
fly volumes create data-volume --region iad --size 10
- data-volume: Nombre identificador.
- –region: Zona donde residirá el disco (ej. iad, gru, sin).
- –size: Tamaño en GiB (límite: 10–1024 GiB).
3.2 Definir el Volumen en fly.toml
En el fichero fly.toml de tu aplicación, añade una sección [mounts]:
| Clave | Descripción |
|---|---|
| source | Nombre del volumen creado (data-volume). |
| destination | Ruta en el contenedor (/data, /var/lib/postgresql/data, etc.). |
[[mounts]] source = data-volume destination = /data
3.3 Despliegue y Verificación
- Despliega:
fly deploy. - Verifica instancias:
fly status --app mi-app. - Comprueba el volumen montado:
fly ssh console -C ls -lha /data.
4. Casos de Uso Comunes
- Bases de datos SQL: Postgres, MySQL, MariaDB.
- Almacenamiento de usuario: Subidas de imágenes, ficheros estáticos.
- Caches persistentes: Redis en disco (snapshot).
- Montaje de volúmenes para compilación: Caché de dependencias NPM, Maven, etc.
5. Consejos y Mejores Prácticas
5.1 Nomenclatura y Organización
- Usar prefijos claros: appname-env-purpose (ej.
miapp-prod-data). - Llevar un registro en la documentación interna.
5.2 Tamaño y Escalado
- Empieza con un tamaño conservador (10–20 GiB) y ajusta según crecimiento.
- Para datos críticos, monitoriza uso con herramientas internas en la instancia.
5.3 Backup y Recuperación
- Realiza snapshots periódicos exportando datos a otro origen (S3, servidor FTP).
- Automatiza con cron en contenedor o workflow CI/CD.
5.4 Seguridad y Permisos
- Define usuarios y permisos en el sistema de ficheros para evitar accesos no autorizados.
- Si tu app maneja datos sensibles, encripta en la capa de aplicación.
5.5 Alta Disponibilidad
Dado que un volumen está atado a una región, considera:
- Desplegar réplicas de la base de datos en otras regiones y configurar replicación.
- Usar soluciones de clustering externas si requieres failover automático.
6. Ejemplo Práctico con PostgreSQL
1. Crear volumen y app:
fly apps create pg-app fly volumes create pg-data --region ord --size 20
2. Modificar fly.toml:
[services] internal_port = 5432 protocol = tcp [[mounts]] source = pg-data destination = /var/lib/postgresql/data
3. Variables de entorno:
PGUSER=flyPGPASSWORD=securepassPGDATABASE=mydb
4. Despliegue y verificación de inicio:
fly deploy fly logs --app pg-app
7. Resolución de Problemas Comunes
- Error ‘volume not found’: Verifica nombre y región con
fly volumes list. - Permisos denegados al montar: Ajusta
chownychmoden el Dockerfile o script de arranque. - Latencia alta de I/O: Asegúrate de que la región de la app y del volumen coincidan.
Conclusión
Configurar volúmenes persistentes en Fly.io es esencial para cualquier aplicación stateful. Siguiendo estos pasos y consejos,
podrás garantizar la durabilidad de tus datos, maximizar el rendimiento y mantener la seguridad.
Explora la documentación oficial para profundizar en cada detalle
y adaptar la configuración a tus necesidades específicas.
Leave a Reply