The ConfigHandlers were calling config.SaveConfig() which uses globalPersistence initialized at startup with potentially wrong path. Now handlers use their own persistence instance directly which is initialized with the correct DataPath. This was causing Docker configurations to still save to /etc/pulse even though we thought we fixed it in v4.0.6. Fixes #253 (for real this time) |
||
|---|---|---|
| cmd/pulse | ||
| docs | ||
| frontend-modern | ||
| internal | ||
| pkg | ||
| scripts | ||
| testing-tools | ||
| .dockerignore | ||
| .gitignore | ||
| build-release.sh | ||
| docker-compose.yml | ||
| DOCKER_PUSH_INSTRUCTIONS.md | ||
| Dockerfile | ||
| go.mod | ||
| go.sum | ||
| install.sh | ||
| LICENSE | ||
| pulse-test | ||
| pulse-wrapper.sh | ||
| README.md | ||
| test-pulse | ||
| VERSION | ||
Pulse for Proxmox
Real-time monitoring for Proxmox VE and PBS with alerts, webhooks, and a clean web interface.
⚠️ IMPORTANT: Upgrading from v3? See the Migration Guide - automatic upgrades will break your installation!
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: Proxmox Helper Script - Creates dedicated 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!
Data Storage
- Docker: All data stored in
/data(mount with-v pulse_data:/data) - Manual Install: All data stored in
/etc/pulse - Configuration: Everything is managed through the web UI
Configuration Backup & Migration
Pulse v4.0.3+ supports encrypted configuration export/import for backup and migration:
# Export configuration (prompts for passphrase)
pulse config export -o pulse-backup.enc
# Import on another instance
pulse config import -i pulse-backup.enc
# Automated deployment (CI/CD)
PULSE_PASSPHRASE=secret pulse config import -i backup.enc --force
# Docker with auto-import on first run
docker run -d \
-v pulse_data:/data \
-v $(pwd)/pulse-backup.enc:/config.enc:ro \
-e PULSE_INIT_CONFIG_FILE=/config.enc \
-e PULSE_INIT_CONFIG_PASSPHRASE=secret \
rcourtman/pulse:latest
Security Notes:
- Exports are encrypted with AES-256-GCM using your passphrase
- Credentials remain encrypted throughout the export/import process
- API endpoints (
/api/config/export,/api/config/import) require API_TOKEN if configured - Perfect for Docker deployments and infrastructure as code workflows
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
