4.0 KiB
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, pakpodman generate systemd --name Xvygeneruje.serviceunit s napevno zadrátovanýmpodman 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-reloadgeneruje skutečné.serviceunity do/run/systemd/generator/
Praktické rozdíly:
- Deklarativní, idempotentní — unit je zdroj pravdy; změna
Image=/Volume=→daemon-reload+restarta podman kontejner rekne podle unitu. - Životní cyklus v systemd — generovaný service spouští
podman runna popředí, ne detached; kontejner umře → systemd to vidí →Restart=on-failurefunguje 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 -dfunguje, 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_URIby mířila nalibrechat-mongodb. - Verze podmana v distro repu: Debian/Ubuntu mají staré (4.3.x), quadlet
user unity od 4.4 — zkontrolovat
podman --versionpřed nasazením.
Zdroje k prostudování
- https://docs.podman.io/en/latest/markdown/podman-systemd.unit.5.html — kompletní reference quadlet direktiv
- https://docs.podman.io/en/latest/markdown/podman-quadlet.1.html — přehled generatoru, search paths
- https://www.redhat.com/en/blog/quadlet-podman — motivace, srovnání s generate systemd
- https://podman.io/docs/podman-installation — verze v distro repozitářích
- https://docs.podman.io/en/latest/markdown/podman-auto-update.1.html — auto-update přes registry labely
- https://www.librechat.ai/blog/2023-08-18_podman — historický (generate systemd), užitečný co kontejnery potřebují
LibreChat zdroje
- https://www.librechat.ai/docs/local/docker — základní compose instalace
- https://www.librechat.ai/docs/remote/docker_linux — remote Linux detaily, secrets (CREDS_KEY/CREDS_IV/JWT)
- https://www.librechat.ai/docs/configuration/dotenv — reference .env proměnných
- https://www.librechat.ai/docs/configuration/librechat_yaml — custom endpointy (Ollama/litellm přes baseURL)
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.