Files
Laufzettel/docs/issues/019-betrieb-release.md
T
Florian Wilde bf1e52cf73
Prüfung / pruefung (push) Canceled after 0s
Prüfung / pruefung (pull_request) Canceled after 0s
Prüfung / e2e (push) Canceled after 0s
Prüfung / e2e (pull_request) Canceled after 0s
feat(betrieb): native Installation, Proxmox-Einzeiler und Abnahme
Zwei Wege in den Betrieb, beide so weit gefahren, wie es hier moeglich war.

deploy/install.sh richtet Debian 13 in neun Schritten ein: PostgreSQL 17 hoert
nur am Unix-Socket, der Dienstnutzer hat kein Login, die Geheimnisse entstehen
im Zielsystem und liegen 0600 bei root. Die Umgebungsdatei wird nie
ueberschrieben -- auch nicht beim Aktualisieren, sonst enden alle Sitzungen und
die verschluesselten Bind-Passwoerter waeren unlesbar.

deploy/proxmox/laufzettel.sh legt den Container an und ruft install.sh darin
auf. Der pct-Teil ist ungetestet, weil kein PVE-Host zur Verfuegung stand; die
Gegenprobe steht als Pruefliste in docs/betrieb/proxmox.md, das Folge-Issue ist
#024.

Die Abnahme gegen alle 61 Kriterien hat drei Zusagen ohne Deckung gefunden, alle
behoben: der Healthcheck des Webdienstes konnte nie bestehen (busybox loest
localhost nach ::1 auf, Next lauscht nur auf IPv4), die CI-Pipeline konnte in
keinem Job gruen werden (kein LDAP-Dienst, kein gestarteter Server, kein
shellcheck), und der README nannte fuer die Entwicklungsdatenbank den falschen
Port.

Closes #19
2026-09-26 15:53:01 +02:00

3.3 KiB
Raw Blame History

#019 M14 – Betriebswege und Release v0.1.0

Status: erledigt Meilenstein: v0.1.0 Labels: phase-1, infra, docs Geschätzt: 10 h Tatsächlich: 5 h 25 min

Ziel

Zwei erprobte Wege in den Betrieb und ein sauberes erstes Release.

Aufgaben

  • deploy/install.sh: native Installation auf Debian 13 — PostgreSQL 17 mit listen_addresses = '' (nur Unix-Socket), Node 24 aus dem NodeSource-Repo, corepack/pnpm, Dienstnutzer laufzettel ohne Login, Quellcode nach /opt/laufzettel, pnpm install, pnpm build, prisma migrate deploy, prisma db seed

  • Geheimnisse im Zielsystem erzeugen: APP_SECRET per openssl rand -base64 48, Zufallspasswörter für Datenbank und Admin; Ablage in /etc/laufzettel/laufzettel.env mit Modus 0600 und Eigentümer root

  • laufzettel.service: systemd-Unit für den Next-standalone-Server, User=laufzettel, EnvironmentFile=, NoNewPrivileges=yes, ProtectSystem=strict, PrivateTmp=yes, Restart=on-failure

  • Erneuter Aufruf aktualisiert statt neu anzulegen: git pull, pnpm build, migrate deploy, systemctl restart; Geheimnisse und Daten bleiben

  • deploy/proxmox/laufzettel.sh: One-Liner für die Proxmox-Shell — set -Eeuo pipefail, trap mit Zeilennummer, farbige Ausgabe, Spinner, Prüfung auf PVE 8/9 und root

  • whiptail-Dialog Standard gegen Erweitert; Standard: nächste freie CTID, Hostname laufzettel, Debian 13, 2 Kerne, 2 GB RAM, 8 GB Platte, unprivilegiert, DHCP auf vmbr0

  • Debian-Vorlage bei Bedarf per pveam holen, pct create, starten, deploy/install.sh im Container ausführen

  • --dry-run: gibt alle pct-Aufrufe nur aus, ohne etwas anzulegen

  • Abschlussbildschirm: URL, Admin-Kennung, erzeugtes Passwort, Hinweis auf Reverse Proxy und docs/betrieb/

  • docs/betrieb/: inbetriebnahme.md, proxmox.md, reverse-proxy.md, authentik.md, sicherung.md (pg_dump über den Dienstnamen bzw. den Unix-Socket)

  • Prüfliste für den Lauf auf echtem Proxmox, da ich den pct-Teil hier nicht ausführen kann

  • docs/abnahme-mvp.md abschließend durchgehen, Review-Agent gegen alle Kriterien, Befunde als Issues

  • Devlog-Phasenzusammenfassung: Gesamtstunden, Stunden je Meilenstein, größte Zeitfresser, Abweichung vom Plan

  • CHANGELOG.md für v0.1.0 mit Datum, Version in package.json, Tag v0.1.0, Gitea-Release mit Changelog-Auszug, Anleitung als PDF beigelegt

  • Die Anleitung als PDF (pnpm docs:pdf) dem Gitea-Release als Datei beilegen — im Repo liegt sie nicht, sie entsteht aus den Kapiteln und Bildern

Akzeptanzkriterien

  • docker run --rm debian:13 mit deploy/install.sh installiert vollständig durch: Postgres läuft, Migration und Seed gelaufen, Dienst antwortet auf /api/gesundheit
  • Im nativen Weg lauscht PostgreSQL auf keinem TCP-Port (ss -ltn zeigt 5432 nicht)
  • Ein zweiter Lauf von deploy/install.sh aktualisiert und löscht keine Daten
  • bash deploy/proxmox/laufzettel.sh --dry-run gibt einen plausiblen, vollständigen pct create-Aufruf aus
  • shellcheck --severity=warning über alle Skripte ohne Befund
  • Im Compose-Weg ist die Datenbank vom Host nicht erreichbar, aus web schon
  • pnpm pruefe:doku grün, v0.1.0 getaggt und als Gitea-Release veröffentlicht
  • Alle Kriterien aus docs/abnahme-mvp.md abgehakt oder als Folge-Issue erfasst