No description
Find a file
nocci ea06f16407 🔧 chore(repo): restructure project file hierarchy
- move project files out of fleetledger directory to root
- update .gitignore to reflect new .env path

📝 docs(README): add detailed project description

- provide an overview of FleetLedger's features and usage
- include setup instructions and security notes
2025-12-06 11:56:16 +00:00
app 🔧 chore(repo): restructure project file hierarchy 2025-12-06 11:56:16 +00:00
.env-example 🔧 chore(repo): restructure project file hierarchy 2025-12-06 11:56:16 +00:00
.gitignore 🔧 chore(repo): restructure project file hierarchy 2025-12-06 11:56:16 +00:00
docker-compose.yml 🔧 chore(repo): restructure project file hierarchy 2025-12-06 11:56:16 +00:00
Dockerfile 🔧 chore(repo): restructure project file hierarchy 2025-12-06 11:56:16 +00:00
README.md 🔧 chore(repo): restructure project file hierarchy 2025-12-06 11:56:16 +00:00
requirements.txt 🔧 chore(repo): restructure project file hierarchy 2025-12-06 11:56:16 +00:00

FleetLedger

FleetLedger is a small self-hosted web app to keep track of your rented servers:

  • VPS, dedicated servers, storage boxes, managed services
  • Provider, location, IPs, hardware
  • Monthly / yearly pricing and contract dates
  • Simple access info (management URLs, SSH user + key hint)
  • Multi-user support with per-user data separation
  • Admin user management (activate / deactivate users)
  • Dark-mode-first UI with PWA support (installable as an app)
  • Per-user map view for server locations
  • Admin global dashboard for fleet-wide stats

Security note: FleetLedger is not a full password manager. It is intentionally designed to store only management password(s) optionally and only SSH key names (no private keys).


Features

  • Authentication & Users

    • User registration + login (session cookie based)
    • First registered user becomes admin
    • Admin can view all users and activate/deactivate them
    • Deactivated users cannot log in and will be logged out automatically
  • Server Management

    • Each user has their own list of servers (no cross-visibility)
    • Create / edit / archive (soft-delete) servers
    • Fields include:
      • General: name, hostname, type (VPS, dedicated, storage, managed, other), provider, location, tags
      • Network: IPv4, IPv6
      • Billing: price, currency, billing period (monthly/yearly/other), contract start/end
      • Hardware: CPU model, core count, RAM, storage size & type
      • Access: management URL, management user, management password (optional), SSH user, SSH key hint
      • Free-form notes
    • Contract badges:
      • "abgelaufen" (expired): contract end in the past
      • "läuft bald aus" (expiring soon): contract end within the next 30 days
      • Detail view also shows how many days until / since contract end
  • Per-user Dashboard & Map

    • On /: small dashboard row showing:
      • number of active servers
      • estimated total monthly cost
      • how many contracts are expiring soon / already expired
    • On /map: Leaflet-based map showing all non-archived servers of the logged-in user
      • Marker position is derived from the location string (city/datacenter name)
      • Multiple servers per city are slightly offset so all markers remain clickable
      • Click on a marker → opens the server details page
  • Admin Global Dashboard

    • On /admin/dashboard (admin only):
      • Global counts: users, servers, monthly cost, expiring soon, expired
      • Breakdown by provider (server count, monthly total, expiring soon, expired)
      • List of contracts expiring soon and already expired
  • Security

    • Passwords hashed with bcrypt (passlib[bcrypt])
    • Optional encryption for management passwords using Fernet (cryptography)
    • No private SSH keys are stored, only name/hint strings
    • Jinja2 auto-escaping enabled; no untrusted HTML is rendered with |safe
    • Management URLs are restricted to http:// or https:// (no javascript: links, etc.)
  • UI / UX

    • TailwindCSS via CDN for quick styling
    • Dark mode is enabled by default
    • Theme preference stored in localStorage and toggleable via a small button
    • Responsive layout, works well on mobile
    • PWA manifest and service worker for a simple offline-friendly experience

Quick Start (Docker)

0. Environment

Kopiere .env-example nach .env und setze mindestens ein starkes SESSION_SECRET. Für lokale HTTP-Tests kannst du SESSION_COOKIE_SECURE=0 setzen, in Produktion sollte es 1 bleiben. Optional kannst du einen ENCRYPTION_KEY (Fernet) hinterlegen, um Management-Passwörter zu speichern.

1. Clone / copy the repository

git clone https://example.com/your/fleetledger.git
cd fleetledger