- Add GetDataDir() function to respect PULSE_DATA_DIR environment variable - Update all hardcoded /var/lib/pulse paths to use configurable data directory - Fix circular import by moving GetDataDir to utils package - Ensures Docker containers can properly persist configuration and alerts |
||
|---|---|---|
| cmd/pulse | ||
| docs | ||
| frontend-modern | ||
| internal | ||
| pkg | ||
| scripts | ||
| testing-tools | ||
| .dockerignore | ||
| .gitignore | ||
| build-release.sh | ||
| docker-compose.yml | ||
| Dockerfile | ||
| go.mod | ||
| go.sum | ||
| install.sh | ||
| LICENSE | ||
| pulse-wrapper.sh | ||
| README.md | ||
| VERSION | ||
Pulse for Proxmox
Real-time monitoring for Proxmox VE and PBS with alerts, webhooks, and a clean web interface.
Key Features
- Real-time Monitoring - Live updates for VMs, containers, nodes, and storage via WebSockets
- Smart Alerts - Configurable thresholds with email and webhook notifications (Discord, Slack, Gotify, Telegram, ntfy.sh, Teams)
- Alert History - Persistent storage of alert events with detailed metrics and timeline
- Unified Backups - Single view for PBS backups, PVE backups, and snapshots
- PBS Push Mode - Monitor isolated/firewalled PBS servers without inbound connections
- Modern UI - Responsive design with dark/light themes, virtual scrolling, and expandable charts
- Performance - Built with Go for minimal resource usage, stops polling when no clients connected
- Secure by Default - Encrypted configuration storage with flexible credential management
Support Development
Pulse is a solo hobby project developed in my free time. If you find it useful, your support helps keep me motivated and covers hosting costs.
Quick Start (2 minutes)
Prerequisites
- Proxmox VE 7.0+ or PBS 2.0+
- Network access to Proxmox API (ports 8006/8007)
Install Pulse
Choose one method:
# Option A: Automated LXC Container (Easiest)
bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/ct/pulse.sh)"
# Option B: Docker (Multi-arch: AMD64, ARM64, ARMv7)
docker run -d -p 7655:7655 -v pulse_data:/data --restart unless-stopped rcourtman/pulse:latest
# Option C: Manual Install (For existing LXC/VMs)
curl -fsSL https://raw.githubusercontent.com/rcourtman/Pulse/main/install.sh | sudo bash
Configure Pulse
- Open Pulse in your browser:
http://<your-server>:7655 - Go to Settings → Nodes → Add Node
- Enter your Proxmox credentials
- Click Save - Pulse will start monitoring immediately
Configuration
Pulse uses a modern, secure configuration system similar to popular apps like Radarr and Sonarr:
Everything Through the UI
- All configuration is done via the web interface - no manual file editing needed
- Settings → Nodes: Add/remove Proxmox instances with a simple form
- Settings → General: Configure ports, intervals, themes, and more
- Alerts: Set up thresholds and notification channels
- Configuration is encrypted and stored securely with proper permissions
Zero Configuration Files
Unlike traditional monitoring tools:
- No YAML/JSON files to edit
- No environment variables to set
- No complex configurations
- Works immediately after installation
Just open the web UI, add your Proxmox nodes through the interface, and you're done!
For Docker Users
Pulse provides multi-architecture Docker images supporting:
- linux/amd64 - Intel/AMD 64-bit servers
- linux/arm64 - 64-bit ARM (Raspberry Pi 4/5, Apple Silicon)
- linux/arm/v7 - 32-bit ARM (Raspberry Pi 2/3)
The only environment variables needed are for the initial ports if you want to change defaults:
docker run -d -p 8080:8080 \
-e PULSE_SERVER_FRONTEND_PORT=8080 \
-v pulse_data:/data \
--restart unless-stopped \
rcourtman/pulse:latest
Available Docker tags:
rcourtman/pulse:latest- Latest stable releasercourtman/pulse:4- Latest v4.x releasercourtman/pulse:4.0.0- Specific version
Once running, all configuration is done through the web UI.
Security
Pulse automatically encrypts and secures all configuration:
- Credentials are encrypted using AES-256-GCM
- Configuration files have restricted permissions (0600)
- No plaintext passwords in config files
- Encryption keys derived from machine ID
See Security Guide for additional security options.
Webhooks
Pulse supports multiple webhook providers for alerts:
- Discord - Native Discord webhooks with rich embeds
- Slack - Slack incoming webhooks
- Gotify - Self-hosted push notifications
- Telegram - Telegram bot notifications
- ntfy.sh - Simple pub-sub notifications
- Teams - Microsoft Teams incoming webhooks
- Generic - Any webhook endpoint (JSON POST)
Configure webhooks in Alerts → Destinations → Webhooks.
PBS Agent (Push Mode)
For isolated PBS servers that can't be reached directly:
# On the PBS server:
cd /opt
wget https://github.com/rcourtman/Pulse/releases/latest/download/pulse-pbs-agent.tar.gz
tar xzf pulse-pbs-agent.tar.gz
cd pulse-pbs-agent
./install.sh
Configure the agent to push data to your Pulse instance. See PBS Agent Guide.
Docker Compose
version: '3.8'
services:
pulse:
image: rcourtman/pulse:latest # Multi-arch: AMD64, ARM64, ARMv7
container_name: pulse
ports:
- "7655:7655"
volumes:
- pulse_data:/data
restart: unless-stopped
volumes:
pulse_data:
After starting, configure everything through the web UI at http://localhost:7655.
Building from Source
# Clone repository
git clone https://github.com/rcourtman/Pulse.git
cd Pulse
# Build backend
go build -o pulse ./cmd/pulse
# Build frontend
cd frontend-modern
npm install
npm run build
# Run
./pulse
Troubleshooting
Common Issues
-
"Connection refused" error
- Check firewall rules for port 7655
- Verify Pulse is running:
systemctl status pulse-backend
-
"Invalid credentials" error
- Ensure user has at least
PVEAuditorrole - For PBS, user needs
DatastoreReaderpermissions - Try token authentication instead of password
- Ensure user has at least
-
No data showing
- Check browser console for errors
- Verify Proxmox API is accessible from Pulse server
- Check Pulse logs:
journalctl -u pulse -f
Getting Help
License
This project is licensed under the MIT License - see LICENSE file for details.
Acknowledgments
Made with ❤️ for the Proxmox community
