Dateien nach "/" hochladen
This commit is contained in:
10
.env.example
Normal file
10
.env.example
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# Copy this file to .env and set the absolute path to the folder on your
|
||||||
|
# desktop where your projects (and their STL/3MF files) should live.
|
||||||
|
#
|
||||||
|
# Linux/macOS example:
|
||||||
|
# PROJECTS_DIR=/home/yourname/3d-projects
|
||||||
|
#
|
||||||
|
# Windows (Docker Desktop) example:
|
||||||
|
# PROJECTS_DIR=C:/Users/yourname/3d-projects
|
||||||
|
|
||||||
|
PROJECTS_DIR=/home/yourname/3d-projects
|
||||||
19
Dockerfile
Normal file
19
Dockerfile
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
FROM python:3.11-slim
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY backend/requirements.txt .
|
||||||
|
RUN pip install --no-cache-dir -r requirements.txt
|
||||||
|
|
||||||
|
COPY backend/main.py .
|
||||||
|
COPY static ./static
|
||||||
|
|
||||||
|
# Data directories inside the container (bind-mounted/volumed at runtime,
|
||||||
|
# but created here so the app also works without an explicit mount).
|
||||||
|
RUN mkdir -p /data/projects /data/settings
|
||||||
|
|
||||||
|
ENV PROJECTS_DIR=/data/projects
|
||||||
|
|
||||||
|
EXPOSE 8080
|
||||||
|
|
||||||
|
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8080"]
|
||||||
72
README.md
Normal file
72
README.md
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
# 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
|
||||||
|
|
||||||
|
1. `.env.example` nach `.env` kopieren und `PROJECTS_DIR` auf einen Ordner
|
||||||
|
auf deiner Festplatte setzen, z. B.:
|
||||||
|
|
||||||
|
```
|
||||||
|
PROJECTS_DIR=/home/deinname/3d-projects
|
||||||
|
```
|
||||||
|
|
||||||
|
Das ist der Ordner, in dem deine Projekte als normale Unterordner
|
||||||
|
angelegt werden — den kannst du auch direkt im Dateimanager oder Slicer
|
||||||
|
öffnen.
|
||||||
|
|
||||||
|
2. Container bauen und starten:
|
||||||
|
|
||||||
|
```
|
||||||
|
docker compose up --build -d
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Im Browser öffnen: [http://localhost:8080](http://localhost:8080)
|
||||||
|
|
||||||
|
## 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.
|
||||||
|
|
||||||
|
## 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.
|
||||||
17
docker-compose.yml
Normal file
17
docker-compose.yml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
services:
|
||||||
|
app:
|
||||||
|
build: .
|
||||||
|
container_name: 3d-project-manager
|
||||||
|
ports:
|
||||||
|
- "8080:8080"
|
||||||
|
volumes:
|
||||||
|
# Your projects live here as plain folders on your desktop.
|
||||||
|
# Set PROJECTS_DIR in the .env file to an absolute path, e.g.
|
||||||
|
# PROJECTS_DIR=/home/yourname/3d-projects
|
||||||
|
- ${PROJECTS_DIR}:/data/projects
|
||||||
|
# App-internal state only, not your files. Stays inside Docker.
|
||||||
|
- app-settings:/data/settings
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
app-settings:
|
||||||
Reference in New Issue
Block a user