LibreChat — Podman (rootless) + systemd Quadlet
Náhrada OpenWebUI. Minimal stack: api + mongodb (bez RAG/vectordb/admin-panel,
kvůli RAM). Volitelně meilisearch pro fulltext search (SEARCH=true).
Zdroje:
- https://www.librechat.ai/docs/local/docker
- https://www.librechat.ai/docs/remote/docker_linux
- https://www.librechat.ai/docs/configuration/dotenv
- Quadlet: https://docs.podman.io/en/latest/markdown/podman-systemd.unit.5.html
Instalace (rootless, user services)
-
Předpoklady:
podman≥ 4.4 (ideálně 5.x), uživatelský účet na serveru. -
Linger, aby user services běžely bez loginu:
loginctl enable-linger <user> -
Adresář s konfigem:
mkdir -p ~/librechat # .env ze šablony z repa LibreChat (.env.example) cp .env.example ~/librechat/.envV
~/librechat/.envnastavit:MONGO_URI=mongodb://librechat-mongodb:27017/LibreChat(DNS jméno kontejneru v quadlet síti; default v šabloně je 127.0.0.1)MEILI_HOST=http://librechat-meilisearch:7700- Trvalé secrets — vygenerovat (např.
openssl rand -hex 32):CREDS_KEY(64 hex znaků),CREDS_IV(32 hex),JWT_SECRET,JWT_REFRESH_SECRET(jinak se vygenerují do/app/data/.env.temp— funguje, ale po ztrátě volume jsou session/šifrované záznamy nenávratně pryč) SEARCH=truejen při provozu meilisearch +MEILI_MASTER_KEY
-
Quadlet unity nakopírovat do
~/.config/containers/systemd/user/:cp librechat.network librechat-mongodb.container librechat.container \ ~/.config/containers/systemd/user/ # volitelně: cp librechat-meilisearch.container ~/.config/containers/systemd/user/Cestu k
.envv unitách případně upravit (výchozí%h/librechat/.env=~/.config/...patřičně). -
Start:
systemctl --user daemon-reload systemctl --user enable --now librechat-mongodb.service systemctl --user enable --now librechat.service # volitelně: systemctl --user enable --now librechat-meilisearch.service -
UI na
http://<host>:3080. První registrace = admin účet single-tenant deploymentu. Po vytvoření účtu v.envdoplnitALLOW_REGISTRATION=falsea restart (systemctl --user restart librechat.service).
Volitelné doplňky
librechat.yaml(custom endpointy — Ollama/litellm proxy na nvidia.hell, preset modelů atd.): soubor do~/librechat/librechat.yaml+ vlibrechat.containerodkomentovat Volume řádek. Validace YAML fail-fast.- RAG (vectordb + rag_api): až když bude potřeba, ~1 GB RAM navíc.
- Aktualizace:
podman auto-update(quadlet unity mají default label), nebo ručněpodman pull registry.librechat.ai/danny-avila/librechat-dev:latestsystemctl --user restart librechat.service.
Provoz / debugging
- Logy:
journalctl --user -u librechat.service(nebo-u librechat-mongodb) - Stav kontejnerů:
podman ps - Port konflikt:
PublishPortvlibrechat.container(default 3080:3080)
Designová rozhodnutí
- Quadlet místo
podman generate systemd(deprecated) a místo systemd-oneshot nadpodman compose(systemd neví o kontejnerech, špatný restart/watchdog). - Společná quadlet síť (
librechat.network) — DNS mezi api a mongo přes ContainerName, žádné porty mimo host kromě 3080. - Rootless + linger — žádný root daemon na hostu; port 3080 > 1024, žádný konflikt s privileged porty.
- Bind-mount
.envdo /app/.env — stejně jako upstream compose (aplikace čte /app/.env za běhu, env_file samotný nestačí). - Data v pojmenovaných volumech:
librechat-data(/app/data — session, temp credentials),librechat-mongodb-data(/data/db). Záloha:podman volume export.