Files
nanobot-runtime/projects/devops/artifacts/podman-systemd-summary.md
2026-09-11 15:55:26 +02:00

4.0 KiB

Podman + systemd — souhrn diskuse (11.9.2026)

Poznámka: toto je přehled informací a hledisek, ne hotová rozhodnutí — rozhodnutí o přístupu dělá uživatel po nastudování.

Historie: podman generate systemd (starý model)

  • Spustíš podman run --detach, pak podman generate systemd --name X vygeneruje .service unit s napevno zadrátovaným podman start X / podman stop X.
  • Problémy:
    • Unit je snapshot příkazové řádky — změna parametrů = ručně přepsat unit nebo regenerovat; drift mezi realitou a unitem.
    • systemd neví, co se děje — unit sleduje jen "podman start vrátil 0". Kontejner spadne vnitřně → systemd spí, watchdog nefunguje.
  • Deprecated od Podman 4.4, od 5.0 jen bugfixy. LibreChat podman blog (8/2023) ho ještě používá — historický.

Současný model: Quadlet (od 4.4, komfortně 5.x)

Quadlet je systemd generator:

  • čte deklarativní unity z ~/.config/containers/systemd/user/ (rootless) nebo /etc/containers/systemd/ (rootful)
  • přípony: .container, .volume, .network, .pod, .kube
  • při systemctl daemon-reload generuje skutečné .service unity do /run/systemd/generator/

Praktické rozdíly:

  • Deklarativní, idempotentní — unit je zdroj pravdy; změna Image=/Volume=daemon-reload + restart a podman kontejner rekne podle unitu.
  • Životní cyklus v systemd — generovaný service spouští podman run na popředí, ne detached; kontejner umře → systemd to vidí → Restart=on-failure funguje opravdu, journalctl -u, systemctl status, závislosti (Requires=/After=).
  • Volumes a sítě jsou taky unity (.network, .volume) — v unitu se odkazuješ Network=librechat.network, žádné ruční podman network create.
  • Auto-update: quadlet defaultně labeluje io.containers.autoupdate=registry; podman auto-update (typicky timer) porovná digest, pulzne a restartne.

Třetí cesta: podman compose v systemd oneshotu

  • Type=oneshot + ExecStart=podman compose up -d funguje, ale systemd vidí jen wrapper proces — restart-per-container, závislosti a logy per-service zmizí, celý stack = jedna monolitní jednotka.

Hlediska pro LibreChat (ne rozhodnutí)

  • Rootless vyžaduje loginctl enable-linger (běh bez loginu); port > 1024 bez proxy OK (3080).
  • DNS jména mezi kontejnery = ContainerName= z quadlet unitů, ne názvy compose služeb → MONGO_URI by mířila na librechat-mongodb.
  • Verze podmana v distro repu: Debian/Ubuntu mají staré (4.3.x), quadlet user unity od 4.4 — zkontrolovat podman --version před nasazením.

Zdroje k prostudování

LibreChat zdroje

Připravený návrh unity (před nastudováním, ke zvážení): artifacts/librechat-podman/ v tomto projektu — README + librechat.network

  • librechat.container + librechat-mongodb.container + librechat-meilisearch.container. Minimal stack api+mongo (RAG/vectordb/admin-panel vynechány kvůli RAM — důvod zrušení OpenWebUI); meilisearch volitelný pro fulltext.