37efe83e88fdf3691f0317db34147590bee4e373
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Proxmox Monitor
A real-time dashboard for monitoring Proxmox VE nodes, VMs, and LXC containers.
Features
- Node overview — CPU, memory, uptime, and load for each Proxmox node
- VM & LXC tracking — status, resource usage across all nodes
- Summary cards — total nodes, running/stopped VMs, aggregate memory
- Auto-refresh — polling every 30s (configurable)
- Tabbed navigation — switch between Nodes, VMs, and LXCs
Tech Stack
- Framework — Next.js 15 (App Router)
- UI — React 19, Tailwind CSS 4
- Data fetching — SWR (auto-refresh), Axios
- Proxmox — API2 Token-based auth
Getting Started
1. Configure environment variables
Copy the example file and fill in your Proxmox credentials:
cp .env.example .env.local
.env.local contents:
PROXMOX_API_URL=https://your-proxmox-host:8006/api2/json
PROXMOX_TOKEN_ID=root@pam!token-name
PROXMOX_TOKEN_SECRET=your-secret-uuid
API_POLL_INTERVAL=30000
NODE_TLS_REJECT_UNAUTHORIZED=0
Creating an API token in Proxmox: Datacenter > Permissions > API Tokens
2. Install dependencies
npm install
3. Run the development server
npm run dev
Open http://localhost:3000 in your browser.
4. Build for production
npm run build
npm start
Project Structure
src/
├── app/
│ ├── api/
│ │ ├── nodes/route.js # Proxmox node stats
│ │ ├── vms/route.js # QEMU VMs across all nodes
│ │ ├── lxc/route.js # LXC containers across all nodes
│ │ └── status/route.js # Aggregated summary
│ ├── layout.js
│ └── page.js
├── components/
│ ├── Dashboard.js # Main dashboard with tabs & summary
│ ├── NodeList.js # Node cards
│ ├── NodeCard.js # Single node display
│ ├── VMList.js # VM list view
│ ├── LXCList.js # LXC list view
│ └── StatusBadge.js # Online/good/warn/error/dead
└── lib/
└── proxmox.js # Proxmox API client & data mappers
Environment Variables
| Variable | Required | Description |
|---|---|---|
PROXMOX_API_URL |
Yes | Base URL of the Proxmox API |
PROXMOX_TOKEN_ID |
Yes | API token ID (e.g. root@pam!monitorapp) |
PROXMOX_TOKEN_SECRET |
Yes | API token secret |
API_POLL_INTERVAL |
No | Refresh interval in ms (default: 30000) |
NODE_TLS_REJECT_UNAUTHORIZED |
No | Set to 0 for self-signed certs |
API Routes
| Route | Method | Description |
|---|---|---|
/api/nodes |
GET | All Proxmox nodes |
/api/vms |
GET | All QEMU VMs |
/api/lxc |
GET | All LXC containers |
/api/status |
GET | Aggregated summary stats |
Description
Languages
JavaScript
98.5%
CSS
1%
TypeScript
0.5%