• v0.1.0 d97aebed95

    v0.1.0 – Laufzettel MVP
    Prüfung / e2e (push) Canceled after 0s
    Prüfung / pruefung (push) Canceled after 0s
    Stable

    florian.wilde released this 2026-10-02 22:17:05 +00:00 | 23 commits to main since this release

    Erster MVP. Checklisten für wiederkehrende IT-Arbeiten: versionierte Vorlagen, Läufe, unveränderliches Archiv, QR-Aufkleber, LDAP-Abgleich — selbst gehostet, deutsch, dunkel.

    Was drin ist

    • Vorlagen mit echter Versionierung. Eine veröffentlichte Version wird nie verändert; „Bearbeiten" erzeugt eine tiefe Kopie als Entwurf, und höchstens ein Entwurf je Vorlage. Laufende Arbeiten ändern sich nicht, wenn jemand eine neue Version veröffentlicht.
    • Läufe mit Schreibschutz. Abschließen erst, wenn alle Pflichtschritte erledigt oder begründet übersprungen sind. Nach dem Archivieren ist Schluss — zurückholen darf nur ADMIN, und es steht im Protokoll.
    • QR-Aufkleber als Einstieg. Jedes Gerät trägt einen unveränderlichen tagCode, der nie wiederverwendet wird. Scannen führt direkt auf die Geräteseite; Etiketten in 62 × 29 mm und als A4-Bogen, immer hell gedruckt.
    • Platzhalter und Namensregeln. {{mitarbeiter}}, {{abteilung}}, {{ou}} und Variablen werden aufgelöst, Werte je Shell korrekt maskiert. „Jörg Müller-Lüdenscheid" wird zu joerg.mueller-luedenscheid@… und jmuellerluedensch. {{generiertes_passwort}} wird je Anzeige neu erzeugt und nirgends gespeichert — nicht in Schrittergebnissen, Kommentaren, im Protokoll oder im Ausdruck.
    • Zwei Betriebsmodi in einem Codepfad. INTERN für die eigene Firma, DIENSTLEISTUNG für mehrere Kunden. Der Wechsel ist eine Datenänderung, keine Migration, und geht in beide Richtungen.
    • LDAP-Abgleich mit ldaps/StartTLS, eigenem CA-Zertifikat, Seitenabruf und korrekter objectGUID. Entfernte Konten werden inaktiv, nie gelöscht. Das Bind-Passwort liegt verschlüsselt und erscheint in keiner Antwort.
    • Rechte nur serverseitig, aus einer Tabelle, mit Rolle und Aktiv-Status pro Anfrage aus der Datenbank. Jede Seite prüft selbst.
    • Regeln in der Datenbank, nicht nur im Dienst: zwölf CHECK-Bedingungen, zwei partielle Eindeutigkeitsindizes und vier zusammengesetzte Fremdschlüssel. Ein Lauf kann strukturell kein Gerät und keine Person eines fremden Kunden wählen.

    Zwei Wege in den Betrieb

    • Docker Compose, gehärtet. Die Datenbank hat keinen veröffentlichten Port und hängt in einem Netz ohne Gateway — vom Host nicht erreichbar, aus dem Webdienst schon. Migrationen laufen beim Start, der Seed bleibt ein bewusster Handgriff.
    • Nativ in einen LXC, ein Einzeiler im Stil der Proxmox-Helper-Scripts. PostgreSQL hört nur am Unix-Socket, die Geheimnisse entstehen im Zielsystem, der Dienst läuft unter systemd mit ProtectSystem=strict. Ein erneuter Aufruf aktualisiert, ohne Daten oder Geheimnisse zu verlieren.

    Stand der Prüfung

    1131 Vitest-Tests in 51 Dateien, 101 Ende-zu-Ende-Abläufe in INTERN und 97 in DIENSTLEISTUNG, alle grün. shellcheck ohne Befund über beide Betriebsskripte, auch ohne Schwellenwert. Die native Installation lief zweimal in debian:13 und einmal unter echtem systemd durch, inklusive Aktualisierungslauf.

    59 von 61 Abnahmekriterien abgehakt. Offen, mit Begründung in docs/abnahme-mvp.md:

    • Der pct-Teil des Proxmox-Einzeilers ist ungetestet — hier stand kein Proxmox-Host zur Verfügung. Die Gegenprobe steht als Prüfliste in docs/betrieb/proxmox.md, das Folge-Issue ist #38.
    • OIDC ist gegen kein echtes authentik gelaufen; geprüft sind Konfigurationslogik, Rückrufadresse und die Abbildung von Gruppen auf Rollen.

    Anleitung

    laufzettel-anleitung.pdf liegt diesem Release bei: 72 Seiten, neun Kapitel, getrennt für Technik und Verwaltung, mit 35 Bildern und einem Fehlerbehebungskapitel aus echten Meldungen. Im Repo steht sie als Markdown unter docs/anleitung/ — das PDF entsteht daraus mit pnpm docs:pdf.

    Erste Schritte

    cp .env.example .env     # APP_SECRET und Passwörter ausfüllen
    docker compose up -d --build
    docker compose run --rm migrate pnpm db:seed
    

    Oder nativ auf einem Proxmox-Host:

    bash -c "$(curl -fsSL https://git.wilde-server.de/florian.wilde/Laufzettel/raw/branch/main/deploy/proxmox/laufzettel.sh)"
    

    Davor gehört ein Reverse Proxy mit TLS — siehe docs/betrieb/reverse-proxy.md.


    Der vollständige Changelog mit allen 143 Einträgen steht in CHANGELOG.md.

    Downloads