Self-host con Docker Compose
Un stack de NamiDB self-hosted para copiar y pegar que corre en
cualquier lugar donde corra Docker Compose. MinIO sostiene el bucket,
namidb-server sirve el namespace sobre una API REST autenticada.
docker-compose.yml
services: minio: image: minio/minio command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin volumes: - minio-data:/data healthcheck: test: ["CMD", "mc", "ready", "local"] interval: 3s retries: 30
bucket-init: image: minio/mc depends_on: minio: condition: service_healthy entrypoint: > sh -c " mc alias set local http://minio:9000 minioadmin minioadmin && mc mb --ignore-existing local/namidb "
namidb-server: image: namidb-server:0.3 # built from crates/namidb-server/Dockerfile depends_on: bucket-init: condition: service_completed_successfully environment: 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}" NAMIDB_FLUSH_INTERVAL: "30s" AWS_ACCESS_KEY_ID: "minioadmin" AWS_SECRET_ACCESS_KEY: "minioadmin" ports: - "8080:8080"
volumes: minio-data: {}Levantarlo
-
Buildear la imagen del servidor (una sola vez, desde la raíz del repo del motor):
Ventana de terminal docker build -t namidb-server:0.3 \-f crates/namidb-server/Dockerfile . -
Generar un auth token:
Ventana de terminal export NAMIDB_AUTH_TOKEN=$(openssl rand -hex 32) -
Arrancar el stack:
Ventana de terminal docker compose up -d -
Smoke-test:
Ventana de terminal curl -s http://localhost:8080/v0/health | jq .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\"}) RETURN a.name AS name"}' \| jq .
Eso es todo. Una base de datos en grafo, tus datos en disco en MinIO,
una API REST autenticada en :8080.
Llevarlo a un cloud real
Cambiar una sola env var. Todo lo demás queda igual:
environment: NAMIDB_STORE: "s3://my-bucket?ns=prod®ion=us-east-1" # NAMIDB_STORE: "s3://my-bucket?ns=prod&endpoint=https://<ACCOUNT_ID>.r2.cloudflarestorage.com®ion=auto" # NAMIDB_STORE: "gs://my-bucket?ns=prod" # NAMIDB_STORE: "az://acct/container?ns=prod"Mismo motor, misma imagen de Docker. El object storage es la fuente de verdad.