新手也能上手的服务器监控方案:Docker 一键部署 Beszel

目前手里有几台 VPS,我希望能在一个页面上,统一查看这些服务器的运行情况,比如磁盘占用、内存使用率、CPU 负载等信息。
起初,我采用的是一个比较“原始”的方式:
通过 Termius 同时打开四个窗口,每个窗口连接一台 VPS,然后手动运行 htop,用这种方式来查看各台服务器的实时状态。
这种方式的优点是确实足够实时,服务器的 CPU、内存变化几乎可以立刻看到。但问题也很明显。

首先,这种方式非常不方便。
每次开关电脑,都需要重新连接服务器,并手动执行 htop 命令。虽然我知道可以把它设置成登录后自动运行,但整体体验依然不算好。
其次,它还有一个更致命的问题:
只能在特定的一台电脑上查看。
一旦换设备,或者不在这台电脑旁边,就没法随时了解这些 VPS 的运行状态。
也正因为这些原因,我开始考虑换一种方案:
在占用服务器性能尽量低的前提下,把所有 VPS 的运行状态,统一展示在一个网页上,这样无论用什么设备、在什么地方,都能随时查看。
至于“实时性”,我并没有特别苛刻的要求。
如果能做到秒级当然更好,但我也很清楚,实时数据传输必然意味着更高的资源占用。
所以我的取舍是:
优先低占用,其次是可视化,实时性可以适当让步。
哪怕有 10 秒左右的延迟,对我来说也是完全可以接受的。
在这个前提下,市面上其实已经有不少服务器监控方案,比如哪吒监控、Komari 等。这类方案往往能做到非常实时的监控,但相应地,也会占用更多的服务器资源。
而 Beszel 则是另一种思路。
它更偏向“轻量级服务器监控”,不追求秒级刷新,而是用更低的资源占用,换取一个清晰、直观的整体状态展示。
所以这件事本身没有对错,更多只是取舍问题:
如果你更看重实时性,那可以选择更重一点的监控方案;
如果你更在意轻量、低占用,那么 Beszel 可能会更适合。
其实在真正动手之前,我对 Beszel 多少有点顾虑。
因为只要是多台 VPS 统一监控,就意味着需要在每一台服务器上部署程序,还要进行连接配置,听起来就不像是一个“省事”的方案。
但真正研究了一下之后才发现,它的搭建过程比我想象中简单得多。
基本上只需要在每台 VPS 上安装 Docker,然后运行对应的容器,就可以完成部署。
接下来,就和大家分享一下,我是 如何搭建 Beszel – 这套轻量级服务器监控系统的。
- beszel 项目网站:https://beszel.dev/zh/
- beszel GitHub 地址:https://github.com/henrygd/beszel
Docker 一键部署 Beszel(面板端)
在开始之前,先简单说明一下我们的目标,避免后面操作时混乱。
部署目标说明
我们的目的很明确:
用 Beszel,在一台 VPS 上搭建监控面板,用来统一监控另外几台 VPS 的运行状态。
也就是说:
- 只需要 一台服务器 负责展示监控页面(面板)
- 每一台 VPS(包括面板那台)都运行一个 Agent
默认环境说明
下面的步骤基于一个最常见、也最容易复现的环境:
- 一共 3 台 VPS
- 系统为 Ubuntu 20.04 / 22.04 / 24.04
- 拥有
root权限,或可使用sudo - 已经安装 Docker
- 如果还没安装,可以用下面这条命令一键安装:
curl -fsSL https://get.docker.com | sh
- 如果还没安装,可以用下面这条命令一键安装:
Beszel 的整体结构
在真正开始之前,先看一下 Beszel 的基本架构,有个整体概念会更清晰。
Beszel 采用的是 1 个面板 + N 个 Agent 的结构:
VPS-A(面板服务器)
├─ Beszel Dashboard(Web 页面)
├─ Beszel Agent
│
VPS-B
└─ Beszel Agent
VPS-C
└─ Beszel Agent
简单理解就是:
- Dashboard(面板)
- 你在浏览器里看到的页面
- 只需要部署一次
- Agent
- 每台 VPS 都需要运行
- 包括面板服务器本身
选择一台 VPS 作为面板服务器
面板服务器其实 任选一台即可,不需要特殊配置。
下面为了方便说明,统一假设:
- 面板服务器:
VPS-1 - 被监控服务器:
VPS-1 / VPS-2 / VPS-3
接下来的操作,全部在 VPS-1 上进行。
第一步:创建 Beszel 项目目录
我个人习惯把 Docker 项目统一放在 /opt 目录下,方便管理。
如果你有自己的目录习惯,也可以自行调整。
mkdir -p /opt/beszel
cd /opt/beszel第二步:新建 Docker Compose 文件
在当前目录下创建 docker-compose.yml 文件:
nano docker-compose.yml将下面内容完整粘贴进去:
services:
beszel:
image: henrygd/beszel
container_name: beszel
restart: unless-stopped
ports:
- "8090:8090"
volumes:
- ./data:/beszel_data保存文件:
Ctrl + O→ 回车Ctrl + X退出编辑器
第三步:启动 Beszel 面板
在 /opt/beszel 目录下执行:
docker compose up -d如果没有报错,说明容器已经成功启动。
你也可以用下面的命令确认一下状态:
docker ps看到 beszel 容器处于 Up 状态即可。

