工具部署|Beszel|Docker · 一键自托管

手上有几台 VPS、一台 NAS、家里还有个跑 Docker 的小主机,想随时看一眼它们的 CPU、内存、磁盘和容器状态,又嫌 Prometheus + Grafana 太重?开源项目 Beszel(MIT 协议)就是为这种场景做的:一个 Hub 面板 + 每台机器一个轻量 Agent,Docker 一条命令就能跑起来,中文界面开箱即用。

协议为 MIT,个人和商用都很宽松。项目非常活跃(GitHub 2.6 万+ Star,本文实测版本 0.21.1,2026-10 发布)。Hub 基于 PocketBase,Agent 是单个 Go 二进制,空闲内存占用都只有十几 MB,小内存 VPS 也毫无压力。

技术栈:Go · PocketBase · SQLite · React · Docker 一键部署

你将得到什么

  • 多台服务器的统一总览:CPU、内存、磁盘、负载、网络、温度、GPU、运行时间,一眼看全
  • 每台机器的历史曲线:CPU / 内存 / 磁盘 I/O / 带宽 / 系统负载,可切 1 小时~30 天
  • Docker / Podman 容器级统计:每个容器的 CPU、内存、网络,还有全局「所有容器」列表
  • 网络监控:由 Agent 发起 ICMP / TCP / HTTP / DNS 探测,记录响应时间与丢包率
  • 告警:掉线、CPU、内存、磁盘、带宽、温度、丢包等阈值告警,支持邮件和 Shoutrrr(Telegram、企业微信 Webhook、Bark、ntfy 等)
  • 多用户与权限、OAuth / OIDC 登录、自动备份到 S3、S.M.A.R.T. 硬盘健康
  • 演示只监听 127.0.0.1,不直接暴露公网

环境要求

  • 已安装 Docker(含 Compose 插件)的 Linux / macOS / Windows;Agent 也可以用单二进制装在不跑 Docker 的机器上
  • Hub 内存几十 MB 即可;Agent 十几 MB
  • Hub 端口默认 8090;SSH 模式下 Agent 默认监听 45876

官方仓库:github.com/henrygd/beszel,文档:beszel.dev。本文实机镜像为 henrygd/beszel:latest 与 henrygd/beszel-agent:latest(0.21.1)。

第一步:Docker Compose 启动 Hub

新建目录写入 docker-compose.yml。端口只绑定本机,由反向代理(Nginx/Caddy/1Panel 的 OpenResty)对外提供 HTTPS。USER_EMAIL/USER_PASSWORD 可以在首次启动时直接创建管理员,不写的话首次打开网页时也会引导你创建:

mkdir -p ~/beszel && cd ~/beszel

# docker-compose.yml
services:
  beszel:
    image: henrygd/beszel:latest
    container_name: beszel
    restart: unless-stopped
    ports:
      - "127.0.0.1:8090:8090"
    environment:
      APP_URL: "https://status.example.com"   # 换成你的域名(可选)
      USER_EMAIL: "admin@example.com"         # 首次启动自动创建管理员(可选)
      USER_PASSWORD: "换成你的强密码"
    volumes:
      - ./beszel_data:/beszel_data
      - ./beszel_socket:/beszel_socket
docker compose up -d
docker logs -f beszel   # 看到 Server started at http://0.0.0.0:8090 即启动成功

第二步:登录面板

