feat(betrieb): native Installation, Proxmox-Einzeiler und Abnahme (#37)
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 Nummer 38. 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
This commit is contained in:
+47
-5
@@ -44,6 +44,21 @@ jobs:
|
||||
- name: Prisma-Client erzeugen
|
||||
run: pnpm exec prisma generate
|
||||
|
||||
# Der Verzeichnis-Abgleich wird gegen ein echtes OpenLDAP geprueft. Ohne
|
||||
# diesen Container bricht `pnpm test` in CI ab (tests/fixtures/ldap gibt in
|
||||
# CI absichtlich keinen stillen Uebersprung) -- gefunden bei der Abnahme zu
|
||||
# #019. Kein services:-Block, weil der Container die Fixture-LDIFs aus dem
|
||||
# Arbeitsbaum einhaengt und Dienste vor dem Checkout starten.
|
||||
#
|
||||
# Bedingung an den Runner: die Schritte muessen den von compose
|
||||
# veroeffentlichten Port 127.0.0.1:1389 selbst erreichen. Auf einem
|
||||
# act_runner, der die Schritte in einem Container ausfuehrt und nur den
|
||||
# Docker-Socket durchreicht, liegt der Port auf dem Host -- dort braucht es
|
||||
# `--network host` fuer den Job oder einen Runner im Host-Modus. Ungeprueft:
|
||||
# fuer dieses Repo ist noch kein Runner registriert.
|
||||
- name: LDAP-Testverzeichnis starten
|
||||
run: docker compose -f docker-compose.test.yml up -d --wait ldap
|
||||
|
||||
- name: Code-Stil prüfen
|
||||
run: pnpm lint
|
||||
|
||||
@@ -62,13 +77,17 @@ jobs:
|
||||
- name: Dokumentation prüfen
|
||||
run: pnpm pruefe:doku
|
||||
|
||||
# Im Container und nicht per apt: so laeuft in CI genau die Fassung, die
|
||||
# auch lokal geprueft wird, und der Runner braucht shellcheck nicht selbst
|
||||
# mitzubringen.
|
||||
- name: Shell-Skripte prüfen
|
||||
run: |
|
||||
if compgen -G "deploy/*.sh" > /dev/null || compgen -G "deploy/proxmox/*.sh" > /dev/null; then
|
||||
shellcheck --severity=warning deploy/*.sh deploy/proxmox/*.sh
|
||||
else
|
||||
echo "Noch keine Shell-Skripte vorhanden (kommen mit #019)."
|
||||
fi
|
||||
docker run --rm -v "$PWD:/mnt:ro" koalaman/shellcheck:stable \
|
||||
--severity=warning /mnt/deploy/install.sh /mnt/deploy/proxmox/laufzettel.sh
|
||||
|
||||
- name: LDAP-Testverzeichnis stoppen
|
||||
if: always()
|
||||
run: docker compose -f docker-compose.test.yml down -v
|
||||
|
||||
e2e:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -116,9 +135,32 @@ jobs:
|
||||
- name: Bauen
|
||||
run: pnpm build
|
||||
|
||||
# Playwright bringt keinen Server mit (kein webServer in der Config, damit
|
||||
# lokal immer gegen einen bewusst gebauten Stand geprueft wird). In CI muss
|
||||
# er deshalb hier starten, sonst bricht global-setup mit „Unter
|
||||
# http://127.0.0.1:3000 antwortet keine Anwendung“ ab -- gefunden bei der
|
||||
# Abnahme zu #019.
|
||||
- name: Gebauten Stand starten
|
||||
run: |
|
||||
pnpm start &
|
||||
echo $! > /tmp/laufzettel.pid
|
||||
for i in $(seq 1 60); do
|
||||
if curl -fsS http://127.0.0.1:3000/api/gesundheit > /dev/null; then
|
||||
echo "Anwendung antwortet nach ${i}s."
|
||||
exit 0
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
echo "Die Anwendung ist nicht hochgekommen." >&2
|
||||
exit 1
|
||||
|
||||
- name: Ende-zu-Ende-Tests
|
||||
run: pnpm exec playwright test
|
||||
|
||||
- name: Stand beenden
|
||||
if: always()
|
||||
run: kill "$(cat /tmp/laufzettel.pid)" || true
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
if: failure()
|
||||
with:
|
||||
|
||||
Reference in New Issue
Block a user