Garage: monta tu propio S3 en casa (para noobs)
Todo el mundo usa S3 sin saber qué es. Y casi nadie sabe que puede tener el suyo, en su propia máquina, gratis, en media tarde. Este post es para ese "casi nadie". Cero jerga innecesaria: qué es, por qué te importa, y cómo montar uno con Garage en NixOS.
Qué es S3 (sin humo)
S3 es "guardar ficheros por HTTP con una API estándar". Nada más. En
vez de cp fichero /carpeta, haces una
petición HTTP: "PUT este objeto en este bucket". Y para leerlo, un GET.
Un bucket es una carpeta-raíz; un
objeto es un fichero con su clave (su ruta). Amazon lo
popularizó, pero la API es un estándar de facto que implementan mil
servidores. Uno de ellos lo puedes correr tú.
¿Por qué te importa? Porque medio mundo del software habla S3: backups, binarios, imágenes de un blog, artefactos de CI, caches. Si tienes un S3 propio, dejas de depender (y pagar) a un tercero para guardar tus cosas.
Por qué Garage y no MinIO
Garage es un servidor S3 escrito en Rust, pensado para self-hosting modesto y distribuido: varias máquinas normalitas, en sitios distintos, con replicación entre ellas. Es ligero (un binario), no te pide un clúster de servidores gordos, y encaja de lujo con NixOS.
MinIO es el otro gran nombre, pero ha ido cerrando features de la versión community. Para "un S3 de andar por casa entre un par de máquinas mías", Garage es más honesto y más simple.
Montarlo en NixOS
NixOS trae módulo para Garage. Lo mínimo, en tu configuración:
services.garage = {
enable = true;
package = pkgs.garage_1; # fija una major, no te la juegues con "latest"
settings = {
replication_factor = 1; # 1 = una sola máquina; súbelo con más nodos
rpc_bind_addr = "[::]:3901"; # comunicación entre nodos
rpc_secret = "<32-bytes-hex>"; # secreto compartido del clúster (¡a un gestor!)
s3_api = {
api_bind_addr = "[::]:3900"; # aquí escucha la API S3
s3_region = "garage";
};
};
};El rpc_secret es una credencial:
genérala con openssl rand -hex 32 y NO la
dejes en el .nix en claro — mételo con agenix/sops. (Este blog es muy
pesado con eso, y con razón.)
Rebuild, y ya tienes el demonio escuchando. Ahora hay que "darle forma" al clúster una vez:
# 1. ver el ID de este nodo
garage status
# 2. asignarle una zona, capacidad y rol de almacenamiento
garage layout assign <node-id> -z casa -c 100G -t mi-maquina
# 3. aplicar la layout (la primera versión es la 1)
garage layout apply --version 1Crear bucket y llaves
garage bucket create fotos
garage key create app-key
# te devuelve un Key ID y un Secret -> esas son tus credenciales S3
garage bucket allow fotos --read --write --key app-keyCon ese Key ID + Secret ya puedes hablarle con cualquier cliente S3 (aws-cli, rclone, mc, el SDK de tu lenguaje). Ejemplo con aws-cli:
aws --endpoint-url http://localhost:3900 s3 cp foto.jpg s3://fotos/
aws --endpoint-url http://localhost:3900 s3 ls s3://fotos/Fíjate en --endpoint-url: eso es lo
único "raro". Le dices al cliente de AWS "no vayas a Amazon, ve a MI
servidor". El resto de la API es idéntica.
Cuándo subir a varios nodos
Con replication_factor = 1 tienes un S3
personal en una máquina. El momento Garage brilla de verdad es con 2-3
nodos en sitios distintos (tu casa, un VPS barato): subes el factor de
replicación y cada objeto vive en varias máquinas. Si una se cae o arde,
tus datos siguen ahí. Esa es la gracia de "distribuido para pobres":
redundancia real sin pagar una nube.
Resumen
- S3 = guardar ficheros por HTTP con una API estándar. No es magia.
- Garage = un servidor S3 ligero, en Rust, ideal para self-hosting entre pocas máquinas.
- En NixOS son cuatro líneas de módulo + un ritual de
layoutuna sola vez. - Secretos (
rpc_secret, keys) SIEMPRE a un gestor, nunca en claro.
Y a partir de ahí, tus backups, tu blog, tus trastos… en tu propio S3. El ordenador de otro deja de ser el sitio por defecto donde viven tus cosas.
Comentarios (0)
Sin comentarios todavia. Se el primero!
Deja un comentario