feat(betrieb): Docker Compose und LXC-Installer

Ein Laufzeit-Paket (scripts/paket-bauen.sh) für beide Wege: Next standalone, worker als Bundle mit nur den nötigen Paketen, Migrationen ohne Prisma-CLI. Compose lokal komplett hochgefahren; der Installer auf pve-demo in einem echten Debian-13-LXC durchgelaufen.

Closes #019

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-12 17:35:41 +02:00
co-authored by Claude Opus 5.5
parent 7f07efe05d
commit 533a821087
17 changed files with 767 additions and 7 deletions
+13 -5
View File
@@ -1,5 +1,5 @@
# #019 Docker-Image und LXC-Installer
**Status:** offen
**Status:** erledigt
**Meilenstein:** v0.6.0
**Labels:** infrastruktur
**Geschätzt:** 6 h **Tatsächlich:** –
@@ -8,14 +8,22 @@
Produktionsbetrieb per Docker Compose oder in einem Debian-LXC.
## Aufgaben
- [ ] Dockerfile (standalone, non-root), Compose mit migrate
- [ ] `deploy/install-lxc.sh` (auf dem Proxmox-Host), Update-Pfad
- [x] Dockerfile (standalone, non-root), Compose mit migrate – lokal komplett hochgefahren (migrate → app healthy, worker bereit, Anmeldung)
- [x] `deploy/install-lxc.sh` (auf dem Proxmox-Host) + `deploy/im-container.sh`, Update-Pfad (`--aktualisieren`, drei Fassungen zum Zurückgehen)
- [x] Gemeinsames Laufzeit-Paket `scripts/paket-bauen.sh` für beide Wege
- [x] Migrationen ohne Prisma-CLI (`src/betrieb/migrieren.ts`), kompatibel zu `_prisma_migrations`
## Akzeptanzkriterien
- [ ] Installer in echtem LXC durchgelaufen
- [x] Installer in echtem LXC durchgelaufen (pve-demo, CT 109 `pd-installer`); darin Server angelegt, Verbindungstest, CLI-Login, Dry-Run und ein echter LXC-Auftrag
## Abhängigkeiten
#001
## Notizen / Entscheidungen
–
- **Eigener Migrationslauf statt `prisma migrate deploy`:** spart Prisma-CLI und Schema-Engine im
Betrieb; schreibt `_prisma_migrations` wie Prisma (Test prüft `prisma migrate status`).
- **worker als esbuild-Bundle** mit nur den Paketen, die er importiert (aus der Metadatei, exakte
Versionen aus der Entwicklung): 103 MB statt 741 MB.
- **Node im LXC von nodejs.org** mit SHA-256-Prüfung (Debian 13 hat nur Node 20).
- `ADMIN_PASSWORT` wird nach dem ersten Start aus der Env-Datei entfernt; das Passwort steht nur in der Ausgabe.
- Image 559 MB (node:24.21.0-trixie-slim), läuft als UID 1000; PostgreSQL 17.11.
+1 -1
View File
@@ -22,7 +22,7 @@ Details und Architektur: [../architektur.md](../architektur.md). Zeiten werden a
| [#016](016-oidc.md) | Anmeldung per OIDC | erledigt | v0.5.0 | 4 h | 0 h 08 min |
| [#017](017-branding.md) | Branding-Assets | erledigt | v0.6.0 | 4 h | – |
| [#018](018-readme.md) | README und Dokumentation | offen | v0.6.0 | 4 h | – |
| [#019](019-installer.md) | Docker-Image und LXC-Installer | offen | v0.6.0 | 6 h | – |
| [#019](019-installer.md) | Docker-Image und LXC-Installer | erledigt | v0.6.0 | 6 h | – |
| [#020](020-feldtest.md) | Feldtest 8.x und 9.x, Version 1.0.0 | offen | v1.0.0 | 6 h | – |
| [#021](021-template-bau-ohne-ssh.md) | Template-Bau ohne SSH (Bau-Adresse) | umgesetzt, Abnahme offen | v0.3.0 | 3 h | 0 h 19 min |
| [#022](022-template-profile.md) | Templates mit eingebackenen Profilen | erledigt | v0.3.0 | 4 h | 0 h 22 min |