A lightweight monitoring application for Proxmox VE that displays real-time status for VMs and containers via a simple web interface.
- Quick Start (Docker Compose)
- Configuration
- Deployment
- Features
- System Requirements
- Contributing
- Privacy
- License
- Trademark Notice
- Support
- Troubleshooting
This is the fastest way to get Pulse running.
- Get Files: Clone the repository (
git clone https://github.com/rcourtman/Pulse.git && cd Pulse
) or downloaddocker-compose.yml
and.env.example
manually. - Copy
.env
:cp .env.example .env
- Edit
.env
: Fill in your primary Proxmox API details (PROXMOX_HOST
,PROXMOX_TOKEN_ID
,PROXMOX_TOKEN_SECRET
). See Creating a Proxmox API Token if you don't have one. - Run:
docker compose up -d
- Access: Open your browser to
http://<your-host-ip>:7655
.
Pulse is configured using environment variables, typically set in a .env
file in the project root.
- Copy Example File: If you haven't already, copy the example file:
cp .env.example .env
- Edit
.env
: Open.env
in a text editor and update the values for your environment(s).
These are the minimum required variables:
PROXMOX_HOST
: URL of your Proxmox server (e.g.,https://192.168.1.10:8006
).PROXMOX_TOKEN_ID
: Your API Token ID (e.g.,user@pam!tokenid
).PROXMOX_TOKEN_SECRET
: Your API Token Secret.
Optional variables:
PROXMOX_NODE_NAME
: A display name for this endpoint in the UI (defaults toPROXMOX_HOST
).PROXMOX_ALLOW_SELF_SIGNED_CERTS
: Set totrue
if your Proxmox server uses self-signed SSL certificates. Defaults tofalse
.PORT
: Port for the Pulse server to listen on. Defaults to7655
.- (Username/Password fallback exists but API Token is strongly recommended)
Note: For a Proxmox cluster, you only need to provide connection details for one node. Pulse automatically discovers other cluster members.
To monitor separate Proxmox environments (e.g., different clusters, sites) in one Pulse instance, add numbered variables:
PROXMOX_HOST_2
,PROXMOX_TOKEN_ID_2
,PROXMOX_TOKEN_SECRET_2
PROXMOX_HOST_3
,PROXMOX_TOKEN_ID_3
,PROXMOX_TOKEN_SECRET_3
- ...and so on.
Optional numbered variables also exist (e.g., PROXMOX_ALLOW_SELF_SIGNED_CERTS_2
, PROXMOX_NODE_NAME_2
).
To monitor a PBS instance:
PBS_HOST
: URL of your PBS server (e.g.,https://192.168.1.11:8007
).PBS_TOKEN_ID
: Your PBS API Token ID (e.g.,user@pbs!tokenid
). See Creating a Proxmox Backup Server API Token.PBS_TOKEN_SECRET
: Your PBS API Token Secret.PBS_NODE_NAME
: Important! The internal hostname of your PBS server (e.g.,pbs-server-01
). This is usually required for API token auth because the token might lack permission to auto-discover the node name. See details below.PBS_ALLOW_SELF_SIGNED_CERTS
: Set totrue
for self-signed certificates. Defaults tofalse
.PBS_PORT
: PBS API port. Defaults to8007
.
Note: Currently, only one PBS instance can be configured.
Why PBS_NODE_NAME
is Required (Click to Expand)
Pulse needs to query task lists specific to the PBS node (e.g., /api2/json/nodes/{nodeName}/tasks
). It attempts to discover this node name automatically by querying /api2/json/nodes
. However, this endpoint is often restricted for API tokens (returning a 403 Forbidden error), even for tokens with high privileges, unless the Sys.Audit
permission is granted on the root path (/
).
Therefore, setting PBS_NODE_NAME
in your .env
file is the standard and recommended way to ensure Pulse can correctly query task endpoints when using API token authentication. If it's not set and automatic discovery fails due to permissions, Pulse will be unable to fetch task data (backups, verifications, etc.).
How to find your PBS Node Name:
- SSH: Log into your PBS server via SSH and run
hostname
. - UI: Log into the PBS web interface. The hostname is typically displayed on the Dashboard under Server Status.
Example: If your PBS connects via https://minipc-pbs.lan:8007
but its internal hostname is proxmox-backup-server
, set:
PBS_HOST=https://minipc-pbs.lan:8007
PBS_NODE_NAME=proxmox-backup-server
Using an API token is the recommended authentication method.
Steps to Create a PVE API Token (Click to Expand)
- Log in to the Proxmox VE web interface.
- Create a dedicated user (optional but recommended):
- Go to
Datacenter
→Permissions
→Users
. - Click
Add
. Enter aUser name
(e.g., "pulse-monitor"), set Realm toProxmox VE authentication server
(pam
), set a password, ensureEnabled
. ClickAdd
.
- Go to
- Create an API token:
- Go to
Datacenter
→Permissions
→API Tokens
. - Click
Add
. - Select the
User
(e.g., "pulse-monitor@pam") orroot@pam
. - Enter a
Token ID
(e.g., "pulse"). - Leave
Privilege Separation
checked. ClickAdd
. - Important: Copy the
Secret
value immediately. It's shown only once.
- Go to
- Assign permissions (to User and Token):
- Go to
Datacenter
→Permissions
. - Add User Permission: Click
Add
→User Permission
. Path:/
, User:pulse-monitor@pam
, Role:PVEAuditor
, checkPropagate
. ClickAdd
. - Add Token Permission: Click
Add
→API Token Permission
. Path:/
, API Token:pulse-monitor@pam!pulse
, Role:PVEAuditor
, checkPropagate
. ClickAdd
. - Note: The
PVEAuditor
role at the root path (/
) withPropagate
is crucial.
- Go to
- Update
.env
: SetPROXMOX_TOKEN_ID
(e.g.,pulse-monitor@pam!pulse
) andPROXMOX_TOKEN_SECRET
(the secret you copied).
If monitoring PBS, create a token within the PBS interface.
Steps to Create a PBS API Token (Click to Expand)
- Log in to the Proxmox Backup Server web interface.
- Create a dedicated user (optional but recommended):
- Go to
Configuration
→Access Control
→User Management
. - Click
Add
. EnterUser ID
(e.g., "pulse-monitor@pbs"), set Realm (likelypbs
), add password. ClickAdd
.
- Go to
- Create an API token:
- Go to
Configuration
→Access Control
→API Token
. - Click
Add
. - Select
User
(e.g., "pulse-monitor@pbs") orroot@pam
. - Enter
Token Name
(e.g., "pulse"). - Leave
Privilege Separation
checked. ClickAdd
. - Important: Copy the
Secret
value immediately.
- Go to
- Assign permissions:
- Go to
Configuration
→Access Control
→Permissions
. - Click
Add
→API Token Permission
. - Path:
/
(root level). - API Token: Select the token (e.g., "pulse-monitor@pbs!pulse").
- Role:
Audit
. - Check
Propagate
. ClickAdd
. - Note: The
Audit
role at root path (/
) is needed for read-only access.
- Go to
- Update
.env
: SetPBS_TOKEN_ID
(e.g.,pulse-monitor@pbs!pulse
) andPBS_TOKEN_SECRET
.
- Proxmox VE: The
PVEAuditor
role assigned at path/
withPropagate
enabled is recommended.Permissions included in PVEAuditor (Click to Expand)
- `Datastore.Audit` - `Permissions.Read` (implicitly included) - `Pool.Audit` - `Sys.Audit` - `VM.Audit` - Proxmox Backup Server: The
Audit
role assigned at path/
withPropagate
enabled is recommended.
Choose one of the following methods to deploy Pulse.
Using Docker Compose is the recommended way for most users.
Prerequisites:
- Docker (Install Docker)
- Docker Compose (Install Docker Compose)
Steps:
- Configure Environment: Ensure your
.env
file is created and configured as described in Configuration. - Run: In the project root directory, run:
This downloads the
docker compose up -d
rcourtman/pulse:latest
image and starts the container in the background. - Access: Open
http://<your-host-ip>:7655
(or the host port mapped indocker-compose.yml
).
Stopping:
docker compose down
Note: Restart the container (docker compose down && docker compose up -d
) if you change .env
after starting.
Alternative: Inline Variables in `docker-compose.yml` (Click to Expand)
You can define environment variables directly in docker-compose.yml
instead of using .env
. Replace placeholder values before running docker compose up -d
.
version: '3.8'
services:
pulse:
image: rcourtman/pulse:latest
container_name: pulse_monitor
restart: unless-stopped
ports:
- "7655:7655" # Map container port 7655 to host port 7655
environment:
# --- Required Proxmox Connection Details ---
PROXMOX_HOST: "https://your-proxmox-ip-or-hostname:8006"
PROXMOX_TOKEN_ID: "your-user@pam!your-token-name"
PROXMOX_TOKEN_SECRET: "your-api-token-secret-uuid"
# --- Optional Settings ---
PROXMOX_ALLOW_SELF_SIGNED_CERTS: "false"
# PBS_HOST: "https://your-pbs-ip:8007"
# PBS_TOKEN_ID: "your-pbs-user@pbs!token"
# PBS_TOKEN_SECRET: "your-pbs-secret"
# PBS_NODE_NAME: "your-pbs-hostname"
# Optional: Mount a local directory for potential future config needs
# volumes:
# - ./pulse_config:/config
networks:
default:
driver: bridge
An installation script is available for setting up Pulse inside an existing Debian/Ubuntu-based Proxmox VE LXC container.
Prerequisites:
- A running Proxmox VE host.
- An existing Debian or Ubuntu LXC container with network access to Proxmox.
- Tip: Use Community Scripts to easily create one:
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/debian.sh)"
- Tip: Use Community Scripts to easily create one:
Steps:
- Access LXC Console: Log in to your LXC container (usually as
root
). - Download and Run Script:
# Ensure you are in a suitable directory, like /root or /tmp curl -sLO https://raw.githubusercontent.com/rcourtman/Pulse/main/scripts/install-pulse.sh chmod +x install-pulse.sh ./install-pulse.sh
- Follow Prompts: The script guides you through:
- Installing dependencies (
git
,curl
,nodejs
,npm
,sudo
). - Entering your Proxmox Host URL, API Token ID, Secret, and self-signed cert preference.
- (Optional) Entering PBS connection details if desired.
- Setting up Pulse as a
systemd
service (pulse-monitor.service
). - Optionally enabling automatic updates via cron.
- Installing dependencies (
- Access Pulse: The script will display the URL (e.g.,
http://<LXC-IP-ADDRESS>:7655
).
Updating and Managing the LXC Installation (Click to Expand)
Updating Pulse:
Re-run the script from the directory where you downloaded it:
./install-pulse.sh
Or run non-interactively (e.g., for cron):
./install-pulse.sh --update
Managing the Pulse Service:
Use standard systemctl
commands:
- Check Status:
sudo systemctl status pulse-monitor.service
- Stop Service:
sudo systemctl stop pulse-monitor.service
- Start Service:
sudo systemctl start pulse-monitor.service
- View Logs:
sudo journalctl -u pulse-monitor.service -f
- Enable/Disable on Boot:
sudo systemctl enable/disable pulse-monitor.service
Automatic Updates:
If enabled via the script, a cron job runs ./install-pulse.sh --update
Daily/Weekly/Monthly. Logs are in /var/log/pulse_update.log
. Manage with sudo crontab -l -u root
or sudo crontab -e -u root
.
For development purposes or running directly from source, see the DEVELOPMENT.md guide. This involves cloning the repository, installing dependencies using npm install
in both the root and server
directories, and running npm run dev
or npm run start
.
- Lightweight monitoring for Proxmox VE nodes, VMs, and Containers.
- Real-time status updates via WebSockets.
- Simple, responsive web interface.
- Efficient polling: Stops API polling when no clients are connected.
- Docker support.
- Multi-environment PVE monitoring support.
- Proxmox Backup Server (PBS) monitoring support.
- LXC installation script.
- Node.js: Version 18.x or later (if building/running from source).
- NPM: Compatible version with Node.js.
- Docker & Docker Compose: Latest stable versions (if using container deployment).
- Proxmox VE: Version 7.x or 8.x recommended.
- Proxmox Backup Server: Version 2.x or 3.x recommended (if monitored).
- Web Browser: Modern evergreen browser.
Contributions are welcome! Please read our Contributing Guidelines.
- No Data Collection: Pulse does not collect or transmit any telemetry or user data externally.
- Local Communication: Operates entirely between your environment and your Proxmox/PBS APIs.
- Credential Handling: Credentials are used only for API authentication and are not logged or sent elsewhere.
This project is licensed under the MIT License - see the LICENSE file.
Proxmox® and Proxmox VE® are registered trademarks of Proxmox Server Solutions GmbH. This project is not affiliated with or endorsed by Proxmox Server Solutions GmbH.
File issues on the GitHub repository.
If you find Pulse useful, consider supporting its development:
Common connection issues:
- Pulse Application Logs: Check container logs (
docker logs pulse_monitor
) or service logs (sudo journalctl -u pulse-monitor.service -f
) for errors (401 Unauthorized, 403 Forbidden, connection refused, timeout). .env
Configuration: VerifyPROXMOX_HOST
,PROXMOX_TOKEN_ID
,PROXMOX_TOKEN_SECRET
, andPROXMOX_ALLOW_SELF_SIGNED_CERTS
. For PBS, also checkPBS_HOST
,PBS_TOKEN_ID
,PBS_TOKEN_SECRET
,PBS_ALLOW_SELF_SIGNED_CERTS
, and especiallyPBS_NODE_NAME
. Ensure no placeholder values remain.- Network Connectivity: Can the machine running Pulse reach the PVE/PBS hostnames/IPs and ports (usually 8006 for PVE, 8007 for PBS)? Check firewalls.
- API Token Permissions: Ensure the correct roles (
PVEAuditor
for PVE,Audit
for PBS) are assigned at the root path (/
) withPropagate
enabled in the respective UIs.