# vps/fleet > A self-hosted VPS fleet manager β€” track every server you own in one dark, minimal dashboard. [![Node.js](https://img.shields.io/badge/Node.js-18%2B-339933?style=for-the-badge&logo=node.js&logoColor=white)](https://nodejs.org) [![Express](https://img.shields.io/badge/Express-4.18-000000?style=for-the-badge&logo=express&logoColor=white)](https://expressjs.com) [![License](https://img.shields.io/badge/License-MIT-58a6ff?style=for-the-badge)](LICENSE) [![No Build](https://img.shields.io/badge/Build-None-3fb950?style=for-the-badge)](https://github.com/your-username/vps-manager) --- ## 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 ```bash 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 / macOS** β€” `chmod +x start.sh && ./start.sh` --- ## Docker **One command β€” no Node.js install required.** ```bash 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: ```bash docker compose down ``` To rebuild after pulling changes: ```bash docker compose up -d --build ``` To run without Compose (manual): ```bash 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 ```json { "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 | ```bash PORT=3000 npm start ``` --- ## Project Structure ```text 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](LICENSE).