Compare commits

...

4 Commits

Author SHA1 Message Date
ad1e1d566a Merge pull request 'docker-added' (#2) from feature/add-docker into main
Reviewed-on: #2
2026-06-04 17:12:28 +00:00
60a5fe9687 docker-added 2026-06-04 13:03:26 -04:00
4af91c1603 Merge pull request 'updated README.md' (#1) from feature/my-new-thing into main
Reviewed-on: #1
2026-06-04 13:57:37 +00:00
8dbf7b02e7 updated README.md 2026-06-04 09:49:56 -04:00
4 changed files with 116 additions and 68 deletions

9
.dockerignore Normal file
View File

@@ -0,0 +1,9 @@
node_modules/
data/
.git/
.wolf/
.gitignore
.dockerignore
*.bat
*.sh
README.md

13
Dockerfile Normal file
View File

@@ -0,0 +1,13 @@
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY server.js ./
COPY vps_manager.html ./
EXPOSE 8095
CMD ["node", "server.js"]

108
README.md
View File

@@ -1,85 +1,103 @@
# vps/fleet # vps/fleet
> A self-hosted VPS fleet tracker with a dark GitHub-style UI, interactive map, and zero-config local storage. > 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=flat-square&logo=node.js&logoColor=white) [![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=flat-square&logo=express&logoColor=white) [![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-blue?style=flat-square) [![License](https://img.shields.io/badge/License-MIT-58a6ff?style=for-the-badge)](LICENSE)
![No Build Step](https://img.shields.io/badge/build-none-brightgreen?style=flat-square) [![No Build](https://img.shields.io/badge/Build-None-3fb950?style=for-the-badge)](https://github.com/your-username/vps-manager)
--- ---
## Features ## Features
- **Fleet overview** — live stats for total servers, online / offline / maintenance counts, and total monthly spend - 📊 **Fleet stats** — live totals for online / offline / maintenance counts and monthly spend
- **Server cards** — glanceable cards showing name, IP, status dot, CPU / RAM / disk chips, and price - 🃏 **Server cards** — status dot, IP, CPU · RAM · Disk chips, and price at a glance
- **Add · Edit · Delete** — modal form with full field set: provider, plan, specs, IPv4/IPv6, location, region, sites, notes - ✏️ **Full CRUD**add, edit, and delete servers via a clean modal form
- **Interactive map** — Leaflet.js world map; server locations are geocoded automatically via OpenStreetMap - 🗺️ **Interactive map** — Leaflet.js world map; locations geocoded automatically via OpenStreetMap
- **Persistent storage** — flat-file JSON, no database required - 💾 **Zero-config storage** — flat-file JSON, no database, no migrations
- **Dark theme** — GitHub-flavored dark palette (`#0d1117`) with IBM Plex Mono / Sans typography - 🌑 **Dark theme** — GitHub-style `#0d1117` palette with IBM Plex Mono / Sans
- **Single HTML file** — no bundler, no framework, no build step - 📄 **Single HTML file** — no bundler, no framework, no build step
--- ---
## Requirements ## Requirements
| Dependency | Version | | Dependency | Version |
| ---------- | -------------------- | | ---------- | ------------------ |
| Node.js | 18 or higher | | Node.js | 18 or higher |
| npm | included with Node | | npm | included with Node |
--- ---
## Installation ## Quick Start
```bash ```bash
# 1. Clone the repo
git clone https://github.com/your-username/vps-manager.git git clone https://github.com/your-username/vps-manager.git
cd vps-manager cd vps-manager
# 2. Install dependencies
npm install npm install
# 3. Start the server
npm start npm start
``` ```
Then open `http://localhost:8095` in your browser. Open `http://localhost:8095` in your browser.
> **Windows:** double-click `start.bat` instead of step 3. > **Windows** double-click `start.bat`
> >
> **Linux / macOS:** run `chmod +x start.sh && ./start.sh` instead of step 3. > **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 ## Usage
### Adding a server **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.
Click **+ Add Server** in the top-right corner. Fill in any combination of fields — only the name is required. If you enter a location, coordinates are resolved automatically and a pin is placed on the map. **Edit** — click the pencil icon on any card to reopen the form pre-filled with its data.
### Editing a server **Delete** — click the trash icon on any card. The change is saved immediately.
Click the **pencil icon** on any server card to reopen the form pre-filled with its data. **Map view** — switch to the map tab to see all geocoded servers plotted on a world map. Click a pin for a quick summary.
### Deleting a server
Click the **trash icon** on a server card. The change is saved immediately.
### Map view
The map tab shows all servers that have a resolvable location. Click any pin to see a summary popup.
--- ---
## API ## API
The Express server exposes a simple REST API on port `8095`. All data is served over a local REST API on port `8095`.
| Method | Endpoint | Description | | Method | Endpoint | Description |
| -------- | ------------------ | -------------------------------------------------- | | ---------- | ------------------ | -------------------------------------------------- |
| `GET` | `/api/servers` | Return all servers | | `GET` | `/api/servers` | Return all servers |
| `POST` | `/api/servers` | Create or update a server (include `id` to update) | | `POST` | `/api/servers` | Create or update a server (`id` present = update) |
| `DELETE` | `/api/servers/:id` | Delete a server by ID | | `DELETE` | `/api/servers/:id` | Delete a server by ID |
### Server object ### Server object
@@ -111,7 +129,7 @@ The Express server exposes a simple REST API on port `8095`.
## Configuration ## Configuration
| Variable | Default | Description | | Variable | Default | Description |
| -------- | ------- | ---------------------------- | | -------- | ------- | -------------------------- |
| `PORT` | `8095` | Port the server listens on | | `PORT` | `8095` | Port the server listens on |
```bash ```bash
@@ -120,21 +138,21 @@ PORT=3000 npm start
--- ---
## Project structure ## Project Structure
```text ```text
vps-manager/ vps-manager/
├── server.js # Express server + REST API + geocoding ├── server.js # Express server · REST API · geocoding
├── vps_manager.html # Complete UI (HTML + CSS + JS, single file) ├── vps_manager.html # Full UI HTML + CSS + JS in one file
├── package.json # Dependencies ├── package.json # Dependencies
├── start.bat # Windows one-click launcher ├── start.bat # Windows launcher
├── start.sh # Linux / macOS one-click launcher ├── start.sh # Linux / macOS launcher
└── data/ └── data/
└── servers.json # Auto-created on first run └── servers.json # Auto-created on first run (gitignored)
``` ```
--- ---
## License ## License
MIT Released under the [MIT License](LICENSE).

8
docker-compose.yml Normal file
View File

@@ -0,0 +1,8 @@
services:
vps-fleet:
build: .
ports:
- "8095:8095"
volumes:
- ./data:/app/data
restart: unless-stopped