浏览器打开你的域名(本机演示为 http://127.0.0.1:8090),用邮箱 + 密码登录。界面默认跟随浏览器语言,简体中文翻译完整,右上角还能切换深色模式:

Beszel 登录页
登录页:邮箱 + 密码,也可在设置里接入 OAuth / OIDC

第三步:添加系统并部署 Agent

点右上角「添加 系统」,填写名称和主机 IP,面板会自动给出 Hub 的公钥和令牌,并能一键复制对应的 docker-compose.yml(或切到「二进制」页复制一行安装命令):

Beszel 添加系统对话框
添加系统:自动生成公钥 / 令牌,可一键复制 Agent 的 docker compose 文件

与 Hub 同一台机器时,官方推荐用 Unix Socket 连接,Agent 不用开放任何端口。把下面这段追加到同一个 compose 文件里(KEY、TOKEN 换成对话框里复制的值),添加系统时「主机/IP」填 /beszel_socket/beszel.sock:

  beszel-agent:
    image: henrygd/beszel-agent:latest
    container_name: beszel-agent
    restart: unless-stopped
    network_mode: host
    volumes:
      - ./beszel_agent_data:/var/lib/beszel-agent
      - ./beszel_socket:/beszel_socket
      - /var/run/docker.sock:/var/run/docker.sock:ro   # 读取容器统计
    environment:
      LISTEN: /beszel_socket/beszel.sock
      HUB_URL: http://localhost:8090
      TOKEN: "对话框里的令牌"
      KEY: "ssh-ed25519 AAAA...对话框里的公钥"

其它服务器上只需要跑 Agent(LISTEN: 45876,主机/IP 填这台机器的地址)。务必在防火墙里把 45876 只放行给 Hub 所在 IP;配置了 HUB_URL + TOKEN 时,Agent 也会主动用 WebSocket 连回 Hub,NAT 后面的机器同样能接入。

第四步:总览所有服务器

Agent 连上后,首页「所有客户端」表格会实时显示每台机器的 CPU、内存、磁盘、负载、网络、运行时间和 Agent 版本,可按列排序、过滤:

Beszel 首页所有客户端
首页:每台服务器一行,资源占用用进度条和颜色提示

第五步:单机详情与历史曲线

点进任意系统,顶部是在线状态、IP、主机名、运行时长、系统版本、CPU 型号与内存总量;下面是 CPU 使用率、Docker 容器 CPU、内存、容器内存等历史曲线,右上角可以切换 1 小时 / 12 小时 / 24 小时 / 1 周 / 30 天。下图中 CPU 的几个波峰就是演示时人为加的压测负载:

Beszel 单机详情页 CPU 与内存曲线
系统详情:CPU / Docker CPU / 内存 / Docker 内存曲线,容器分色堆叠显示

继续往下是磁盘用量、磁盘 I/O、带宽、容器网络 I/O 和系统负载(1/5/15 分钟),挂了额外硬盘、有 GPU 或温度传感器的机器还会多出对应图表:

Beszel 磁盘、带宽与系统负载曲线
磁盘使用、根 I/O、带宽、Docker 网络 I/O 与系统负载

第六步:容器列表

顶部的盒子图标进入「所有容器」,汇总所有机器上的 Docker 容器:CPU、内存、网络、健康检查、端口映射、镜像和运行状态,排查「哪个容器在吃内存」特别方便:

Beszel 所有容器列表
所有容器:跨服务器汇总容器资源占用、端口、镜像与状态

第七步:网络监控(Ping / TCP / HTTP / DNS)

新版加入的「网络监控」由指定的 Agent 发起探测,支持 ICMP、TCP 端口、HTTP(S)(含证书到期信息)和 DNS 解析,记录实时响应、1 小时平均 / 最大 / 最小与丢包率。演示里分别探测了 Nginx 容器、Redis 端口、Hub 健康检查接口和 example.com 的解析:

Beszel 网络监控
网络监控:ICMP / TCP / DNS / HTTP 四种协议,响应时间与丢包一目了然

第八步:配置告警与通知

在首页表格每台机器行尾点铃铛图标即可设置告警:掉线、CPU、内存、磁盘、带宽、温度、负载、网络监控丢包等,每项都能设阈值和持续时长(例如 CPU 平均超过 80% 持续 10 分钟才报警),也可以切到「所有客户端」一次性应用到全部机器:

Beszel 告警设置
告警:状态、CPU、内存等按阈值 + 持续时间触发,避免瞬时尖峰误报

「设置 → 通知」里填写收件邮箱(需先在 PocketBase 后台 /_/ 配置 SMTP),或添加 Shoutrrr URL 推送到 Telegram、Discord、Bark、ntfy、Gotify、通用 Webhook 等,还能设置维护期间的静默时间:

Beszel 通知设置
通知设置:邮件 + Webhook / 推送,支持静默时间

安全与运维建议

  • Hub 不要直接映射到 0.0.0.0。教程用的是 127.0.0.1:8090,对外走带证书的反向代理;只自己看的话放在内网 / Tailscale / WireGuard 里更省心。
  • Agent 的 45876 端口只对 Hub IP 放行;Agent 只接受持有对应私钥的 Hub 连接,但少暴露一个端口总是好的。
  • Docker socket 以 :ro 只读挂载;不需要容器统计的机器可以不挂。
  • 超级管理员后台在 /_/(PocketBase),可配置 SMTP、OAuth、S3 自动备份,记得给它设强密码。
  • 备份:定期打包 ./beszel_data(data.db 与 id_ed25519 私钥),换机器时整个目录拷过去即可,Agent 无需重配。
  • 升级:docker compose pull && docker compose up -d;二进制 Agent 可用 beszel-agent update(国内可加 --china-mirrors)。
  • 演示用完可删:docker compose down && rm -rf ./beszel_data ./beszel_socket ./beszel_agent_data。

小结

Beszel 用一个 Hub + 若干个轻量 Agent,就把「多台服务器的资源曲线 + 容器统计 + 网络探测 + 阈值告警」这套常用监控做全了,界面清爽、中文完整、资源占用极低。比 Uptime Kuma 多了主机与容器层面的指标,又比 Prometheus + Grafana 省去一堆配置,个人站长和小团队管几台机器非常合适。

项目地址:https://github.com/henrygd/beszel(MIT)

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容