
可观测性运维后端【免费下载链接】PulseReal-time monitoring dashboard for Proxmox VE, PBS, Docker, Kubernetes, TrueNAS and vSphere. Self-hosted, with smart alerts and AI patrols that catch silent failures.项目地址https://gitcode.com/gh_mirrors/pulse27/Pulse点击查看免费下载本文基于 Pulse 仓库中的安装文档frontend-modern/public/docs/INSTALL.md整理并纵深展开覆盖 Pulse 监控平台的四种安装方式Proxmox VE LXC 官方安装器、Docker、Docker Compose、Kubernetes Helm、裸机/Systemd 签名安装器、首次运行的 Bootstrap Token 管理员初始化流程以及更新、回滚与数据保全式卸载的完整操作规范。读完本文你可以独立完成一台 Pulse 服务器从部署到告警接入的全流程并在源码层面理解其默认安全设计的具体实现。一、部署方式总览与 Pro/Community 构建边界Pulse 提供从 Docker 到企业级 Kubernetes Chart 的多种安装路径。在开始之前必须先明确一个容易混淆的边界GitHub release 资产与公开的rcourtman/pulseDocker 镜像属于 Community 构建。它们可以接受激活密钥但不包含私有 Pulse Pro 运行时钩子private runtime hooks。付费的 Pulse Pro / Relay / legacy 用户应通过官方下载页获取私有 Pulse Pro Docker 镜像或 Linux 归档。对 Docker Compose 场景文档建议使用PULSE_IMAGE感知的镜像写法下文 Compose 示例已体现或将写死的rcourtman/pulse镜像行替换为私有镜像。这个区分直接影响后续的更新操作如果实例运行的是私有 Pro 运行时把它替换成 GitHub 公开资产或rcourtman/pulse镜像会丢失私有运行时钩子。Windows 代码签名现状Pulse 于 2026-08-06 被 SignPath Foundation 开源计划接收公共仓库已接入其 SignPath 项目。但生产发布证书仍处于CSR PENDING待签发状态因此Windows 社区发布工件在证书激活且生产证明跑non-publishing production proof run通过之前保持未签名。要点如下Release notes 会明确标注哪些 Windows 工件未经 Authenticode 签名已发布的校验和checksums与分离式 Pulse 签名detached Pulse signatures始终是强制项测试签名的工件使用不可信证书绝不会被发布为生产版本。构建溯源、审批角色、签名范围与报告要求详见 Code Signing Policy。二、验证发布构建溯源Sigstore Provenance新版 release packet 中包含release-build-provenance.sigstore.json这是托管工作流在组装并验证发布候选时产生的 Sigstore 捆绑包。使用 GitHub CLI 2.97.0 或更高版本可以把下载的资产与确切的工作流 release 源提交进行绑定验证export PULSE_VERSIONvX.Y.Z export PULSE_ASSETpulse-vX.Y.Z-linux-amd64.tar.gz gh release download ${PULSE_VERSION} --repo rcourtman/Pulse \ --pattern ${PULSE_ASSET} \ --pattern release-build-provenance.sigstore.json SOURCE_SHA$(gh api repos/rcourtman/Pulse/releases/tags/${PULSE_VERSION} \ --jq .target_commitish) printf %s\n ${SOURCE_SHA} release-source-sha.txt gh attestation verify ${PULSE_ASSET} \ --repo rcourtman/Pulse \ --bundle release-build-provenance.sigstore.json \ --signer-workflow github.com/rcourtman/Pulse/.github/workflows/build-release-candidate.yml \ --source-digest ${SOURCE_SHA} \ --deny-self-hosted-runners \ --predicate-type https://slsa.dev/provenance/v1各参数的作用值得逐条理解--signer-workflow把资产锚定到具体生成它的工作流而非泛泛地信任某个仓库--source-digest ${SOURCE_SHA}要求资产由该 release 标签的target_commitish源码提交构建而来防止换源构建--deny-self-hosted-runners拒绝自托管 runner 产生的证明收紧构建环境可信面--predicate-type https://slsa.dev/provenance/v1采用 SLSA Provenance v1 谓词做判定。离线环境的可信根处理对于无法联网的目标机需要额外执行离线信任根流程在有网的可信机器上运行gh attestation trusted-root trusted_root.jsonl将该文件与资产、release-build-provenance.sigstore.json捆绑包、release-source-sha.txt一起传输到离线目标在离线目标上恢复SOURCE_SHA$(cat release-source-sha.txt)并在验证命令中追加--custom-trusted-root trusted_root.jsonl。一个重要限制每次导入新签名材料时都应刷新可信根副本——旧副本无法反映其后发生的密钥吊销或轮换。三、安装方式3.1 Proxmox VELXC 官方安装器推荐在 Proxmox 环境中最原生的部署方式是官方安装器它会在 Proxmox 主机上创建并配置一个轻量 LXC 容器。把vX.Y.Z替换为要部署的确切 release 标签在 Proxmox 主机上执行( set -e export PULSE_VERSIONvX.Y.Z pulse_installer_dir$(mktemp -d) trap rm -rf $pulse_installer_dir EXIT cd $pulse_installer_dir 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 namespacespulse-install ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMZd/DaHBldzOkq1A8KVTcFk73nAyrE8aJOyf7i00jm pulse-installer) \ -I pulse-installer \ -n pulse-install \ -s install.sh.sshsig install.sh bash install.sh --version ${PULSE_VERSION} )这段脚本的每一步都值得注意set -e加临时目录trap清理保证失败即中止、不留垃圾同时下载install.sh与install.sh.sshsig两个文件用ssh-keygen -Y verify以带命名空间namespacespulse-install的 Ed25519 公钥验证安装器签名验证不通过则不会进入bash install.sh--version ${PULSE_VERSION}锁定确切版本避免安装器自行选择最新资产。文档还强调了三个操作纪律签名版服务器安装器所用的vX.Y.Zrelease包含 Linux 服务器归档不需要 GitHub personal access token。而helm-chart-*release 只包含 Kubernetes Chart不包含该归档。如果某个辅助脚本选错了 Helm Chart release 或索要 GitHub token应当停止而不是盲目重试在 Proxmox 主机上先执行pct list检查是否已有半成品 Pulse 容器不要在未确认状态的情况下对既有容器重跑全新安装器区分两个安装器GitHub 上的install.sh是服务器安装器agent 安装器由 Pulse 服务器在/install.sh端点提供见Settings → Infrastructure → Install on a host。不要用 GitHub 服务器安装器去安装或更新pulse-agent。3.2 Docker快速体验适合容器化环境或测试docker run -d \ --name pulse \ -p 7655:7655 \ -v pulse_data:/data \ -e PULSE_DEPLOYMENT_METHODdocker_run \ --restart unless-stopped \ rcourtman/pulse:vX.Y.Z参数说明-p 7655:7655Pulse 的默认前端端口是7655这在源码中是显式默认值——配置定义 中FrontendPort int \envconfig:FRONTEND_PORT default:7655[默认值构造](https://link.gitcode.com/i/50a8cc5411cb9ced6437714974874fed) 同样写入7655可用FRONTEND_PORT 环境变量覆盖-v pulse_data:/data命名卷承载全部持久化状态配置、历史、凭据、数据加密密钥务必保留-e PULSE_DEPLOYMENT_METHODdocker_run部署方式标识。从源码看遥测模块对它是封闭枚举而非自由文本——internal/telemetry/telemetry.go 中DeploymentMethod string \json:deployment_method的注释明确写着 Closed coarse install method, never a path or image name封闭的粗粒度安装方式绝不接受路径或镜像名合法取值包括docker_compose、docker_run、systemd 等并带有归一化逻辑测试 deployment method 分类 覆盖了大小写/空格归一化与拒绝自由文本值的分支。对新容器接下来在浏览器中完成 Bootstrap Token 初始化即可不要在命令里塞示例密码。3.3 Docker Compose创建docker-compose.ymlservices: 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_METHODdocker_compose volumes: pulse_data:该写法中的${PULSE_IMAGE:-...}变量是关键设计付费 Docker 用户可以在不重构 compose 文件的前提下通过设置PULSE_IMAGE切换到私有 Pulse Pro 镜像从而复用同一部署路径。文档在此处给出了明确的安全告诫新安装应保持认证覆盖项不设置在浏览器里完成 Bootstrap Token 流程不要部署共享的示例密码自动化必须跳过设置流程时应使用私有部署托管的凭据来源。认证指南 CONFIGURATION.md 的 private Docker authentication file 章节解释了可见性与覆盖限制其中docker run --env-file示例不是Compose 插值配方对既有安装保留其镜像、数据挂载与托管配置不要通过重置认证来重复首次设置一个容易忽视的细节部署注入的密码优先于 Pulse 密码修改 UI 中的变更。把密码在 Pulse 内部哈希并不能让原始值从 Docker 环境或部署文件中消失也绝不要分享完整的docker inspect或 Compose 解析输出。注意Docker 监控需要在 Docker 宿主机上运行统一 agent 并授予 socket 访问权限Pulse 服务器容器本身不需要/var/run/docker.sock。参见 UNIFIED_AGENT.md。3.4 KubernetesHelmhelm repo add pulse https://rcourtman.github.io/Pulse helm repo update helm upgrade --install pulse pulse/pulse \ --namespace pulse \ --create-namespaceIngress 与持久化的完整配置见 KUBERNETES.md。其中持久化行为在卸载章节有专门警示见 6.3 节部署前务必先阅读。3.5 裸机 / Systemd在 Linux 服务器虚拟机或裸机上使用官方签名安装器流程与 3.1 的 Proxmox 版一致区别仅在最后一步使用sudo( set -e export PULSE_VERSIONvX.Y.Z pulse_installer_dir$(mktemp -d) trap rm -rf $pulse_installer_dir EXIT cd $pulse_installer_dir 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 namespacespulse-install ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMZd/DaHBldzOkq1A8KVTcFk73nAyrE8aJOyf7i00jm pulse-installer) \ -I pulse-installer \ -n pulse-install \ -s install.sh.sshsig install.sh sudo bash install.sh --version ${PULSE_VERSION} )注意这里安装的是 Pulse服务器。在监控主机上安装或升级pulse-agent应使用Settings → Infrastructure → Install on a host生成的/install.sh端点。手动 / 自定义 systemd 服务进阶对新 Pulse 服务器文档的立场很明确使用上述签名安装器而不是拷贝一个二进制再手写最小 service 单元。安装器会创建pulse服务账户、准备 release 树与数据目录属主、并一起安装服务器服务与更新资产。其服务器单元默认带有完整沙箱Userpulse Grouppulse NoNewPrivilegestrue PrivateTmptrue ProtectSystemstrict ProtectHometrue写权限被限制在安装目录与数据目录内。Pulse 服务器不需要root 服务独立的宿主机 agent 有不同的权限需求见 Agent Security。对既有的手动或自定义安装先做只读检查该命令不打印环境变量值或凭据systemctl show pulse.service \ --propertyLoadState \ --propertyUser \ --propertyGroup \ --propertyNoNewPrivileges \ --propertyPrivateTmp \ --propertyProtectSystem \ --propertyProtectHome结果解读规则若你的服务单元名不同请替换为实际名称老安装可能叫pulse-backend.service仅在LoadStateloaded时才解读上述属性LoadStatenot-found只表示所选单元缺失不代表 root 服务正在运行对已加载服务空的User意味着 systemd 以 root 运行它缺失的加固不会靠下载新二进制自动修复安装器在更新时保留既有服务单元包括自定义单元。因此不要覆写可工作的单元、不要只改服务用户、也不要为对齐这些设置而对既有数据目录重装。迁移前应遵循 恢复指南保留数据目录与其加密密钥私密记录生效中的数据路径与部署托管配置确认目标服务账户可访问这些状态并确认所选沙箱下必要集成仍然可用。不要用放宽数据权限、移除认证或分享完整单元/环境转储来走捷径。四、首次配置Bootstrap Token 创建管理员账户Pulse 默认安全首次启动必须获取Bootstrap Token才能创建管理员账户。4.1 获取 Token平台命令Dockerdocker exec pulse /app/pulse bootstrap-tokenDocker 应用 UIUnraid、Portainer、TrueNAS apps打开 Pulse 容器控制台执行/app/pulse bootstrap-tokenKuberneteskubectl exec -it pod -- /app/pulse bootstrap-tokenSystemdsudo pulse bootstrap-tokenProxmox LXCpct exec ctid -- /usr/local/bin/pulse bootstrap-token在 Proxmox 主机上执行安装器结束时会连同容器 ID 一起打印这条命令Proxmox 路径必须写绝对路径pct exec的PATH/sbin:/bin:/usr/sbin:/usr/bin不含/usr/local/bin裸pulse会报No such file or directory。重要请粘贴上述命令打印的 token 字符串而不要直接粘贴.bootstrap_token文件的原始内容。在 v6 中该文件存放的可能是加密后的 JSON 快照而非可直接使用的设置令牌。这一点在源码中得到印证。Token 的落盘实现在 internal/bootstrap/token_store.go文件名常量TokenFilename .bootstrap_token第 17 行固定存放在数据目录下持久化格式版本为 2persistedFormatVersion 2记录结构persistedToken同时保存token_ciphertext经 crypto 管理器 加密的密文与token_hashHashAPIToken派生的哈希写入时先落.tmp再os.Rename原子替换并Chmod 0o600收紧权限Persist 函数读取端 loadEncryptedRecord 会解密密文并校验哈希一致性不一致直接报bootstrap token hash mismatch。这解释了为什么直接读文件得到的是 JSON 快照而非可用 token旧的纯文本 token 文件会被自动迁移为加密格式loadFromBytes 中migrated分支。服务端的初始化逻辑在 internal/api/bootstrap_token.goToken 由crypto/rand生成 24 字节随机数再十六进制编码generateBootstrapToken即 48 个 hex 字符若已有任一认证机制配置PULSE_AUTH_USER/PULSE_AUTH_PASS、API tokens、代理认证 secret、hosted 模式或启用的 SSO 提供程序陈旧 bootstrap token 会被清除——这就是 INSTALL.md 中通过环境变量配置认证后 bootstrap 步骤被跳过的实现Token 验证接口带按客户端 IP 的速率限制NewRateLimiter(10, 5*time.Minute)5 分钟窗口内 10 次超限返回429 Too Many Requests与Retry-After头防止暴力猜测。4.2 创建管理员账户打开http://your-ip:7655粘贴Bootstrap Token完成Quick Security Setup向导设置管理员用户名与密码或让 Pulse 生成Pulse 会为 agent 与自动化生成API token离开页面前复制好凭据打开Settings → Infrastructure → Install on a host仅在需要 agent 遥测的宿主机上安装统一 agent。对 Proxmox若清单、节点状态、VM/容器状态与存储指标已经够用就从纯 API 监控起步只有需要 guest 内 Docker/Podman 可见性、宿主机 SMART/温度数据、本地 ZFS/Ceph/mdadm 详情等需要本地主机访问的遥测时才部署 agent。参见 Agent Security。注意如果通过环境变量PULSE_AUTH_USER/PULSE_AUTH_PASS配置了认证bootstrap token 会被自动移除此步骤整体跳过——与上文源码中已有认证机制即清除 token的行为一一对应。五、更新服务器与 Agent 是两条独立的更新路径Pulse 服务器与已安装的 Pulse Agent 的更新路径相互独立。5.1 服务器自动更新仅 Systemd/LXCPulse 可将服务器运行时自动更新到最新稳定版开启入口Settings → System → Updates。5.2 服务器手动更新平台命令Dockerdocker compose pull docker compose up -dKuberneteshelm repo update helm upgrade pulse pulse/pulse -n pulseSystemd / Proxmox LXCPulse 自有 helpersudo /bin/update对/bin/update的使用有严格前提只有当该 helper 由 Pulse 服务器安装器安装时才可以用/bin/update --version vX.Y.Z指定确切目标版本在 Proxmoxcommunity-scripts容器中/bin/update可能属于另一个更新器会忽略--version若 helper 不存在或归属不明回到 3.5 的签名服务器安装器流程把PULSE_VERSION设为确切目标标签同样的归属检查同样适用于回滚服务重启后用GET /api/version核实实际运行版本。不用 Compose 的裸docker run部署有一个常见陷阱docker restart会继续运行旧镜像。正确流程是docker pull rcourtman/pulse:vX.Y.Z然后docker stop pulse docker rm pulse再重新执行你最初的docker run命令。再次强调构建边界上述公开镜像与命令安装的是 Community 运行时若实例使用私有 Pro 运行时请保持私有镜像或归档不变。5.3 Agent 更新具备资格的 v6 agent 会向 Pulse 服务器查询更新并异步应用因此服务器版本是最新的并不证明所有 agent 都是最新的。以下情况需要人工处理v5 agent、PVE host agent、禁用了自动更新的 agent以及认证、连接状态、下载、信任或自检任一环节失败的 agent。操作路径打开过时 agent 通知或使用/settings/infrastructure?agentDoctor1的Agent Doctor审阅 Pulse 当前看到的 agent 列表并逐台复制平台专属命令。注意该页面只提供供运维人员在宿主机上执行的命令不会远程执行更新首次安装或 v5 到 v6 的原地升级使用Settings → Infrastructure → Install on a host。5.4 回滚更新报错本身不能确定当前运行的是哪个版本——重试或回滚之前先核实运行版本与服务健康并保留失败的现场安装目录与更新日志。文档特别区分了两类快照应用内更新快照与更新器脚本备份的内容和生命周期各不相同二者都不保证覆盖全部生效数据旧二进制也可能无法理解新版本迁移后的数据。Update History 不是全状态恢复工具记录在案的备份路径也不等于完整备份的证据。数据需要恢复时参考 版本专属快照范围 与 停止服务的恢复程序原文档对应 what an update snapshot contains 与 manual rollback 两节数据与密钥必须成对保留私密验证备份保留失败状态的可逆副本不要替换或删除线上运行数据来迁就回滚。六、卸载默认保留数据移除或停止 Pulse 服务器会同时停止监控与告警投递——这不是更新、回滚或密码重置流程。默认保留持久化数据删除它会抹掉配置、历史、凭据以及解密该安装数据所需的密钥。动手前私密地确认实际的服务/容器/Helm release 以及每一个生效的数据路径保留一份一致、私密的全状态备份含匹配的加密密钥与部署配置——仅导出配置不等于完整备份。有进行中的 Pulse 更新时先让它完成再移除安装。不要在 issue 中粘贴备份、环境文件或完整容器检查输出。6.1 Docker / Compose保留数据挂载以下命令假设/data位于持久命名卷或 bind mount 上如本文示例。在仅有容器可写层或临时存储承载状态、且尚未有一致备份之前不要使用这些命令。用--rm创建的容器在停止时还可能连带删除匿名卷——删除容器不等于备份。docker run部署先正常停止再移除docker stop pulse docker rm pulseCompose 部署从既有项目内、使用其实际服务名执行docker compose stop pulse docker compose rm pulse这些命令不请求删除卷。请保留命名卷或 bind 目录、原始镜像/运行时与部署设置重装必须重新挂载同一个数据挂载。注意 Compose 通常会给卷名加项目名前缀——新建项目或空的pulse_data卷可能造成假性数据丢失。在保留数据的移除流程中不要加-v/--volumes、不要删除卷、不要执行卷清理。6.2 Kubernetes先核实 PVC 归属再 uninstall不要默认helm uninstall pulse -n pulse会保留数据。从 Chart 默认行为看默认 Pulse Chart 创建的 PersistentVolumeClaim没有 keep 策略Helm 移除可能删除该 PVC而存储的 reclaim 策略可能随之删除底层数据persistence.existingClaim指向的是独立管理的 PVC其生命周期需单独核实persistence.enabledfalse时 Chart 使用临时emptyDir存储pod 移除即丢失。核实好持久化存储与备份后可以不卸载 Chart 而只停掉默认 Deploymentkubectl scale deployment pulse \ --namespace pulse \ --replicas0使用实际的 Deployment 与命名空间记录之前的副本数并暂停会重建 pod 的控制器。永久卸载前核实生效 PVC 的归属、保留策略与回收策略并从私密备份实测恢复不要把删除 PVC 或命名空间当作排障手段。6.3 Systemd / Proxmox LXC禁用而不抹数据先识别生效的服务与更新器老安装可能叫pulse-backend自定义安装可能另有其名。LXC 场景下这些步骤要在Pulse 容器内部执行而不是在 Proxmox 主机上。对默认签名安装若更新计时器存在先禁用sudo systemctl disable --now \ pulse-update.timer然后停止并禁用服务器sudo systemctl disable --now \ pulse.service其他部署托管的更新器也应由其归属方一并禁用。这些命令会保留二进制、服务账户、单元与数据——它们禁用了 Pulse而非彻底卸载。把/etc/pulse或实际自定义数据目录、密钥与认证来源作为一组保留在需要属主的文件还在时不要删除服务账户。彻底移除是另一项有破坏性的独立决策签名服务器安装器的--uninstall会删除其配置/数据目录且没有保留数据提示不是数据保全的替代方案仅在确认生效的安装/配置路径、完成并验证过私密备份、且确实打算抹除数据时才使用它。在删除/bin/update之前必须确认它确实属于 Pulse——community-scripts 容器可能使用其他 helper。最后提醒移除服务器不会移除监控主机上的 agent。请按各 agent 的卸载流程处理或参照孤儿 agent 的停止方法避免它们继续重试连接已不存在的服务器。七、延伸阅读配置与环境变量CONFIGURATION.mdKubernetes Ingress 与持久化KUBERNETES.mdDocker 细节DOCKER.md统一 Agent 与主机侧权限UNIFIED_AGENT.md、AGENT_SECURITY.md自动更新与回滚AUTO_UPDATE.md状态迁移与恢复MIGRATION.md、RECOVERY.md签名与发布流程CODE_SIGNING_POLICY.md、RELEASE_PROCESS.md赞分享可观测性运维后端【免费下载链接】PulseReal-time monitoring dashboard for Proxmox VE, PBS, Docker, Kubernetes, TrueNAS and vSphere. Self-hosted, with smart alerts and AI patrols that catch silent failures.项目地址https://gitcode.com/gh_mirrors/pulse27/Pulse点击查看免费下载相关推荐Pulse 安装部署全指南从 Docker、Proxmox LXC 到 Kubernetes 的完整安装、验证与升级实操Pulse 安装部署全指南从 Docker、Proxmox LXC 到 Kubernetes 的完整安装、验证与升级实操 导读 Pulse 是一款面向 Pro可观测性运维后端QUANTAXIS 2.1.0 分布式部署实战指南从 Docker Compose 到 Kubernetes 与 Helm 的全栈落地QUANTAXIS 2.1.0 分布式部署实战指南从 Docker Compose 到 Kubernetes 与 Helm 的全栈落地 QUANTAXIS 是金融科技后端数据分析Pulse 的 Docker 部署完全指南安装、配置、容器 CPU 解读与更新安全实践Pulse 的 Docker 部署完全指南安装、配置、容器 CPU 解读与更新安全实践 Pulse 是一款面向 Proxmox VE、PBS、Docker、K可观测性运维后端上一篇Sunshine游戏串流完整指南5步搭建个人云游戏服务器下一篇3步构建私有云游戏平台Sunshine硬件编码与跨设备串流技术深度解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考