2026-09-07 08:19:41 +02:00
|
|
|
# 3D Project Manager
|
|
|
|
|
|
|
|
|
|
Eine kleine Docker-basierte Webanwendung, um 3D-Druck-Projekte zu verwalten:
|
|
|
|
|
Projekte anlegen, STL-/3MF-Dateien per Drag & Drop hochladen und direkt im
|
|
|
|
|
Browser als 3D-Vorschau betrachten.
|
|
|
|
|
|
|
|
|
|
## Setup
|
|
|
|
|
|
2026-09-07 11:39:39 +02:00
|
|
|
1. `.env.example` nach `.env` kopieren und zwei Werte setzen:
|
2026-09-07 08:19:41 +02:00
|
|
|
|
2026-09-07 11:39:39 +02:00
|
|
|
- `PROJECTS_DIR`: Ordner auf deiner Festplatte, in dem deine Projekte als
|
|
|
|
|
normale Unterordner angelegt werden — den kannst du auch direkt im
|
|
|
|
|
Dateimanager oder Slicer öffnen.
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
PROJECTS_DIR=/home/deinname/3d-projects
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
- `PASSWORD_SHA256`: SHA256-Hash deines gewünschten Login-Passworts.
|
|
|
|
|
Erzeugen z. B. mit:
|
2026-09-07 08:19:41 +02:00
|
|
|
|
2026-09-07 11:39:39 +02:00
|
|
|
```
|
|
|
|
|
echo -n "meinPasswort" | sha256sum
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Nur den resultierenden Hex-Hash in die `.env` eintragen, nicht das
|
|
|
|
|
Passwort selbst.
|
2026-09-07 08:19:41 +02:00
|
|
|
|
|
|
|
|
2. Container bauen und starten:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
docker compose up --build -d
|
|
|
|
|
```
|
|
|
|
|
|
2026-09-07 11:39:39 +02:00
|
|
|
3. Im Browser öffnen: [http://localhost:8080](http://localhost:8080) —
|
|
|
|
|
du wirst zur Login-Seite weitergeleitet und musst das Passwort eingeben.
|
|
|
|
|
|
|
|
|
|
## Login
|
|
|
|
|
|
|
|
|
|
- Es gibt nur ein Passwort, keinen Nutzernamen. Wer das Passwort kennt, hat
|
|
|
|
|
Zugriff.
|
|
|
|
|
- Nach erfolgreichem Login wird eine signierte, `HttpOnly`-Session-Cookie
|
|
|
|
|
gesetzt (30 Tage gültig). Der Signierschlüssel liegt im
|
|
|
|
|
`app-settings`-Volume und bleibt über Container-Neustarts hinweg gleich,
|
|
|
|
|
d. h. du bleibst eingeloggt.
|
|
|
|
|
- "Abmelden" oben rechts löscht die Session.
|
|
|
|
|
- Nach 5 Fehlversuchen in Folge wird der Login für 30 Sekunden gesperrt.
|
|
|
|
|
- **Wichtig:** Diese Anwendung ist für den Einsatz auf deinem eigenen
|
|
|
|
|
Desktop/Heimnetz gedacht. Für Zugriff über das Internet solltest du
|
|
|
|
|
zusätzlich HTTPS (z. B. über einen Reverse Proxy) einrichten, da das
|
|
|
|
|
Passwort sonst unverschlüsselt übertragen wird.
|
2026-09-07 08:19:41 +02:00
|
|
|
|
|
|
|
|
## Wie es funktioniert
|
|
|
|
|
|
|
|
|
|
- **Projekt anlegen** → im Container wird `PROJECTS_DIR/<Projektname>`
|
|
|
|
|
erstellt (durch den Bind-Mount landet das direkt auf deiner Platte).
|
|
|
|
|
- **Dateien hochladen** → per Drag & Drop oder Klick auf die Upload-Fläche,
|
|
|
|
|
nur `.stl` und `.3mf` werden akzeptiert. Sie werden 1:1 in den
|
|
|
|
|
Projektordner kopiert.
|
|
|
|
|
- **3D-Vorschau** → beim Öffnen eines Projekts wird für jede Datei ein
|
|
|
|
|
eigener Three.js-Viewer (mit Zoom/Rotation per Maus) im Grid angezeigt.
|
|
|
|
|
- **App-Einstellungen/Metadaten** liegen ausschließlich im
|
|
|
|
|
`app-settings`-Docker-Volume, nicht in deinem Projektordner. Aktuell
|
|
|
|
|
benötigt die App noch keine eigene Konfiguration, aber der Ordner ist für
|
|
|
|
|
spätere Erweiterungen (z. B. Nutzerverwaltung) bereits vorbereitet.
|
|
|
|
|
|
|
|
|
|
## Projektstruktur auf der Festplatte
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
<PROJECTS_DIR>/
|
|
|
|
|
Gehäuse-Prototyp/
|
|
|
|
|
deckel.stl
|
|
|
|
|
boden.3mf
|
|
|
|
|
Ersatzteil/
|
|
|
|
|
halterung.stl
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Reine Ordner mit deinen Dateien — du kannst sie auch außerhalb der App
|
|
|
|
|
öffnen, kopieren oder in deinen Slicer ziehen. Lösch- und Umbenennungen
|
|
|
|
|
über den Dateimanager wirken sich beim nächsten Laden der Seite ebenfalls
|
|
|
|
|
auf die App aus.
|
|
|
|
|
|
2026-09-07 11:53:19 +02:00
|
|
|
## Große Dateien
|
|
|
|
|
|
|
|
|
|
- Uploads laufen serverseitig in einem Hintergrund-Thread, damit auch bei
|
|
|
|
|
sehr großen Dateien (mehrere GB) der Rest der App währenddessen normal
|
|
|
|
|
bedienbar bleibt.
|
|
|
|
|
- ZIP-Downloads (einzelnes Projekt oder alle Projekte) werden auf eine
|
|
|
|
|
temporäre Datei auf der Festplatte geschrieben statt komplett im
|
|
|
|
|
Arbeitsspeicher gehalten zu werden, und danach automatisch wieder
|
|
|
|
|
gelöscht.
|
|
|
|
|
- Für Dateien über **150 MB** wird die 3D-Vorschau nicht automatisch
|
|
|
|
|
geladen (das würde bei sehr großen Modellen den Browser-Tab einfrieren
|
|
|
|
|
lassen), sondern zeigt einen "Vorschau laden"-Button an — du entscheidest
|
|
|
|
|
bewusst, ob der Browser versuchen soll, das Modell zu parsen.
|
|
|
|
|
|
2026-09-07 08:19:41 +02:00
|
|
|
## Bekannte Grenzen (erster Wurf)
|
|
|
|
|
|
|
|
|
|
- Single-User, kein Login.
|
|
|
|
|
- Projekt-/Dateinamen sind auf Buchstaben, Zahlen, Leerzeichen, `-` und `_`
|
|
|
|
|
beschränkt (Schutz gegen Pfad-Tricks).
|
|
|
|
|
- Kein Undo beim Löschen — es wird aber vorher immer nachgefragt.
|
|
|
|
|
|
|
|
|
|
## Stack
|
|
|
|
|
|
|
|
|
|
- Backend: FastAPI (Python), liefert API + statische Frontend-Dateien aus
|
|
|
|
|
einem einzigen Container.
|
|
|
|
|
- Frontend: reines HTML/CSS/JS, 3D-Rendering mit Three.js (STLLoader /
|
|
|
|
|
3MFLoader) via CDN.
|
|
|
|
|
- Docker Compose mit Bind-Mount für Projekte und separatem Volume für
|
|
|
|
|
App-Settings.
|