Garage: monta tu propio S3 en casa (para noobs)


2 de julio de 2026

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 1

Crear 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-key

Con 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

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.

Comparte este post:

Es tu post

Estas seguro? Esto no se puede deshacer.

Comentarios (0)

Sin comentarios todavia. Se el primero!

Deja un comentario