Release 0.2.0
This commit is contained in:
1 parent
7a49e66c37
commit
08e8875cb5
38 files changed
+2645
-93
No files matched your search
@@ -2,9 +2,9 @@
|
||||
|
||||
Sendewerk ist die redaktionelle Webanwendung für den Weg vom vorbereiteten
|
||||
Inhalt bis zur moderierten und archivierten Sendung. Der aktuelle Stand umfasst
|
||||
ausschließlich Etappe 1: technisches Grundgerüst, persistente Beispieldaten
|
||||
und gekennzeichnete Gestaltungsvorschauen. Anmeldung, Bearbeitung und echte
|
||||
Live-Steuerung folgen in späteren Etappen.
|
||||
Etappe 1 und 2: technisches Grundgerüst, persistente Beispieldaten,
|
||||
Gestaltungsvorschauen sowie echte Anmeldung mit Barkeeper-/Thekencrew-Rollen.
|
||||
Inhaltsbearbeitung und Live-Steuerung folgen in späteren Etappen.
|
||||
|
||||
## Voraussetzungen
|
||||
|
||||
@@ -20,6 +20,9 @@ nicht erforderlich.
|
||||
```sh
|
||||
npm ci
|
||||
cp .env.example .env
|
||||
SETUP_TOKEN="$(openssl rand -hex 32)"
|
||||
sed -i "s/^SENDEWERK_SETUP_TOKEN=.*/SENDEWERK_SETUP_TOKEN=$SETUP_TOKEN/" .env
|
||||
printf 'Betreiber-Setup-Token: %s\n' "$SETUP_TOKEN"
|
||||
npm run setup
|
||||
npm run dev
|
||||
```
|
||||
@@ -29,18 +32,41 @@ erstellt die konfigurierten Verzeichnisse, führt ausstehende Migrationen aus
|
||||
und lädt den reproduzierbaren Beispieldatensatz. Der Seed darf beliebig oft
|
||||
ausgeführt werden und ersetzt nur die von ihm verwalteten Beispieldaten.
|
||||
|
||||
Beim ersten Aufruf verlangt `/setup` den ausgegebenen Wert aus
|
||||
`SENDEWERK_SETUP_TOKEN` und legt genau einen Barkeeper an. Der Befehl schreibt
|
||||
den Wert in die nicht versionierte `.env`, damit auch spätere lokale Starts
|
||||
dieselbe Konfiguration verwenden. Nach erfolgreicher Einrichtung ist `/setup`
|
||||
dauerhaft geschlossen und der Token kann aus `.env` entfernt werden. Der Seed
|
||||
enthält bewusst kein Konto und kein Standardpasswort.
|
||||
|
||||
## Konfiguration
|
||||
|
||||
| Variable | Vorgabe | Bedeutung |
|
||||
| ---------------------- | ------------------------ | ----------------------------------- |
|
||||
| `SENDEWERK_DB_PATH` | `.data/sendewerk.sqlite` | Pfad zur persistenten SQLite-Datei |
|
||||
| `SENDEWERK_UPLOAD_DIR` | `.data/uploads` | Persistentes Upload-Verzeichnis |
|
||||
| `HOST` | adapterabhängig | Bind-Adresse des Produktionsservers |
|
||||
| `PORT` | `3000` | Port des Produktionsservers |
|
||||
| Variable | Vorgabe | Bedeutung |
|
||||
| --------------------------- | ------------------------ | ---------------------------------------------------- |
|
||||
| `SENDEWERK_DB_PATH` | `.data/sendewerk.sqlite` | Pfad zur persistenten SQLite-Datei |
|
||||
| `SENDEWERK_UPLOAD_DIR` | `.data/uploads` | Persistentes Upload-Verzeichnis |
|
||||
| `SENDEWERK_MAIL_OUTBOX_DIR` | `.data/mail-outbox` | Lokale, nicht öffentlich ausgelieferte Testmail |
|
||||
| `SENDEWERK_SETUP_TOKEN` | keine | einmaliges Betreibergeheimnis, mindestens 32 Zeichen |
|
||||
| `SENDEWERK_APP_ORIGIN` | `http://localhost:5173` | feste Origin für Links und Cookie-Sicherheit |
|
||||
| `SENDEWERK_MAIL_TRANSPORT` | `local` | `local` oder ausdrücklich `smtp` |
|
||||
| `SENDEWERK_MAIL_FROM` | lokaler Absender | Absender; bei SMTP verpflichtend |
|
||||
| `SENDEWERK_SMTP_HOST` | keine | SMTP-Server, nur im SMTP-Modus |
|
||||
| `SENDEWERK_SMTP_PORT` | `587` | SMTP-Port |
|
||||
| `SENDEWERK_SMTP_SECURE` | `false` | `true` für implizites TLS, üblicherweise Port 465 |
|
||||
| `SENDEWERK_SMTP_USER` | keine | optionaler SMTP-Benutzer |
|
||||
| `SENDEWERK_SMTP_PASSWORD` | keine | optionales SMTP-Passwort |
|
||||
| `HOST` | adapterabhängig | Bind-Adresse des Produktionsservers |
|
||||
| `PORT` | `3000` | Port des Produktionsservers |
|
||||
|
||||
Relative Sendewerk-Pfade werden vom Projektverzeichnis aus aufgelöst. In
|
||||
Cloudron liegen Datenbank und Uploads unter `/app/data`.
|
||||
|
||||
Der Vorgabemodus `local` baut keine Netzwerkverbindung auf. Einladungen und
|
||||
Passwort-Resets landen als JSON-Dateien in `.data/mail-outbox`; die enthaltenen
|
||||
Links sind Geheimnisse und dürfen nicht veröffentlicht werden. Echter Versand
|
||||
findet nur statt, wenn `SENDEWERK_MAIL_TRANSPORT=smtp` und die SMTP-Werte
|
||||
explizit gesetzt sind.
|
||||
|
||||
## Befehle
|
||||
|
||||
| Befehl | Zweck |
|
||||
@@ -48,7 +74,7 @@ Cloudron liegen Datenbank und Uploads unter `/app/data`.
|
||||
| `npm run setup` | Verzeichnisse, Migrationen und Seed für lokale Entwicklung |
|
||||
| `npm run db:migrate` | Ausstehende Migrationen atomar ausführen |
|
||||
| `npm run db:seed` | Reproduzierbare Beispieldaten laden |
|
||||
| `npm run dev` | Entwicklungsserver starten |
|
||||
| `npm run dev` | Migrationen ausführen und Entwicklungsserver starten |
|
||||
| `npm run check` | Svelte- und TypeScript-Prüfung |
|
||||
| `npm run lint` | Formatierung und ESLint prüfen |
|
||||
| `npm test` | Verhaltenstests mit temporärer, getrennter Datenbank |
|
||||
@@ -61,6 +87,7 @@ Cloudron liegen Datenbank und Uploads unter `/app/data`.
|
||||
```sh
|
||||
npm ci
|
||||
npm run setup
|
||||
export SENDEWERK_APP_ORIGIN=http://localhost:3000
|
||||
npm run build
|
||||
HOST=127.0.0.1 PORT=3000 npm start
|
||||
```
|
||||
@@ -68,6 +95,12 @@ HOST=127.0.0.1 PORT=3000 npm start
|
||||
Der Healthcheck liegt unter <http://localhost:3000/healthz> und prüft auch den
|
||||
Datenbankzugriff.
|
||||
|
||||
Für lokales HTTP wird das Sitzungscookie gezielt ohne `Secure` gesetzt, bleibt
|
||||
aber `HttpOnly` und `SameSite=Lax`. Bei einer `https:`-Origin ist `Secure`
|
||||
automatisch aktiv. Die Build-Origin muss beim lokalen Produktionsbuild mit der
|
||||
später verwendeten Browser-Origin übereinstimmen; SvelteKits Origin-Prüfung
|
||||
bleibt aktiv.
|
||||
|
||||
Vor der ersten Browserprüfung wird der Testbrowser einmalig installiert:
|
||||
|
||||
```sh
|
||||
@@ -82,9 +115,17 @@ Das frühe Cloudron-Paket besteht aus `Dockerfile`, `CloudronManifest.json` und
|
||||
|
||||
```sh
|
||||
docker build -t sendewerk:local .
|
||||
docker run --rm -p 3000:3000 -v sendewerk-data:/app/data sendewerk:local
|
||||
docker run --rm -p 3000:3000 \
|
||||
-e SENDEWERK_APP_ORIGIN=http://localhost:3000 \
|
||||
-e SENDEWERK_SETUP_TOKEN="$(openssl rand -hex 32)" \
|
||||
-v sendewerk-data:/app/data sendewerk:local
|
||||
```
|
||||
|
||||
Auf Cloudron muss das Betreiber-Setup-Token vor dem ersten Browseraufruf als
|
||||
Umgebungsvariable gesetzt werden. `CLOUDRON_APP_ORIGIN` liefert dort die feste
|
||||
HTTPS-Origin. SMTP-Zugangsdaten werden ebenfalls ausschließlich als
|
||||
Laufzeitvariablen gesetzt, nicht in Manifest oder Image geschrieben.
|
||||
|
||||
Das ersetzt keinen Test auf einem echten Cloudron. Insbesondere Addon-Backup,
|
||||
Restore, Proxy-Origin und das read-only Laufzeitdateisystem können erst dort
|
||||
abschließend geprüft werden.
|
||||
@@ -101,5 +142,6 @@ Medien und redaktionellen Inhalten werden dadurch nicht verändert.
|
||||
|
||||
Die direkten Laufzeit- und Werkzeugabhängigkeiten verwenden MIT- oder
|
||||
Apache-2.0-Lizenzen: Svelte/SvelteKit, Vite, Vitest, ESLint und
|
||||
`better-sqlite3` sind MIT-lizenziert; TypeScript und Playwright stehen unter
|
||||
Apache-2.0. Die Lockdatei fixiert den tatsächlich installierten Baum.
|
||||
`better-sqlite3` und `@node-rs/argon2` sind MIT-lizenziert; Nodemailer verwendet
|
||||
MIT-0, TypeScript und Playwright stehen unter Apache-2.0. Die Lockdatei fixiert
|
||||
den tatsächlich installierten Baum.
|
||||
Reference in new issue
Block a user