Saltearse al contenido

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:
Ventana de terminal
git clone https://github.com/namidb/namidb
cd namidb

1. Compila la imagen del servidor

Ventana de terminal
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

Ventana de terminal
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

Ventana de terminal
docker compose up -d

Compose 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:

Ventana de terminal
curl -s http://localhost:8080/v0/health | jq .

4. Ejecuta tu primera consulta

Ventana de terminal
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:

VariableValor usado en compose
NAMIDB_STOREs3://namidb?ns=prod&endpoint=http://minio:9000&region=us-east-1&allow_http=true
NAMIDB_LISTEN0.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_INTERVAL30s
AWS_ACCESS_KEY_IDminioadmin
AWS_SECRET_ACCESS_KEYminioadmin
RUST_LOGinfo

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 S3
NAMIDB_STORE: "s3://my-bucket/data?ns=prod&region=us-east-1"
AWS_ACCESS_KEY_ID: "AKIA..."
AWS_SECRET_ACCESS_KEY: "..."
# Cloudflare R2
NAMIDB_STORE: "s3://my-bucket?ns=prod&endpoint=https://<acct>.r2.cloudflarestorage.com&region=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.