web - refactor core modules, harden authorization, simplify endpoints

This commit is contained in:
2026-08-29 11:15:54 +02:00
parent e1109a07ef
commit 79d857d686
71 changed files with 8269 additions and 9119 deletions
+87 -23
View File
@@ -12,7 +12,7 @@ Git for Windows kann direkt über `winget` installiert werden:
winget install --id Git.Git -e --source winget
```
Alternativ kann **Git for Windows** über <https://git-scm.com/install/windows> heruntergeladen und installiert werden.
Alternativ kann **Git for Windows** über https://git-scm.com/install/windows heruntergeladen und installiert werden.
Nach der Installation PowerShell, Windows Terminal oder Git Bash neu öffnen und prüfen:
@@ -24,7 +24,7 @@ git --version
### macOS
Falls Homebrew noch nicht installiert ist, die Installationsanleitung unter <https://brew.sh/> verwenden.
Falls Homebrew noch nicht installiert ist, die Installationsanleitung unter https://brew.sh/ verwenden.
Git über Homebrew installieren:
@@ -133,6 +133,34 @@ docker compose version
docker run --rm hello-world
```
Falls `docker run` mit
```text
permission denied while trying to connect to the docker API at unix:///var/run/docker.sock
```
abbricht, zunächst prüfen:
```bash
ls -l /var/run/docker.sock
id
getent group docker
```
Ist der Benutzer bereits Mitglied der Gruppe `docker`, die Gruppe aber bei `id` noch nicht aufgeführt, wurde die Gruppenmitgliedschaft von der aktuellen Shell noch nicht übernommen. Dann entweder:
```bash
newgrp docker
```
ausführen oder WSL vollständig neu starten. Dazu in PowerShell:
```powershell
wsl --shutdown
```
Danach Ubuntu erneut öffnen und `docker run --rm hello-world` wiederholen.
> Docker Engine nicht zusätzlich innerhalb von WSL installieren, wenn Docker Desktop verwendet wird.
>
> Für bessere Dateisystem-Performance das Repository möglichst im WSL-Dateisystem ablegen, z. B. `~/src/intranet`, nicht unter `/mnt/c/...`.
@@ -141,6 +169,9 @@ docker run --rm hello-world
### Linux — Ubuntu 24.04 LTS
> **Wichtig für WSL-Nutzer:**
> Wenn Ubuntu unter Windows über WSL 2 läuft und Docker Desktop verwendet wird, **nicht** mit diesem Abschnitt weitermachen. Dieser Abschnitt ist nur für eigenständige Linux-Installationen vorgesehen.
**1. Konfliktierende Pakete entfernen**
```bash
@@ -200,8 +231,8 @@ sudo usermod -aG docker $USER
Danach ab- und wieder anmelden.
> **Debian 13:** Das Projekt funktioniert ebenfalls unter Debian. Dafür das Docker-Repository entsprechend auf `linux/debian` umstellen:
> <https://docs.docker.com/engine/install/debian/>
> **Debian 13:** Das Projekt funktioniert ebenfalls unter Debian. Dafür das Docker-Repository entsprechend auf `linux/debian` umstellen:
> https://docs.docker.com/engine/install/debian/
---
@@ -219,7 +250,7 @@ docker run --rm hello-world
Dokumentation:
<https://docs.docker.com/desktop/setup/install/mac-install/>
https://docs.docker.com/desktop/setup/install/mac-install/
---
@@ -236,15 +267,15 @@ web/
Die produktive `docker-compose.yml` wird lokal **nicht** verwendet. Dadurch werden insbesondere folgende Produktionsbestandteile nicht gestartet:
- `scheduler`
- `dokploy-network`
- Strato-SSH
- produktive Scheduler-Secrets
* `scheduler`
* `dokploy-network`
* Strato-SSH
* produktive Scheduler-Secrets
Die lokale Compose-Datei startet ausschließlich:
- `web`
- `db` (PostgreSQL 18 mit pgvector)
* `web`
* `db` (PostgreSQL 18 mit pgvector)
Sie verwendet denselben `Dockerfile` wie Produktion.
@@ -299,13 +330,15 @@ SMS_GATEWAY_URL=http://127.0.0.1:9
HA_BASE_URL=http://127.0.0.1:9
HA_TOKEN=local
OPENWEATHER_API_KEY=local
CKAL_USERNAME=
CKAL_PASSWORD=
CKAL_CALENDAR_URL=
```
Die `.env` darf keine produktiven Secrets enthalten und sollte nicht ins Repository committed werden.
### PostgreSQL-Version prüfen
Lokal sollte möglichst dieselbe PostgreSQL-Major-Version wie in Produktion verwendet werden. Wir verwenden **PostgreSQL 18**.
> Lokal sollte möglichst dieselbe PostgreSQL-Major-Version wie in Produktion verwendet werden. Wir verwenden **PostgreSQL 18**.
---
@@ -319,12 +352,12 @@ In pgAdmin:
4. Datei außerhalb des Repositorys speichern, z. B. `intranet.dump`.
5. **Format: Custom** wählen.
6. Unter **Data Options → Do not save**:
- **Owner: Yes**
- **Privileges: Yes**
* **Owner: Yes**
* **Privileges: Yes**
7. **Include CREATE DATABASE statement: No** lassen.
8. **Backup** starten.
Wenn pgAdmin im Browser auf einem entfernten Server läuft, wird die Backup-Datei serverseitig gespeichert. Sie kann anschließend über **Tools → Storage Manager** heruntergeladen werden.
9. Läuft pgAdmin im Browser auf einem entfernten Server, kann die Backup-Datei anschließend über **Tools → Storage Manager** heruntergeladen werden.
> Der Dump enthält Produktivdaten. Nicht committen, weitergeben oder in ungeschützten Cloud-Ordnern speichern.
@@ -356,6 +389,18 @@ docker exec -it intranet-local-db-1 psql -U intranet -d intranet -c "CREATE EXTE
## 7. Dump mit pgAdmin importieren
### pgAdmin 4 installieren
Falls pgAdmin 4 noch nicht installiert ist, kann es lokal als Desktop-Anwendung installiert werden.
* **Windows:** pgAdmin-Installer herunterladen und ausführen.
* **macOS:** pgAdmin-Disk-Image herunterladen, öffnen und die Anwendung installieren.
* **Ubuntu/Linux:** pgAdmin kann über das offizielle APT-Repository installiert werden; für die lokale Nutzung reicht `pgadmin4-desktop`.
Die Installationspakete und Anleitungen sind unter https://www.pgadmin.org/download/ verfügbar.
Unter Windows mit WSL 2 kann pgAdmin direkt unter Windows installiert werden. Die PostgreSQL-Datenbank aus Docker ist anschließend über `localhost:5432` erreichbar.
In pgAdmin einen neuen Server registrieren:
```text
@@ -375,14 +420,13 @@ Danach:
3. **Format: Custom or tar** wählen.
4. `intranet.dump` auswählen.
5. Unter **Data Options → Do not save**:
- **Owner: Yes**
- **Privileges: Yes**
* **Owner: Yes**
* **Privileges: Yes**
6. **Include CREATE DATABASE statement: No**.
7. **Clean before restore: No** beim ersten Import.
8. **Restore** starten.
Der Restore sollte ohne Fehler zur fehlenden Extension `vector` durchlaufen. Falls `pg_restore` mit `extension "vector" is not available` abbricht, prüfen, ob in `docker-compose.local.yml` tatsächlich `pgvector/pgvector:pg18` verwendet wird.
Soll die lokale Datenbank später vollständig durch einen neuen Dump ersetzt werden, kann das lokale Setup zurückgesetzt werden:
```bash
@@ -410,7 +454,7 @@ docker compose -f docker-compose.local.yml ps
Aufrufen:
<http://localhost:8080>
http://localhost:8080
Die Benutzer aus dem importierten Dump können anschließend für den Login verwendet werden.
@@ -420,6 +464,26 @@ Die lokale Compose-Datei setzt `session.cookie_secure=0`, da lokal HTTP statt HT
## Entwicklung
### Nach einem Neustart starten
Nach einem Neustart von Windows oder macOS zuerst **Docker Desktop** starten und warten, bis Docker bereit ist.
Unter einer eigenständigen Linux-Installation sicherstellen, dass der Docker-Dienst läuft.
Danach im Projektroot die lokalen Container starten:
```bash
docker compose -f docker-compose.local.yml up -d
```
Falls sich das `Dockerfile` seit dem letzten Start geändert hat oder die Images neu gebaut werden sollen:
```bash
docker compose -f docker-compose.local.yml up -d --build
```
Anschließend kann das Intranet wieder unter http://localhost:8080 aufgerufen werden.
### Status prüfen
```bash