Docker
Zwei Docker-Images fuer den Standalone-Betrieb ohne eigene Anwendung.
Voraussetzungen
Fuer den Zugriff auf die Docker-Images ist ein Login am ProcessCube Marketplace erforderlich:
echo "IHR_API_KEY" | docker login marketplace.processcube.io -u processcube --password-stdinDen API-Key finden Sie in Ihrer ProcessCube-Rechnung. Details siehe Docker-Images verwenden.
Such-Server
docker run -d \
-v qmd-data:/data \
-p 3001:3001 \
-e QMD_API_KEY=mein-geheimer-key \
marketplace.processcube.io/processcube-io/qmd-search-serverEndpoints
GET /api/search?q=...— SucheGET /api/collections— CollectionsGET /health— Health-Check
Umgebungsvariablen
| Variable | Default | Beschreibung |
|---|---|---|
QMD_INDEX_PATH | /data/index.sqlite | Pfad zur Datenbank |
QMD_SEARCH_MODE | fts | fts oder hybrid |
QMD_EMBED_PROVIDER | none | none, openai, voyage |
QMD_API_KEY | (leer) | API-Key fuer Auth (leer = kein Auth) |
QMD_MCP_ENABLED | false | MCP-Endpoint aktivieren |
PORT | 3001 | Server-Port |
Indexer
Der Indexer erstellt/aktualisiert den Such-Index. Konfiguration ueber eine JSON-Datei.
docker run --rm \
-v ./config.json:/app/config.json \
-v qmd-data:/data \
-e GITHUB_TOKEN=$GITHUB_TOKEN \
marketplace.processcube.io/processcube-io/qmd-search-indexerconfig.json
{
"collections": [
{
"name": "docs",
"path": "/content/docs",
"pattern": "**/*.md",
"context": "Projekt-Dokumentation",
"group": "Allgemein"
}
],
"contentSources": [
{
"plugin": "github",
"config": {
"collection": "changelogs",
"files": [
{
"owner": "org",
"repo": "repo",
"branch": "main",
"path": "CHANGELOG.md",
"outputName": "repo.md"
}
]
}
}
]
}Umgebungsvariablen
| Variable | Default | Beschreibung |
|---|---|---|
QMD_CONFIG | /app/config.json | Pfad zur Config |
QMD_INDEX_PATH | /data/index.sqlite | Pfad zur Datenbank |
QMD_EMBED_PROVIDER | none | Embedding-Provider |
SKIP_EMBED | false | Embeddings ueberspringen |
GITHUB_TOKEN | (leer) | Fuer GitHub-Plugin |
Env-Var-Syntax in der Config (${GITHUB_TOKEN}) wird beim Laden aufgeloest.
Kubernetes
CronJob (Indexer)
apiVersion: batch/v1
kind: CronJob
metadata:
name: qmd-indexer
spec:
schedule: "*/30 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: indexer
image: marketplace.processcube.io/processcube-io/qmd-search-indexer
env:
- name: GITHUB_TOKEN
valueFrom:
secretKeyRef:
name: github-token
key: token
volumeMounts:
- name: index
mountPath: /data
- name: config
mountPath: /app/config.json
subPath: config.json
volumes:
- name: index
persistentVolumeClaim:
claimName: qmd-index
- name: config
configMap:
name: qmd-config
restartPolicy: OnFailureDeployment (Server)
apiVersion: apps/v1
kind: Deployment
metadata:
name: qmd-search
spec:
replicas: 1
template:
spec:
containers:
- name: server
image: marketplace.processcube.io/processcube-io/qmd-search-server
ports:
- containerPort: 3001
env:
- name: QMD_API_KEY
valueFrom:
secretKeyRef:
name: qmd-secret
key: api-key
volumeMounts:
- name: index
mountPath: /data
readOnly: true
livenessProbe:
httpGet:
path: /health
port: 3001
readinessProbe:
httpGet:
path: /health
port: 3001
volumes:
- name: index
persistentVolumeClaim:
claimName: qmd-index