MinIO
MinIO es un object store totalmente compatible con
S3 que puedes ejecutar en tu propio hardware. NamiDB lo trata como
otro backend s3:// detrás de un endpoint custom — el mismo cliente
object_store::aws::AmazonS3, el mismo protocolo de escrituras
condicionales.
Si quieres una receta de un solo archivo que levante MinIO y un daemon de NamiDB juntos, consulta Docker + MinIO. La página de abajo es para usar MinIO fuera de la receta de compose.
Forma de la URI
s3://<bucket>?ns=<namespace>&endpoint=<minio-url>®ion=<region>&allow_http=trueendpoint=apunta al endpoint HTTP de MinIO (normalmentehttp://localhost:9000).region=es requerido por el cliente S3; para MinIO cualquier string funciona (us-east-1es lo convencional).allow_http=truedeja que el cliente hable HTTP — MinIO no sirve TLS por defecto.
Las credenciales vienen de las env vars estándar de AWS
(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY).
Levantar MinIO localmente
El standalone más directo:
docker run -p 9000:9000 -p 9001:9001 \ -e MINIO_ROOT_USER=minioadmin \ -e MINIO_ROOT_PASSWORD=minioadmin \ minio/minio server /data --console-address ":9001"La consola está en http://localhost:9001 (login: minioadmin /
minioadmin). La API S3 está en :9000.
Crea un bucket vía la CLI mc:
mc alias set local http://localhost:9000 minioadmin minioadminmc mb local/namidbConectarse desde NamiDB
import osimport namidb
os.environ["AWS_ACCESS_KEY_ID"] = "minioadmin"os.environ["AWS_SECRET_ACCESS_KEY"] = "minioadmin"
client = namidb.Client( "s3://namidb?ns=prod" "&endpoint=http://localhost:9000" "®ion=us-east-1" "&allow_http=true")AWS_ACCESS_KEY_ID=minioadmin AWS_SECRET_ACCESS_KEY=minioadmin \namidb run --store "s3://namidb?ns=prod&endpoint=http://localhost:9000®ion=us-east-1&allow_http=true" \ "CREATE (a:Person {name: 'Alice'})"use std::env;use namidb::storage::{parse_uri, WriterSession};
env::set_var("AWS_ACCESS_KEY_ID", "minioadmin");env::set_var("AWS_SECRET_ACCESS_KEY", "minioadmin");
let uri = "s3://namidb?ns=prod&endpoint=http://localhost:9000®ion=us-east-1&allow_http=true";let (store, paths) = parse_uri(uri)?;let mut writer = WriterSession::open(store, paths).await?;La misma forma, cualquier backend compatible con S3
La misma forma de URI funciona contra cualquier servicio compatible
con S3 — Cloudflare R2, Tigris y LocalStack se conectan igual. Lo
único que cambia es el valor de endpoint= (y allow_http=true
para servicios HTTP plano como MinIO y LocalStack):
| Servicio | endpoint= | allow_http=true? |
|---|---|---|
| MinIO (local) | http://localhost:9000 | sí |
| LocalStack | http://localhost:4566 | sí |
| Cloudflare R2 | https://<account>.r2.cloudflarestorage.com + region=auto | no |
| Tigris | https://t3.storage.dev | no |
Permisos IAM
NamiDB necesita el set mínimo de verbos S3:
s3:GetObjects3:PutObjects3:DeleteObjects3:ListBucket
Sin tabla de locks en DynamoDB, sin servicio de metadatos aparte.
Siguientes pasos
- Docker + MinIO — stack local
completo (MinIO +
namidb-server) en un solo archivo de compose. - Sistema de archivos local — cuando prefieres saltarte por completo la abstracción del bucket.
- En memoria — para la prueba de 30 segundos sin configuración.