第四步:访问面板页面
在浏览器中打开:
http://VPS-1的IP:8090如果页面可以正常打开,并显示 Beszel 的界面,说明:
✅ Beszel 面板已经部署完成
到这里,面板端的工作就结束了。

接下来要做的事情,就是在每一台 VPS 上部署 Beszel Agent,并将它们添加到面板中进行统一监控。
这一部分的操作,其实比你想象中还要简单。
在各台 VPS 上部署 Beszel Agent
在面板部署完成之后,接下来要做的事情就很清晰了:
在每一台需要被监控的 VPS 上运行 Beszel Agent。
这里需要注意一点:
包括面板服务器本身,也需要部署 Agent。
也就是说,如果你一共有 3 台 VPS,那么最终会有:
- 1 个 Beszel 面板
- 3 个 Beszel Agent
Agent 是做什么的?
简单说一句就够了:
- Agent 负责采集这台 VPS 的运行状态
(CPU、内存、磁盘、网络等) - 然后把这些数据发送给面板进行展示
Agent 本身非常轻量,不会常驻占用大量资源。
第一步:在面板中创建 Agent 信息
在真正到服务器上跑命令之前,先到 Beszel 面板里操作一次。
- 打开 Beszel 面板页面
http://VPS-1的IP:8090 - 点击页面中的 Add System / Add Agent / 添加客户端(不同版本/语言文字可能略有不同)
- 选择 Docker 作为部署方式
这一步完成后,面板会自动生成一段 docker run 命令,
里面会包含类似 KEY 之类的参数。


👉 这一段命令非常重要,后面要直接用到。
第二步:在 VPS 上运行 Agent 容器
接下来,登录到你需要监控的 VPS(比如 VPS-2、VPS-3)。
如果你是第一次部署,建议直接复制面板生成的 docker run 命令,然后在服务器上回车执行(提前安装上docker)。

如果你想提前了解结构,大致会是下面这种形式:
docker run -d \
--name beszel-agent \
--restart unless-stopped \
-v /:/host:ro \
-p 45876:45876 \
-e KEY="这里填写面板生成的 KEY" \
henrygd/beszel-agent其中几个关键参数简单说明一下:
-v /:/host:ro
把宿主机的系统信息挂载给容器(只读)45876
Agent 使用的监听端口,后面面板就是通过这个端口获取数据KEY
用来和面板进行身份校验
没有这个参数,Agent 会直接启动失败
第三步:确认 Agent 是否正常运行
命令执行完成后,可以用下面的命令确认一下:
docker ps如果看到类似:
beszel-agent Up ...说明 Agent 已经成功运行。

第四步:在面板中添加这台 VPS
Agent 启动后,回到 Beszel 面板页面。
- 再次点击 Add System
- 填写信息:
- Name:自定义,比如
VPS-2 - Address:
VPS-2 的 IP:45876
- Name:自定义,比如
- 保存
如果一切正常,几秒钟后,这台 VPS 就会出现在面板中,并开始显示运行状态。

重复以上步骤
按照同样的方法:
- 在
VPS-1(面板机)部署 Agent - 在
VPS-2、VPS-3分别部署 Agent - 在面板中逐一添加
最终你会看到:
所有 VPS 的运行情况,都集中显示在同一个页面中。

注意事项
在刚部署完成时,你可能会发现:
- CPU / 内存变化不是“秒级跳动”
- 数据会有几秒到十几秒的延迟
这是 Beszel 的设计取向,
它更关注 整体状态和趋势,而不是瞬时波动。
对我这种只是想随时看一眼服务器是否正常的人来说,已经完全够用了。
免责声明: 本文基于个人经验分享,内容可能因时间、地区或个人情况而异。操作前请结合实际情况判断,必要时查询最新官方信息。如有疑问或建议,欢迎留言交流。
