Auf einem atomaren Betriebssystem wie Fedora Silverblue oder überall dort, wo Reproduzierbarkeit zählt, ist eine saubere Kapselung Pflicht. Pivot-Stack löst dieses Problem durch eine schlanke, modular aufgebaute Container-Architektur für interaktive CLI-Arbeit und Headless-Dienste.
Motivation und Architektur
Pivot-Stack trennt interaktives Arbeiten bewusst vom Betrieb langlebiger Services. Das Repository stellt zwei Kern-Images bereit:
%%{init: {'flowchart': {'curve': 'stepAfter'}}}%%
flowchart TD
Stack[fa:fa-cubes <b>Pivot-Stack</b>]
Stack --> Toolbox[fa:fa-terminal <b>pivot-toolbox</b><br/><i>Interaktive CLI</i>]
Stack --> Server[fa:fa-server <b>pivot-server</b><br/><i>Headless Runtime</i>]
subgraph CLI ["Lokale Entwicklung"]
Toolbox --> T1["• Compiler & Rust Toolchain"]
Toolbox --> T2["• CLI Utilities (uv, fzf, duckdb)"]
Toolbox --> T3["• Transparentes Host-Mounting"]
end
subgraph Srv ["Dienste & Dashboards"]
Server --> S1["• Marimo Notebook Server"]
Server --> S2["• Web Dashboards & APIs"]
Server --> S3["• Isolierter Netzwerkbetrieb"]
end
pivot-toolbox(Interaktive CLI-Umgebung) Optimiert für Terminal-Workflows (via Podman oder Distrobox). Enthält Compiler, Shell-Utilities und Data-Science-Toolchains. Das Host-Projektverzeichnis wird transparent eingehängt, sodass User-IDs und Dateirechte mit dem Host übereinstimmen.pivot-server(Runtime & Services) Headless-Container für persistente Anwendungen (z. B. reaktive Marimo-Notebook-Server oder Web-Dashboards), erreichbar über das lokale Netzwerk oder ein Mesh-VPN wie Tailscale.
Der Stack verzichtet auf träge Legacy-Tools und setzt auf moderne, performante Alternativen:
-
Paketmanagement & Python Runtime:
-
uv : Extrem schneller Python-Paketmanager in Rust. Ersetzt
pip,poetryundcondamit drastisch verkürzten Build- und Installationszeiten. -
Notebooks & Dashboards:
-
Marimo : Reaktives Python-Notebook-System. Notebooks werden als reiner, Git-kompatibler Python-Code (
.py) gespeichert statt als undurchsichtiges JSON. -
Analytik & Engines:
-
DuckDB : Schnelle In-Process-SQL-OLAP-Datenbank.
-
Polars : Multithreaded DataFrame-Bibliothek für performante Datenverarbeitung ohne Spark-Overhead.
-
CLI-Helfer:
fzf,ripgrep,zoxideund Shell-Bindings für flüssiges Arbeiten im Container.
Quickstart & Nutzung
Image beziehen
Die fertigen Images werden automatisiert über GitHub Actions mit buildah gebaut und in der GitHub Container Registry bereitgestellt:
podman pull ghcr.io/kkroesch/pivot_stack:toolbox
podman pull ghcr.io/kkroesch/pivot_stack:latestInteraktive Toolbox starten
Um das aktuelle Verzeichnis in die Toolbox einzubinden und direkt loszulegen:
podman run --rm -it \
-v "$(pwd)":/workspace:Z \
-w /workspace \
ghcr.io/kkroesch/pivot_stack/toolbox:latestMarimo-Server starten
Für den Betrieb eines reaktiven Notebook-Servers mit Zugriff auf das lokale Verzeichnis:
podman run --rm -it \
-p 2718:2718 \
-v "$(pwd)":/workspace:Z \
-w /workspace \
ghcr.io/kkroesch/pivot_stack/server:latest \
marimo edit --host 0.0.0.0 --port 2718 --headless --no-tokenDanach ist die Marimo-Oberfläche unter http://localhost:2718 erreichbar. Für wiederkehrende Aufgaben befindet sich ein justfile im Projektverzeichnis, um die Container-Befehle kompakt zu kapseln. In Marimo Sandbox via uv installierte zusätzliche Libraries werden im Notebook (Arbeitsverzeichnis) hinterlegt, so dass diese bei einem Neustart des Containers erhalten bleiben.
Fazit
Der Pivot-Stack liefert eine klar definierte, leichtgewichtige Umgebung für Datenanalyse und Prototyping. Durch die Trennung von CLI-Toolbox und Service-Container bleibt das Basissystem sauber, während die Toolchain vollständig versioniert und sofort einsatzbereit ist.
Kommentare