Verlasse dich nicht auf compose-Defaults

podman-compose auf Debian 13 reicht ${VAR:-x} wörtlich durch; km bekam
den Platzhalter als Repo-Namen. Jede Variable steht jetzt in der .env
(Vorlage deploy/env.example), und die Konfiguration verwirft Werte, die
wie ein unersetzter Platzhalter aussehen.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
2026-09-04 18:52:22 +02:00
co-authored by Claude Fable 5.1
parent 6fc1e1a3c6
commit 0a13de7ab1
3 changed files with 42 additions and 13 deletions
+13 -11
View File
@@ -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
+19
View File
@@ -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
+10 -2
View File
@@ -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", ""),