Skip to main content

deployment

Deploy Memoria with Docker Compose or Kubernetes. Environment variables, multi-instance setup, security. Use when deploying or configuring Memoria.

Ir para a instalação

Informações da origem

Repositório
matrixorigin/Memoria
Última atividade na origem
23 de março de 2026 às 17:41
Idioma detectado do SKILL.md
inglês
Estrelas
597
Forks
77

Opções de instalação

Por padrão, está selecionado o prompt que primeiro revisa a origem. Você pode mudar para um comando direto ou baixar uma cópia local.

Revise os arquivos de origem

Leia o SKILL.md e os arquivos complementares exibidos pelo SkillsMP antes de decidir se vai instalar.

Exibindo SKILL.md

SKILL.md
Instruções da origem · Visualização somente leitura
name
deployment
description
Deploy Memoria with Docker Compose or Kubernetes. Environment variables, multi-instance setup, security. Use when deploying or configuring Memoria.
## Docker Compose (Single Instance) ```bash cd Memoria cp .env.example .env # Set MEMORIA_MASTER_KEY, MEMORIA_EMBEDDING_API_KEY docker compose up -d ``` Services: API on `:8100`, MatrixOne on `:6001`. Verify: `curl http://localhost:8100/health` ## Environment Variables ### Required | Variable | Description | |----------|-------------| | `MEMORIA_MASTER_KEY` | Admin API key (min 16 chars) | ### Database | Variable | Default | Description | |----------|---------|-------------| | `MEMORIA_DB_HOST` | `matrixone` | MatrixOne host | | `MEMORIA_DB_PORT` | `6001` | MatrixOne port | | `MEMORIA_DB_USER` | `root` | Database user | | `MEMORIA_DB_PASSWORD` | `111` | Database password | | `MEMORIA_DB_NAME` | `memoria` | Database name | ### Embedding | Variable | Default | Description | |----------|---------|-------------| | `MEMORIA_EMBEDDING_PROVIDER` | `local` | `local` or `openai` | | `MEMORIA_EMBEDDING_MODEL` | `all-MiniLM-L6-v2` | Model name | | `MEMORIA_EMBEDDING_API_KEY` | — | Required if provider is `openai` (single-backend) | | `MEMORIA_EMBEDDING_BASE_URL` | — | Custom endpoint, OpenAI-compatible (single-backend) | | `MEMORIA_EMBEDDING_ENDPOINTS` | — | JSON array for multi-backend round-robin. When set, supersedes `BASE_URL`/`API_KEY`. Format: `[{"url":"https://api1.example.com/v1","api_key":"sk-1"},{"url":"https://api2.example.com/v1","api_key":"sk-2"}]`. All endpoints must serve the same model. Requests rotate round-robin; failed/rate-limited endpoints are skipped automatically. | | `MEMORIA_EMBEDDING_DIM` | `0` (auto) | Embedding dimension | ### Distributed | Variable | Default | Description | |----------|---------|-------------| | `MEMORIA_INSTANCE_ID` | Random UUID | Unique instance ID. Set to Pod name in K8s | | `MEMORIA_LOCK_TTL_SECS` | `120` | Distributed lock TTL. Heartbeat renews every TTL/3 | ### Governance | Variable | Default | Description | |----------|---------|-------------| | `MEMORIA_GOVERNANCE_ENABLED` | `false` | Enable background governance scheduler | | `MEMORIA_GOVERNANCE_PLUGIN_BINDING` | `default` | Repository binding name | | `MEMORIA_GOVERNANCE_PLUGIN_SUBJECT` | `system` | Subject key for binding resolution | | `MEMORIA_GOVERNANCE_PLUGIN_DIR` | — | Local plugin dir (dev mode, skips signature) | ### Security | Variable | Default | Description | |----------|---------|-------------| | `MEMORIA_API_KEY_SECRET` | — | HMAC secret for key hashing. Set independently of MASTER_KEY | ### LLM (for reflect/extract-entities/episodic) | Variable | Description | |----------|-------------| | `LLM_API_KEY` | OpenAI-compatible API key | | `LLM_BASE_URL` | API base URL | | `LLM_MODEL` | Model name | ## External MatrixOne Use an existing MatrixOne instead of the bundled one: ```bash MEMORIA_DB_HOST=your-host MEMORIA_DB_PORT=6001 docker compose up -d api ``` Tables are auto-created on first startup. ## Multi-Instance (K8s) All coordination uses the shared MatrixOne database — zero external dependencies. How it works: - **Governance scheduler**: Each instance acquires a DB lock before each task. Only one wins; others skip. Heartbeat renews every TTL/3. - **Async tasks**: Stored in `mem_async_tasks` table, visible cross-instance. - **Lock expiry**: Crashed instance's locks expire after TTL, another takes over. - **Single-instance**: `NoopDistributedLock` — zero overhead, identical behavior. ### K8s Manifest ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: memoria-api spec: replicas: 3 selector: matchLabels: app: memoria-api template: metadata: labels: app: memoria-api spec: containers: - name: memoria image: matrixorigin/memoria:latest ports: - containerPort: 8100 env: - name: MEMORIA_INSTANCE_ID valueFrom: fieldRef: fieldPath: metadata.name - name: MEMORIA_MASTER_KEY valueFrom: secretKeyRef: name: memoria-secrets key: master-key - name: MEMORIA_DB_HOST value: "matrixone.default.svc.cluster.local" - name: MEMORIA_DB_PORT value: "6001" - name: MEMORIA_EMBEDDING_PROVIDER value: "openai" - name: MEMORIA_EMBEDDING_API_KEY valueFrom: secretKeyRef: name: memoria-secrets key: embedding-api-key # Optional: multi-backend round-robin (supersedes API_KEY + MODEL single-backend) # - name: MEMORIA_EMBEDDING_ENDPOINTS # value: '[{"url":"https://api1.example.com/v1","api_key":"sk-1"},{"url":"https://api2.example.com/v1","api_key":"sk-2"}]' - name: MEMORIA_EMBEDDING_MODEL value: "BAAI/bge-m3" - name: MEMORIA_EMBEDDING_DIM value: "1024" - name: MEMORIA_GOVERNANCE_ENABLED value: "true" - name: MEMORIA_LOCK_TTL_SECS value: "120" livenessProbe: httpGet: path: /health port: 8100 initialDelaySeconds: 5 periodSeconds: 10 readinessProbe: httpGet: path: /health/instance port: 8100 initialDelaySeconds: 5 periodSeconds: 10 --- apiVersion: v1 kind: Service metadata: name: memoria-api spec: selector: app: memoria-api ports: - port: 8100 targetPort: 8100 ``` Key points: - `MEMORIA_INSTANCE_ID` → `fieldRef: metadata.name` (Pod name) - All replicas share one MatrixOne - Leader election is automatic - Liveness: `/health`, Readiness: `/health/instance` ## Data Persistence MatrixOne data bind-mounted to `./data/matrixone`. Survives restarts. Change: `MATRIXONE_DATA_DIR=/your/path` ## Security Notes - API keys are HMAC-SHA256 hashed at rest - Set `MEMORIA_API_KEY_SECRET` independently of `MASTER_KEY` for key rotation - All queries scoped to authenticated `user_id` - Snapshot names are regex-validated before SQL - Rate limiting per API key (in-memory sliding window) - Run behind reverse proxy with TLS in production ## Rate Limits Configurable via env: `MEMORIA_RATE_LIMIT_AUTH_KEYS=1000,60` (format: `max_requests,window_seconds`)
Ver no GitHub