Anmeldung Chunk 5: Doku und Einzelbenutzer-Hook
This commit is contained in:
1 parent
18327095dc
commit
2d256b6f9c
1 file changed
+27
-1
@@ -174,11 +174,37 @@ Wichtig: Die App verwendet SQLite im **WAL-Modus**. Deshalb vor dem Restore imme
|
||||
|
||||
## Sicherheit und Daten
|
||||
|
||||
- MyTime hat keine Anmeldung. Nur im Heimnetz betreiben, keinen Router-Port ins Internet weiterleiten und den Port in der Firewall auf das LAN begrenzen.
|
||||
- MyTime hat standardmäßig keine Anmeldung (`AUTH_MODE=off`). Nur im Heimnetz betreiben, keinen Router-Port ins Internet weiterleiten und den Port in der Firewall auf das LAN begrenzen. Wer die optionale Anmeldung einschaltet (siehe unten), betreibt den Dienst trotzdem nur im Heimnetz.
|
||||
- Der Container startet und läuft als Non-Root-User `node` (UID:GID `1000:1000`); `compose.yaml` und `compose.dev.yaml` erzwingen das zusätzlich per `user: "1000:1000"`. Einmalige Migration bestehender Daten: `sudo chown -R 1000:1000 data backups`.
|
||||
- Datenbank: `./data/app.sqlite3`; Sicherungen: `./backups/`.
|
||||
- Daten und Sicherungen sind in `.gitignore` ausgeschlossen und werden nicht mit dem Quellcode veröffentlicht.
|
||||
|
||||
## Anmeldung (optional)
|
||||
|
||||
Standardmäßig ist die Anmeldung ausgeschaltet und die App verhält sich wie bisher. Mit `AUTH_MODE=password` oder `AUTH_MODE=sso` stehen alle Seiten und API-Routen nur noch nach Anmeldung zur Verfügung (Ausnahmen: `/api/auth/*` und der Docker-Healthcheck `/api/health`).
|
||||
|
||||
1. `.env.example` nach `.env` kopieren und anpassen:
|
||||
|
||||
| Variable | Bedeutung |
|
||||
| --- | --- |
|
||||
| `AUTH_MODE` | `off` (Standard), `password` oder `sso`. |
|
||||
| `BETTER_AUTH_SECRET` | Pflicht bei aktiver Anmeldung, mindestens 32 Zeichen (`openssl rand -base64 32`). |
|
||||
| `BETTER_AUTH_URL` | Pflicht bei aktiver Anmeldung, z. B. `http://<server-ip>:3100`. |
|
||||
| `OIDC_DISCOVERY_URL` | Nur `sso`: Discovery-URL des Anbieters, z. B. `https://auth.lan/application/o/mytime/.well-known/openid-configuration`. |
|
||||
| `OIDC_CLIENT_ID` / `OIDC_CLIENT_SECRET` | Nur `sso`: Client-Daten aus dem Anbieter (Authentik, Keycloak, Zitadel …). |
|
||||
|
||||
2. Dienst neu starten (`docker compose up -d` bzw. `docker compose -f compose.dev.yaml up -d`).
|
||||
|
||||
3. **Erste Anmeldung** (`password`): Die leere Datenbank verlangt beim ersten Aufruf „Erste Anmeldung" – Name, E-Mail und Passwort anlegen. Danach ist die Registrierung geschlossen; es bleibt bei diesem einen Benutzer.
|
||||
|
||||
4. **SSO** (`sso`): Auf der Anmeldeseite erscheint „Mit SSO anmelden". Die App leitet zum OIDC-Anbieter weiter und legt beim ersten Login das Benutzerkonto automatisch an.
|
||||
|
||||
Hinweise:
|
||||
|
||||
- HTTP im Heimnetz genügt; sichere Cookies sind bewusst nicht erzwungen (`useSecureCookies` aus). Trotzdem gilt: kein Internet-Expose, LAN-Begrenzung bleibt.
|
||||
- Abmelden steht im Kopf neben dem Theme-Schalter. Eine abgelaufene Sitzung führt zurück zur Anmeldung statt zur Fehlerwand.
|
||||
- Sitzungs-, Benutzer- und Kontodaten liegen als Tabellen `session`, `user`, `account`, `verification` in derselben `app.sqlite3` und werden mitgesichert.
|
||||
|
||||
## Entwicklung und Tests
|
||||
|
||||
Voraussetzungen: Node.js 22 und npm.
|
||||
|
||||
Reference in new issue
Block a user