Fixed the remaining contamination issue where PBS forms would retain PVE data after canceling a PVE node addition. The form now properly resets when opening the modal for adding a new node. Two fixes were needed: 1. Set currentNodeType when editing any node (previous commit) 2. Clear form data when opening modal for new nodes (this commit) Both issues reported by krom are now resolved: - PBS forms no longer show PVE data - Editing PBS nodes properly populates the form |
||
|---|---|---|
| .devdata/alerts | ||
| cmd/pulse | ||
| docs | ||
| frontend-modern | ||
| internal | ||
| pkg | ||
| screenshots | ||
| scripts | ||
| testing-tools | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| build-release.sh | ||
| docker-compose.yml | ||
| docker-entrypoint.sh | ||
| Dockerfile | ||
| go.mod | ||
| go.sum | ||
| install.sh | ||
| LICENSE | ||
| manual-test-pbs.md | ||
| README.md | ||
| test-pbs-cli.sh | ||
| test-pbs-form.js | ||
| test-pbs-real.js | ||
| test-pbs-simple.sh | ||
| verify-pbs-fix.md | ||
| VERSION | ||
Pulse for Proxmox
Real-time monitoring for Proxmox VE and PBS with alerts and webhooks.
💖 Support This Project
Features
- Auto-Discovery: Finds Proxmox nodes on your network, one-liner setup via generated scripts
- Cluster Support: Configure one node, monitor entire cluster
- Security: Credentials encrypted at rest, masked in logs, never sent to frontend
- Live monitoring of VMs, containers, nodes, storage
- Alerts with email and webhooks (Discord, Slack, Telegram, Teams, ntfy.sh, Gotify)
- Unified view of PBS backups, PVE backups, and snapshots
- PBS push mode for firewalled servers
- Config export/import with encryption and authentication
- Dark/light themes, responsive design
- Built with Go for minimal resource usage
Quick Start
Install
# Option A: Proxmox Helper Script (creates LXC container)
bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/ct/pulse.sh)"
# Option B: Docker
docker run -d -p 7655:7655 -v pulse_data:/data rcourtman/pulse:latest
# Option C: Manual (existing systems)
curl -fsSL https://raw.githubusercontent.com/rcourtman/Pulse/main/install.sh | sudo bash
Configure Nodes
- Open
http://<your-server>:7655 - Go to Settings → Nodes
- Discovered nodes appear automatically
- Click "Setup Script" next to any node
- Run the generated one-liner on that node
- Node is configured and monitoring starts
The script handles user creation, permissions, token generation, and registration automatically.
Docker
Basic
docker run -d \
--name pulse \
-p 7655:7655 \
-v pulse_data:/data \
--restart unless-stopped \
rcourtman/pulse:latest
With Network Discovery
# Specify your LAN subnet for auto-discovery
docker run -d \
--name pulse \
-p 7655:7655 \
-v pulse_data:/data \
-e DISCOVERY_SUBNET=192.168.1.0/24 \
--restart unless-stopped \
rcourtman/pulse:latest
Docker Compose
services:
pulse:
image: rcourtman/pulse:latest
container_name: pulse
ports:
- "7655:7655"
volumes:
- pulse_data:/data
environment:
# Network discovery
# - DISCOVERY_SUBNET=192.168.1.0/24 # Auto-discovery subnet (default: auto-detect)
# Ports
# - PORT=7655 # Backend port (default: 7655)
# - FRONTEND_PORT=7655 # Frontend port (default: 7655)
# Security
# - API_TOKEN=your-secure-token # API authentication token
# - ALLOW_UNPROTECTED_EXPORT=false # Allow export without auth (default: false)
# Polling & timeouts
# - POLLING_INTERVAL=5 # Seconds between node checks (default: 5)
# - CONNECTION_TIMEOUT=10 # Connection timeout in seconds (default: 10)
# Updates
# - UPDATE_CHANNEL=stable # Update channel: stable or rc (default: stable)
# - AUTO_UPDATE_ENABLED=true # Enable auto-updates (default: true)
# - AUTO_UPDATE_CHECK_INTERVAL=24 # Hours between update checks (default: 24)
# - AUTO_UPDATE_TIME=03:00 # Time to install updates HH:MM (default: 03:00)
# CORS & logging
# - ALLOWED_ORIGINS=* # CORS allowed origins (default: *)
# - LOG_LEVEL=info # Log level: debug/info/warn/error (default: info)
restart: unless-stopped
volumes:
pulse_data:
PBS Agent (Push Mode)
For isolated PBS servers, see PBS Agent documentation
Security
- Credentials encrypted at rest (AES-256-GCM)
- Tokens masked in logs
- Frontend never receives actual credentials
- Export requires authentication
See Security Documentation for details.
Configuration
Quick start - most settings are in the web UI:
- Settings → Nodes: Add/remove Proxmox instances
- Settings → System: Polling intervals, CORS settings
- Alerts: Thresholds and notifications
For deployment overrides (ports, etc), use environment variables:
# Systemd: sudo systemctl edit pulse-backend
Environment="FRONTEND_PORT=8080"
# Docker: -e FRONTEND_PORT=8080
Backup/Restore
# Export (v4.0.3+)
pulse config export -o backup.enc
# Import
pulse config import -i backup.enc
Or use Settings → Security tab in UI.
Updates
Docker
docker pull rcourtman/pulse:latest
docker stop pulse
docker rm pulse
# Run docker run command again
Manual Install
Settings → System → Check for Updates
After updates complete, refresh your browser (Ctrl+F5 or Cmd+Shift+R) to load the new version.
API
# Status
curl http://localhost:7655/api/status
# Metrics
curl http://localhost:7655/api/metrics
# With authentication (if configured)
curl -H "X-API-Token: your-token" http://localhost:7655/api/status
Reverse Proxy
Using Pulse behind a reverse proxy? WebSocket support is required for real-time updates.
See Reverse Proxy Configuration Guide for nginx, Caddy, Apache, Traefik, HAProxy, and Cloudflare Tunnel configurations.
Troubleshooting
Connection Issues
- Check Proxmox API is accessible (port 8006/8007)
- Verify credentials have PVEAuditor role minimum
- For PBS: ensure API token has Datastore.Audit permission
High CPU/Memory
- Reduce polling interval in Settings
- Check number of monitored nodes
- Disable unused features (backups, snapshots)
Logs
# Docker
docker logs pulse
# Manual
journalctl -u pulse -f
Security
- Credentials stored encrypted (AES-256-GCM)
- Optional API token authentication
- Export/import requires passphrase
- Security Details →
Development
# Frontend
cd frontend-modern
npm install
npm run dev
# Backend
go run cmd/pulse/*.go
Links
License
MIT - See LICENSE
