vps/fleet

A self-hosted VPS fleet manager — track every server you own in one dark, minimal dashboard.

Node.js Express License No Build


Features

  • 📊 Fleet stats — live totals for online / offline / maintenance counts and monthly spend
  • 🃏 Server cards — status dot, IP, CPU · RAM · Disk chips, and price at a glance
  • ✏️ Full CRUD — add, edit, and delete servers via a clean modal form
  • 🗺️ Interactive map — Leaflet.js world map; locations geocoded automatically via OpenStreetMap
  • 💾 Zero-config storage — flat-file JSON, no database, no migrations
  • 🌑 Dark theme — GitHub-style #0d1117 palette with IBM Plex Mono / Sans
  • 📄 Single HTML file — no bundler, no framework, no build step

Requirements

Dependency Version
Node.js 18 or higher
npm included with Node

Quick Start

git clone https://github.com/your-username/vps-manager.git
cd vps-manager
npm install
npm start

Open http://localhost:8095 in your browser.

Windows — double-click start.bat

Linux / macOSchmod +x start.sh && ./start.sh


Docker

One command — no Node.js install required.

docker compose up -d

Open http://localhost:8095 in your browser. Server data is persisted in ./data/ on the host via a bind mount, so it survives container restarts and rebuilds.

To stop:

docker compose down

To rebuild after pulling changes:

docker compose up -d --build

To run without Compose (manual):

docker build -t vps-fleet .
docker run -d -p 8095:8095 -v "$(pwd)/data:/app/data" --name vps-fleet vps-fleet

Usage

Add a server — click + Add Server in the top-right corner. Only the hostname is required; all other fields are optional. Enter a location and a map pin is placed automatically.

Edit — click the pencil icon on any card to reopen the form pre-filled with its data.

Delete — click the trash icon on any card. The change is saved immediately.

Map view — switch to the map tab to see all geocoded servers plotted on a world map. Click a pin for a quick summary.


API

All data is served over a local REST API on port 8095.

Method Endpoint Description
GET /api/servers Return all servers
POST /api/servers Create or update a server (id present = update)
DELETE /api/servers/:id Delete a server by ID

Server object

{
  "id":       "srv_1700000000000",
  "name":     "prod-app-01",
  "status":   "online",
  "ipv4":     "203.0.113.42",
  "ipv6":     "2001:db8::1",
  "provider": "DigitalOcean",
  "plan":     "s-2vcpu-4gb",
  "cpu":      "2",
  "ram":      "4",
  "disk":     "80",
  "price":    "24.00",
  "billing":  "monthly",
  "renewal":  "2026-07-01",
  "location": "Toronto, Canada",
  "region":   "ca-central",
  "sites":    "myapp.example.com",
  "notes":    "Primary application node"
}

Configuration

Variable Default Description
PORT 8095 Port the server listens on
PORT=3000 npm start

Project Structure

vps-manager/
├── server.js          # Express server · REST API · geocoding
├── vps_manager.html   # Full UI — HTML + CSS + JS in one file
├── package.json       # Dependencies
├── start.bat          # Windows launcher
├── start.sh           # Linux / macOS launcher
└── data/
    └── servers.json   # Auto-created on first run (gitignored)

License

Released under the MIT License.

Description
No description provided
Readme 61 KiB
Languages
HTML 88.9%
JavaScript 10.1%
Dockerfile 0.6%
Batchfile 0.2%
Shell 0.2%