π¦ Installation Guide
July 23, 2026 Β· View on GitHub
Pulse offers flexible installation options from Docker to enterprise-ready Kubernetes charts.
Paid Pulse Pro / Relay / legacy customers: GitHub release assets and the public
rcourtman/pulseDocker image are Community builds. They can accept an activation key, but they do not include the private Pulse Pro runtime hooks. Use https://pulserelay.pro/download.html with your activation key to get the private Pulse Pro Docker image or Linux archive. For Docker Compose, use thePULSE_IMAGE-aware image line shown below, or replace a hardcodedrcourtman/pulseimage line with the private image shown on the download page.
Windows code-signing status
Pulse is applying to the SignPath Foundation open-source programme. Once approved, Windows community release artifacts will use free code signing provided by SignPath.io, with the certificate issued by the SignPath Foundation. Until that integration is complete, release notes identify Windows artifacts that are not Authenticode-signed; published checksums and detached Pulse signatures remain mandatory.
See the Code Signing Policy for build provenance, approval roles, signing scope, and reporting requirements. Release downloads are published on the GitHub Releases page.
π Quick Start (Recommended)
Proxmox VE (LXC installer)
If you run Proxmox VE, the easiest and most βPulse-nativeβ deployment is the official installer which creates and configures a lightweight LXC container.
Replace vX.Y.Z with the exact release tag you want, then run this on your Proxmox host:
export PULSE_VERSION=vX.Y.Z
curl -fsSLO "https://github.com/rcourtman/Pulse/releases/download/${PULSE_VERSION}/install.sh"
curl -fsSLO "https://github.com/rcourtman/Pulse/releases/download/${PULSE_VERSION}/install.sh.sshsig"
ssh-keygen -Y verify \
-f <(printf '%s\n' 'pulse-installer namespaces="pulse-install" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMZd/DaH+BldzOkq1A8KVTcFk73nAyrE8aJOyf7i00jm pulse-installer') \
-I pulse-installer \
-n pulse-install \
-s install.sh.sshsig < install.sh
bash install.sh --version "${PULSE_VERSION}"
rm -f install.sh install.sh.sshsig
Note: The GitHub
install.shis the server installer. The agent installer is served from your Pulse server at/install.sh(see Settings β Infrastructure β Install on a host). Do not use the GitHub server installer to install or updatepulse-agent.
Docker
Ideal for containerized environments or testing.
docker run -d \
--name pulse \
-p 7655:7655 \
-v pulse_data:/data \
-e PULSE_DEPLOYMENT_METHOD=docker_run \
--restart unless-stopped \
rcourtman/pulse:vX.Y.Z
Docker Compose
Create a docker-compose.yml file:
services:
pulse:
image: ${PULSE_IMAGE:-rcourtman/pulse:vX.Y.Z}
container_name: pulse
restart: unless-stopped
ports:
- "7655:7655"
volumes:
- pulse_data:/data
environment:
- PULSE_DEPLOYMENT_METHOD=docker_compose
- PULSE_AUTH_USER=admin
- PULSE_AUTH_PASS=secret123
volumes:
pulse_data:
The PULSE_IMAGE variable lets paid Docker users switch the same compose file
to the private Pulse Pro image shown on
https://pulserelay.pro/download.html without rebuilding the file around a
second deployment path.
Note: Plain text passwords set via
PULSE_AUTH_PASSare auto-hashed on startup. For production, prefer Quick Security Setup or a pre-hashed bcrypt value. Note: Docker monitoring requires the unified agent on the Docker host with socket access; the Pulse server container does not need/var/run/docker.sock. See UNIFIED_AGENT.md.
π οΈ Installation Methods
1. Kubernetes (Helm)
Deploy to your cluster using our Helm chart.
helm repo add pulse https://rcourtman.github.io/Pulse
helm repo update
helm upgrade --install pulse pulse/pulse \
--namespace pulse \
--create-namespace
See KUBERNETES.md for ingress and persistence configuration.
2. Bare Metal / Systemd
For Linux servers (VM or bare metal), use the official installer:
export PULSE_VERSION=vX.Y.Z
curl -fsSLO "https://github.com/rcourtman/Pulse/releases/download/${PULSE_VERSION}/install.sh"
curl -fsSLO "https://github.com/rcourtman/Pulse/releases/download/${PULSE_VERSION}/install.sh.sshsig"
ssh-keygen -Y verify \
-f <(printf '%s\n' 'pulse-installer namespaces="pulse-install" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMZd/DaH+BldzOkq1A8KVTcFk73nAyrE8aJOyf7i00jm pulse-installer') \
-I pulse-installer \
-n pulse-install \
-s install.sh.sshsig < install.sh
sudo bash install.sh --version "${PULSE_VERSION}"
rm -f install.sh install.sh.sshsig
Note: This installs the Pulse server. Use the
/install.shendpoint from Settings β Infrastructure β Install on a host for installing or upgradingpulse-agenton monitored hosts.
Manual systemd install (advanced)
# Download and extract the architecture-specific tarball from GitHub Releases:
# https://github.com/rcourtman/Pulse/releases
# e.g.
# curl -fsSLO "https://github.com/rcourtman/Pulse/releases/download/${PULSE_VERSION}/pulse-${PULSE_VERSION}-linux-amd64.tar.gz"
# tar -xzf "pulse-${PULSE_VERSION}-linux-amd64.tar.gz"
# The extracted tree contains ./bin/pulse plus ./bin/pulse-agent-* and ./scripts/.
sudo install -m 0755 bin/pulse /usr/local/bin/pulse
# Create systemd service
sudo tee /etc/systemd/system/pulse.service > /dev/null << 'EOF'
[Unit]
Description=Pulse Monitoring
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/pulse
Restart=always
RestartSec=10
Environment=PULSE_DATA_DIR=/etc/pulse
[Install]
WantedBy=multi-user.target
EOF
# Start service
sudo mkdir -p /etc/pulse
sudo systemctl daemon-reload
sudo systemctl enable --now pulse
π First-Time Setup
Pulse is secure by default. On first launch, you must retrieve a Bootstrap Token to create your admin account.
Step 1: Get the Token
| Platform | Command |
|---|---|
| Docker | docker exec pulse /app/pulse bootstrap-token |
| Kubernetes | kubectl exec -it <pod> -- /app/pulse bootstrap-token |
| Systemd | sudo pulse bootstrap-token |
| Proxmox LXC | pct exec <ctid> -- pulse bootstrap-token (run on the Proxmox host; the installer prints this command with your container ID at the end of the install) |
Important: Paste the token string printed by the command above. Do not paste the raw
.bootstrap_tokenfile contents directly. In v6 that file may contain an encrypted JSON snapshot rather than the usable setup token.
Step 2: Create Admin Account
- Open
http://<your-ip>:7655 - Paste the Bootstrap Token.
- Complete the Quick Security Setup wizard.
- Set your Admin Username and Password (or let Pulse generate one).
- Pulse generates an API token for agents and automations.
- Copy the credentials before leaving the page.
- Open Settings β Infrastructure β Install on a host and install the unified agent only on hosts where you need agent-provided telemetry. For Proxmox, start with API-only monitoring when inventory, node status, VM/container status, and storage metrics are enough; use agents for inside-guest Docker/Podman visibility, host SMART/temperature data, local ZFS/Ceph/mdadm detail, or other telemetry that requires local host access. See Agent Security.
Note: If you configure authentication via environment variables (
PULSE_AUTH_USER/PULSE_AUTH_PASS), the bootstrap token is automatically removed and this step is skipped.
π Updates
The Pulse server and installed Pulse Agents have independent update paths.
Pulse server updates
Automatic Updates (Systemd/LXC only)
Pulse can update the server runtime to the latest stable version.
Enable via UI: Settings β System β Updates
Manual Update
| Platform | Command |
|---|---|
| Docker | docker compose pull && docker compose up -d |
| Kubernetes | helm repo update && helm upgrade pulse pulse/pulse -n pulse |
| Systemd / Proxmox LXC | sudo /bin/update |
Docker without Compose: docker restart keeps the old image running. Run docker pull rcourtman/pulse:vX.Y.Z, then docker stop pulse && docker rm pulse and re-run your original docker run command.
The public image and commands above install the Community runtime. If the
instance uses the private Pro runtime, keep it on the private image or archive
shown by https://pulserelay.pro/download.html; replacing it with a public
GitHub asset or rcourtman/pulse image removes the private runtime hooks.
Pulse Agent updates
Eligible v6 agents check the Pulse server for updates and apply them asynchronously. A current server version therefore does not prove every agent is current. v5 agents, PVE host agents, agents with auto-update disabled, and agents whose authentication, connection state, download, trust, or self-test checks fail require manual handling.
Open an outdated-agent notice, or use Agent Doctor at
/settings/infrastructure?agentDoctor=1, to review the agents Pulse currently
sees and copy the platform-specific command for each host. This surface provides
commands for the operator to run on the host; it does not remotely execute the
update. Use Settings β Infrastructure β Install on a host for a first install
or a v5-to-v6 in-place upgrade.
Rollback
If an update causes issues on systemd installations, backups are created automatically during the update process.
Manual rollback: In-app updates store backups under /etc/pulse/backup-<timestamp>/. The systemd auto-update timer uses a temporary /tmp/pulse-backup-<timestamp> during the update and auto-restores on failure.
ποΈ Uninstall
Docker:
docker rm -f pulse && docker volume rm pulse_data
Kubernetes:
helm uninstall pulse -n pulse
Systemd:
sudo systemctl disable --now pulse
sudo rm -rf /etc/pulse /etc/systemd/system/pulse.service /usr/local/bin/pulse
sudo systemctl daemon-reload