Introducción
En este extenso tutorial aprenderás a desplegar y manejar bases de datos KV (Key-Value) y PostgreSQL en Fly.io, utilizando dos lenguajes populares: Go y Python. El objetivo es ofrecer una guía paso a paso, con ejemplos, buenas prácticas y enlaces de referencia para que puedas dominar este flujo de trabajo en un entorno de producción.
¿Por qué Fly.io
- Despliegue global: Instancias cerca de tus usuarios.
- Integración sencilla: CLI intuitiva y autoconfiguración.
- Servicios gestionados: KV y Postgres nativos sin infra extra.
1. Requisitos Previos
- Cuenta gratuita o de pago en Fly.io.
- CLI de Fly.io instalada:
brew install flyctlocurl -L https://fly.io/install.sh sh. - En tu máquina:
- Go 1.20 (guía oficial).
- Python 3.9 (descarga oficial).
- Git instalado (descarga oficial).
2. Configuración de Fly.io
- Login:
flyctl auth login. - Crear una app:
flyctl apps create nombre-de-tu-app --region iad - Inicializar y elegir: En tu proyecto local, ejecuta:
flyctl initCompleta con el nombre de la app y elige Go o Python.
3. KV en Fly.io
3.1 ¿Qué es Fly.io KV
Fly.io KV es un almacén de datos Key-Value distribuido y replicado, especialmente útil para sesiones, cachés y configuraciones. Con baja latencia y alta disponibilidad.
3.2 Creación y uso de KV
- Crear un espacio:
flyctl kv create mi-kv-ns - Listar espacios:
flyctl kv lists - Subir esquema:
flyctl kv migrate mi-kv-ns --auto
3.3 Ejemplo en Go
import (
context
github.com/superfly/flyctl/api // Ejemplo
)
func main() {
client := api.NewKVClient(mi-kv-ns)
ctx := context.Background()
// Set
err := client.Put(ctx, clave1, []byte(valor1))
// Get
valor, err := client.Get(ctx, clave1)
fmt.Println(string(valor))
}
3.4 Ejemplo en Python
from flyio_kv import KVClient
client = KVClient(mi-kv-ns)
# Set
client.put(clave1, bvalor1)
# Get
valor = client.get(clave1)
print(valor.decode())
4. PostgreSQL en Fly.io
4.1 ¿Por qué Postgres en Fly
PostgreSQL es una base de datos relacional avanzada. Fly.io la ofrece como servicio gestionado con backups automáticos y replicas.
4.2 Provisionar Postgres
- Crear base:
flyctl postgres create --name mi-postgres --region iad - Obtener credenciales:
flyctl postgres attach --postgresmi-postgres --app nombre-de-tu-app
4.3 Variables de entorno
| Variable | Descripción |
|---|---|
| DATABASE_URL | Cadena de conexión completa. |
| PGSSLMODE | Requerido: require para conexiones seguras. |
4.4 Ejemplo en Go
import (
database/sql
_ github.com/lib/pq
)
func main() {
dsn := os.Getenv(DATABASE_URL)
db, err := sql.Open(postgres, dsn)
// Insertar
_, err = db.Exec(CREATE TABLE IF NOT EXISTS users(id SERIAL PRIMARY KEY, name TEXT))
_, err = db.Exec(INSERT INTO users(name) VALUES(1), Alice)
// Consultar
rows, _ := db.Query(SELECT id,name FROM users)
for rows.Next() {
var id int var name string
rows.Scan(id, name)
fmt.Println(id, name)
}
}
4.5 Ejemplo en Python
import os
import psycopg2
dsn = os.getenv(DATABASE_URL)
conn = psycopg2.connect(dsn)
cur = conn.cursor()
cur.execute(CREATE TABLE IF NOT EXISTS users(id SERIAL PRIMARY KEY, name TEXT))
cur.execute(INSERT INTO users(name) VALUES(%s), (Alice,))
conn.commit()
cur.execute(SELECT id,name FROM users)
for row in cur.fetchall():
print(row)
cur.close()
conn.close()
5. Buenas Prácticas y Consejos
- Entornos: Usa flyctl config para diferenciar
stagingyproduction. - Backups: Programa snapshots regulares de Postgres.
- Manejo de errores: Valida retornos de
client.Gety consultas SQL. - Variables sensibles: No las incluyas en repositorio usa
flyctl secrets. - Escalabilidad: KV para datos ligeros y Postgres para transacciones complejas.
6. Enlaces y Recursos
Conclusión
Hemos cubierto desde la configuración inicial en Fly.io hasta ejemplos de Go y Python para usar KV y PostgreSQL. Con estas herramientas y buenas prácticas podrás desplegar aplicaciones distribuidas, resilientes y de baja latencia. ¡Manos a la obra y feliz despliegue!
Leave a Reply