Mache km zum Dienst: HTTP-API, Takt, Git-Ablage, Image und compose
Ein Prozess (image/km/main.py) mit API (read, search, summary, health, refresh) auf Standardbibliothek und einem Takt, der die Ablage zieht, Gitea einliest, indexiert und alles Geänderte committet und pusht — auch Änderungen aus SilverBullet. Die Ablage ist ein Git-Checkout auf dem Volume, der Index eine SQLite-Datei daneben; ein Start ohne nötige Umgebung hält mit einer Liste an. deploy/compose.yml: km plus SilverBullet auf demselben Volume, für den oci-Betrieb in hive.home unter /km (SB_URL_PREFIX). deploy/health für 42i-hc. Lokal gegen ein Bare-Remote und spine/core durchgespielt: Ingest, Index, Commit, Push, Suche, Read mit Kanten in beide Richtungen, und eine von Hand angelegte Seite landet im nächsten Takt im Remote. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
# km -- der Wissensdienst als compose-Dienst (spine/core#8, #13).
|
||||
#
|
||||
# Zwei Container auf einem Volume:
|
||||
# km API + Takt: zieht die Ablage, liest Gitea ein, indexiert
|
||||
# (SQLite FTS5 + sqlite-vec), liefert alles Geaenderte ein
|
||||
# silverbullet Oberflaeche auf demselben Verzeichnis -- lesen und aendern;
|
||||
# km committet und pusht die Aenderungen im naechsten Takt
|
||||
#
|
||||
# Die Wahrheit ist das Git-Remote (KM_GIT_REMOTE); /srv/km/data/ablage ist
|
||||
# ein Checkout, /srv/km/data/km-index.sqlite ein Cache. Beides ist ohne die
|
||||
# Container lesbar bzw. neu baubar (Nachfolgefall).
|
||||
#
|
||||
# Secrets stehen in `.env` daneben (root-only) und NICHT hier:
|
||||
# KM_GIT_USER / KM_GIT_PASSWORD Push an das Ablage-Repo
|
||||
# KM_GITEA_USER / KM_GITEA_PASSWORD Lesen der Forge
|
||||
# SB_USER user:passwort fuer die Oberflaeche
|
||||
#
|
||||
# Betrieb ueber `oci` (42i-oci): /srv/km/compose.yml, `oci enable km`.
|
||||
|
||||
services:
|
||||
km:
|
||||
image: git.42i.org/spine/km:latest
|
||||
build:
|
||||
context: ../image
|
||||
container_name: km
|
||||
restart: unless-stopped
|
||||
network_mode: host
|
||||
environment:
|
||||
KM_NAMESPACE: ${KM_NAMESPACE:-familie}
|
||||
KM_CLASSIFICATION: ${KM_CLASSIFICATION:-home}
|
||||
KM_GIT_REMOTE: ${KM_GIT_REMOTE}
|
||||
KM_GIT_BRANCH: ${KM_GIT_BRANCH:-main}
|
||||
KM_GIT_USER: ${KM_GIT_USER}
|
||||
KM_GIT_PASSWORD: ${KM_GIT_PASSWORD}
|
||||
KM_GIT_NAME: ${KM_GIT_NAME:-km}
|
||||
KM_GIT_EMAIL: ${KM_GIT_EMAIL:-km@localhost}
|
||||
KM_GITEA_URL: ${KM_GITEA_URL}
|
||||
KM_GITEA_USER: ${KM_GITEA_USER}
|
||||
KM_GITEA_PASSWORD: ${KM_GITEA_PASSWORD}
|
||||
KM_GITEA_ORGS: ${KM_GITEA_ORGS:-}
|
||||
KM_GITEA_REPOS: ${KM_GITEA_REPOS:-}
|
||||
KM_INTERVAL: ${KM_INTERVAL:-300}
|
||||
# Vektoren erst, wenn es einen Abnehmer gibt (Andreas 04.09.); die
|
||||
# Ollama-Instanz auf s18 ist vom LXC aus nur mit VLAN5-Route erreichbar.
|
||||
KM_EMBED: ${KM_EMBED:-0}
|
||||
KM_OLLAMA_URL: ${KM_OLLAMA_URL:-http://10.18.5.30:11434}
|
||||
KM_PORT: "8390"
|
||||
volumes:
|
||||
- /srv/km/data:/data
|
||||
|
||||
silverbullet:
|
||||
image: ghcr.io/silverbulletmd/silverbullet:v2
|
||||
container_name: km-ui
|
||||
restart: unless-stopped
|
||||
network_mode: host
|
||||
environment:
|
||||
SB_FOLDER: /space
|
||||
SB_PORT: "3000"
|
||||
# hive.home teilt den Pfadraum an der Wurzel (hive/core#61); die
|
||||
# Oberflaeche liegt deshalb unter /km, die API unter /km/api.
|
||||
SB_URL_PREFIX: /km
|
||||
SB_USER: ${SB_USER}
|
||||
# die Dateien gehoeren dem km-Container (root); ohne PUID raet
|
||||
# SilverBullet die UID aus dem Ordner -- das ist dann dieselbe
|
||||
PUID: "0"
|
||||
volumes:
|
||||
- /srv/km/data/ablage:/space
|
||||
Executable
+7
@@ -0,0 +1,7 @@
|
||||
#!/bin/sh
|
||||
# 42i-hc (30-compose) ruft /srv/<svc>/health: 0 = gesund. Prueft die API,
|
||||
# nicht nur den Prozess -- ein Dienst, der antwortet, aber dessen letzter
|
||||
# Lauf rot ist, meldet das ueber "ok": false.
|
||||
out=$(curl -fsS --max-time 5 http://127.0.0.1:8390/health) || { echo "km: API antwortet nicht"; exit 1; }
|
||||
printf '%s' "$out" | grep -q '"ok": *true' || { echo "km: letzter Lauf mit Fehler: $out"; exit 1; }
|
||||
echo "km: ok"
|
||||
Reference in New Issue
Block a user