Docker + MinIO
La raíz del repo incluye un docker-compose.yml
que levanta:
- MinIO — bucket compatible con S3, con la consola admin en
:9001. - bucket-init — contenedor de un solo uso que crea el bucket
namidb. namidb-server— el daemon, autenticado con un bearer token, exponiendo la API REST en:8080.
Todo conversa con MinIO sobre la red de Docker; nada sale del host.
Prerrequisitos
- Docker (
docker --version) y Compose v2 (docker compose version). - Un clone local del repo para el archivo de compose y el Dockerfile:
git clone https://github.com/namidb/namidbcd namidb1. Compila la imagen del servidor
docker build -t namidb-server:0.1 -f crates/namidb-server/Dockerfile .El tag 0.1 es el que referencia docker-compose.yml. Desde 0.4.1,
Cargo.lock se versiona en el repositorio, así que esto se compila de
forma reproducible desde un clone fresco.
2. Genera un auth token
export NAMIDB_AUTH_TOKEN=$(openssl rand -hex 32)docker-compose.yml se rehúsa a arrancar si NAMIDB_AUTH_TOKEN no
está seteado — esa es la sustitución ${NAMIDB_AUTH_TOKEN:?…} en el
archivo.
3. Levanta el stack
docker compose up -dCompose levanta MinIO, espera a que esté healthy, ejecuta el contenedor
bucket-init para crear el bucket namidb, y después arranca el
daemon namidb-server. Después de unos segundos lo puedes consultar:
curl -s http://localhost:8080/v0/health | jq .4. Ejecuta tu primera consulta
curl -s -X POST http://localhost:8080/v0/cypher \ -H "Authorization: Bearer $NAMIDB_AUTH_TOKEN" \ -H 'Content-Type: application/json' \ -d '{"query": "CREATE (a:Person {name: \"Alice\", age: 30}) RETURN a.name AS name"}' \ | jq .
curl -s -X POST http://localhost:8080/v0/cypher \ -H "Authorization: Bearer $NAMIDB_AUTH_TOKEN" \ -H 'Content-Type: application/json' \ -d '{"query": "MATCH (p:Person) RETURN p.name AS name, p.age AS age"}' \ | jq .La consola de MinIO está en
http://localhost:9001 (login: minioadmin /
minioadmin). El bucket namidb se va llenando con manifests, segmentos
de WAL y SSTs a medida que escribes.
Qué hay dentro del archivo
El compose (y el servidor dentro de él) lee su configuración desde el entorno:
| Variable | Valor usado en compose |
|---|---|
NAMIDB_STORE | s3://namidb?ns=prod&endpoint=http://minio:9000®ion=us-east-1&allow_http=true |
NAMIDB_LISTEN | 0.0.0.0:8080 |
NAMIDB_AUTH_TOKEN | ${NAMIDB_AUTH_TOKEN:?set NAMIDB_AUTH_TOKEN in your env (e.g. openssl rand -hex 32)} (obligatorio al boot) |
NAMIDB_FLUSH_INTERVAL | 30s |
AWS_ACCESS_KEY_ID | minioadmin |
AWS_SECRET_ACCESS_KEY | minioadmin |
RUST_LOG | info |
El servicio de MinIO monta un volume nombrado (minio-data) para que
el bucket sobreviva a docker compose down. Usa docker compose down -v
para borrar los datos.
Reemplazar MinIO por cualquier bucket compatible con S3
El contenedor namidb-server solo conoce MinIO a través de su entorno.
Para apuntar el mismo stack a AWS S3, Cloudflare R2 o LocalStack, solo
cambian NAMIDB_STORE y las credenciales:
# AWS S3NAMIDB_STORE: "s3://my-bucket/data?ns=prod®ion=us-east-1"AWS_ACCESS_KEY_ID: "AKIA..."AWS_SECRET_ACCESS_KEY: "..."
# Cloudflare R2NAMIDB_STORE: "s3://my-bucket?ns=prod&endpoint=https://<acct>.r2.cloudflarestorage.com®ion=auto"AWS_ACCESS_KEY_ID: "<token id de R2>"AWS_SECRET_ACCESS_KEY: "<token secret de R2>"O quita los servicios MinIO + bucket-init y ejecuta el contenedor del daemon solo. Todo lo demás (auth, flags, endpoints) queda idéntico.
Siguientes pasos
- Servidor HTTP — la referencia completa de flags y endpoints del binario que corre dentro del contenedor.
- MinIO — usar MinIO fuera de Docker.
- Configuración — cada env var que el servidor lee.