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
3.3 KiB
#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 mitlisten_addresses = ''(nur Unix-Socket), Node 24 aus dem NodeSource-Repo, corepack/pnpm, Dienstnutzerlaufzettelohne Login, Quellcode nach/opt/laufzettel,pnpm install,pnpm build,prisma migrate deploy,prisma db seed -
Geheimnisse im Zielsystem erzeugen:
APP_SECRETperopenssl rand -base64 48, Zufallspasswörter für Datenbank und Admin; Ablage in/etc/laufzettel/laufzettel.envmit 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,trapmit Zeilennummer, farbige Ausgabe, Spinner, Prüfung auf PVE 8/9 und root -
whiptail-Dialog Standard gegen Erweitert; Standard: nächste freie CTID, Hostnamelaufzettel, Debian 13, 2 Kerne, 2 GB RAM, 8 GB Platte, unprivilegiert, DHCP aufvmbr0 -
Debian-Vorlage bei Bedarf per
pveamholen,pct create, starten,deploy/install.shim Container ausführen -
--dry-run: gibt allepct-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.mdabschließend durchgehen, Review-Agent gegen alle Kriterien, Befunde als Issues -
Devlog-Phasenzusammenfassung: Gesamtstunden, Stunden je Meilenstein, größte Zeitfresser, Abweichung vom Plan
-
CHANGELOG.mdfürv0.1.0mit Datum, Version inpackage.json, Tagv0.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:13mitdeploy/install.shinstalliert 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 -ltnzeigt 5432 nicht) - Ein zweiter Lauf von
deploy/install.shaktualisiert und löscht keine Daten bash deploy/proxmox/laufzettel.sh --dry-rungibt einen plausiblen, vollständigenpct create-Aufruf ausshellcheck --severity=warningüber alle Skripte ohne Befund- Im Compose-Weg ist die Datenbank vom Host nicht erreichbar, aus
webschon pnpm pruefe:dokugrün,v0.1.0getaggt und als Gitea-Release veröffentlicht- Alle Kriterien aus
docs/abnahme-mvp.mdabgehakt oder als Folge-Issue erfasst