diff --git a/deploy/compose.yml b/deploy/compose.yml index 4f46d95..385b410 100644 --- a/deploy/compose.yml +++ b/deploy/compose.yml @@ -10,7 +10,9 @@ # 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: +# Alle ${…} kommen aus `.env` daneben (root-only) -- podman-compose kennt +# keine Defaults in der Form ${VAR:-x}, also steht dort jede Variable. +# Secrets NUR dort, nie 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 für die Oberfläche @@ -26,24 +28,24 @@ services: restart: unless-stopped network_mode: host environment: - KM_NAMESPACE: ${KM_NAMESPACE:-familie} - KM_CLASSIFICATION: ${KM_CLASSIFICATION:-home} + KM_NAMESPACE: ${KM_NAMESPACE} + KM_CLASSIFICATION: ${KM_CLASSIFICATION} KM_GIT_REMOTE: ${KM_GIT_REMOTE} - KM_GIT_BRANCH: ${KM_GIT_BRANCH:-main} + KM_GIT_BRANCH: ${KM_GIT_BRANCH} 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_GIT_NAME: ${KM_GIT_NAME} + KM_GIT_EMAIL: ${KM_GIT_EMAIL} 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} + KM_GITEA_ORGS: ${KM_GITEA_ORGS} + KM_GITEA_REPOS: ${KM_GITEA_REPOS} + KM_INTERVAL: ${KM_INTERVAL} # 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_EMBED: ${KM_EMBED} + KM_OLLAMA_URL: ${KM_OLLAMA_URL} KM_PORT: "8390" # requests bringt ein eigenes CA-Bündel mit (certifi) und kennt die # interne CA (acme.lan) nicht -- ohne diese Zeile scheitert jeder diff --git a/deploy/env.example b/deploy/env.example new file mode 100644 index 0000000..cf9e3f1 --- /dev/null +++ b/deploy/env.example @@ -0,0 +1,19 @@ +# Vorlage fuer /srv/km/.env (root-only, 0600). Jede Variable muss stehen -- +# podman-compose kennt keine Defaults in der compose-Datei. +KM_NAMESPACE=familie +KM_CLASSIFICATION=home +KM_GIT_REMOTE=https://git.home/ahmann/km.git +KM_GIT_BRANCH=main +KM_GIT_USER=agent +KM_GIT_PASSWORD=aus-openbao +KM_GIT_NAME=42i Agent +KM_GIT_EMAIL=info@ahmann.org +KM_GITEA_URL=https://git.home +KM_GITEA_USER=agent +KM_GITEA_PASSWORD=aus-openbao +KM_GITEA_ORGS=ahmann +KM_GITEA_REPOS= +KM_INTERVAL=300 +KM_EMBED=0 +KM_OLLAMA_URL=http://10.18.5.30:11434 +SB_USER=andreas:aus-openbao diff --git a/image/km/config.py b/image/km/config.py index 7cbd41c..c2971ef 100644 --- a/image/km/config.py +++ b/image/km/config.py @@ -13,8 +13,16 @@ from dataclasses import dataclass, field from pathlib import Path +def _clean(v: str | None) -> str: + """podman-compose (Debian 13) ersetzt `${VAR:-x}` nicht, sondern reicht + den Platzhalter woertlich durch -- gesehen auf hive.home am 04.09. Ein + Wert, der so aussieht, ist keiner.""" + v = (v or "").strip() + return "" if v.startswith("${") else v + + def _list(v: str) -> list[str]: - return [x.strip() for x in v.replace(";", ",").split(",") if x.strip()] + return [x.strip() for x in _clean(v).replace(";", ",").split(",") if x.strip()] @dataclass @@ -50,7 +58,7 @@ class Config: @classmethod def from_env(cls) -> "Config": - e = os.environ.get + e = lambda k, d="": _clean(os.environ.get(k)) or d # noqa: E731 cfg = cls( ablage=Path(e("KM_ABLAGE", "/data/ablage")), namespace=e("KM_NAMESPACE", ""),