No description
- modify ENCRYPTION_KEY to use environment variable for flexibility - ensure default configuration retains security settings |
||
|---|---|---|
| app | ||
| .env-example | ||
| .gitignore | ||
| docker-compose.yml | ||
| Dockerfile | ||
| README.md | ||
| requirements.txt | ||
FleetLedger
Self-hosted Übersicht für gemietete Server (VPS, Dedizierte, Storage, Managed). Mehrnutzerfähig, Dark-Mode-first und PWA-ready.
Features
- Server-CRUD pro Benutzer, Soft-Delete/Archiv
- Dashboard (Kosten, ablaufende Verträge) + Admin-Gesamtübersicht
- Map-Ansicht pro Nutzer auf Basis der Location-Namen (Leaflet)
- Optional verschlüsselte Speicherung von Management-Passwörtern (Fernet)
- Session-Auth mit CSRF-Schutz, Admin-Rolle
- PWA: Manifest, Service Worker, installierbar
Stack
- FastAPI, SQLModel, Jinja2
- SQLite (Standard), Passlib (bcrypt), Cryptography (Fernet)
- Tailwind via CDN, Leaflet für Karte
- Uvicorn als ASGI-Server
Schnellstart mit Docker
- Repository klonen
git clone https://example.com/your/fleetledger.git cd fleetledger - Umgebung setzen
cp .env-example .env # SESSION_SECRET in .env auf einen starken, einzigartigen Wert setzen - Starten
Die SQLite-DB liegt indocker-compose up --build./data/(Bind-Mount in den Container unter/app/data/fleetledger.db).
Lokale Entwicklung (ohne Docker)
- Voraussetzungen: Python 3.12, virtualenv empfohlen.
- Setup:
python -m venv .venv source .venv/bin/activate pip install -r requirements.txt cp .env-example .env export SESSION_SECRET="ein_langer_random_wert" export SESSION_COOKIE_SECURE=0 # nur lokal ohne HTTPS uvicorn app.main:app --reload --port 8000
Umgebungsvariablen
SESSION_SECRET(erforderlich): Langer, zufälliger String für die Session-Signierung.SESSION_COOKIE_SECURE(default1): Auf0nur für lokale HTTP-Tests setzen, sonst1(HTTPS).DATABASE_PATH(default/app/data/fleetledger.dbim Docker-Image): Pfad zur SQLite-Datei. Lokal z. B../data/fleetledger.db.ENCRYPTION_KEY(optional): Fernet-Key für verschlüsselte Management-Passwörter. Leer lassen, wenn keine Speicherung gewünscht ist.
Sicherheitshinweise
- Immer einen starken
SESSION_SECRETverwenden; im Docker-Setup wird der Start verweigert, wenn ein Platzhalter genutzt wird. - Produktiv hinter HTTPS betreiben (
SESSION_COOKIE_SECURE=1). - Management-Passwörter nur mit gesetztem
ENCRYPTION_KEYspeichern; ohne Key werden sie nicht persistiert. - CSRF-Schutz ist aktiv für Form-POSTs; Browser-Service-Worker cached Assets versioniert.
Datenhaltung
- SQLite speichert die Daten in einer Datei (
DATABASE_PATH). In Docker wird./data/aus dem Host eingebunden. - Backups: Einfach die SQLite-Datei in
./data/sichern, während der Dienst gestoppt ist.