别再手动刷新了!用HomePage v0.8.2+Docker Compose,一键监控所有容器和网站状态

每次登录服务器都要挨个检查容器是否运行正常?网站挂了却要等用户反馈才知道?这种被动式运维早该淘汰了。今天介绍的这套方案,能让你的HomePage从"静态导航页"变身"全栈监控中心",实时显示容器资源占用、网站响应状态,甚至自动预警服务异常。只需10分钟配置,从此告别手动刷新。

1. 为什么需要集中式监控面板?

想象一下:你同时运行着Halo博客、Nextcloud网盘、Jellyfin媒体服务器等十多个服务。某天凌晨3点,数据库容器意外崩溃,导致所有依赖服务瘫痪。而你直到早上8点打开电脑才发现问题——这种场景在自建服务圈屡见不鲜。

传统检查方式存在三大痛点:

  • 信息碎片化:需要分别登录Portainer、Uptime Kuma等不同工具查看状态
  • 响应滞后:被动等待报警或人工巡检发现故障
  • 操作繁琐:反复执行docker pscurl等命令验证服务健康度

HomePage v0.8.2的监控方案恰好解决了这些问题:

# 典型监控面板功能对比
| 功能               | HomePage | Portainer | Uptime Kuma |
|--------------------|----------|-----------|-------------|
| 容器CPU/内存监控   |         |          |            |
| 网站状态码检测     |         |          |            |
| 服务延迟显示       |         |          |            |
| 统一可视化界面     |         |          |            |

2. 核心配置:打通Docker监控通道

2.1 避免无限注册的docker.sock方案

原始方法通过IP:PORT监控容器存在明显缺陷:

  • 约80%的容器不提供状态查询API
  • 自动发现机制会导致容器重启时重复注册

正确做法是挂载docker.sock文件,直接读取Docker引擎数据:

version: "3.8"
services:
  homepage:
    image: ghcr.io/gethomepage/homepage:v0.8.2
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro  # 关键配置
    environment:
      - PUID=0  # NAS用户需设为root权限
      - PGID=0

注意:生产环境务必设置:ro只读权限,避免安全风险

2.2 服务注册避坑指南

config/docker.yaml中明确定义要监控的容器:

# 示例:监控Halo博客容器
halo-blog:
  socket: /var/run/docker.sock
  name: halo-blog  # 必须与实际容器名一致

常见配置错误及解决方法:

  1. 权限不足Permission denied错误 → 检查PUID/PGID是否为0
  2. 数据不显示:确认容器名在docker.yamlservices.yaml中完全匹配
  3. CPU显示异常:可能是Docker版本兼容问题,尝试升级到v24+

3. 高级监控:从容器到网站的全链路观测

3.1 网站可用性检测配置

services.yaml中添加siteMonitor参数:

- 技术博客:
    href: https://blog.example.com
    siteMonitor: https://blog.example.com  # 监控地址
    server: halo-blog  # 关联容器
    container: halo-blog

监控数据解读:

  • 状态码:2xx/3xx为正常,4xx/5xx标红警告
  • 延迟分级
    • <200ms 🟢 优秀
    • 200-500ms 🟡 可接受
    • 500ms 🔴 需优化

3.2 自定义监控指标阈值

修改settings.yaml调整显示方式:

layout:
  Monitor:
    icon: /icons/pulse.png  # 状态图标
    style: row              # 横向排列
statusStyle: "dot"          # 状态显示样式(dot/basic)
showStats: true             # 默认展开资源统计

4. 实战:搭建多服务监控面板

以典型个人服务器为例,监控这些服务:

  1. Halo博客:容器状态+网站可用性
  2. Calibre-Web:书籍数量统计
  3. Jellyfin:转码进程监控
  4. MySQL:内存占用预警

完整services.yaml配置片段:

- 媒体服务:
    icon: /icons/video.png
    style: column
    items:
      - Jellyfin:
          href: http://jellyfin.local
          server: jellyfin
          container: jellyfin
- 数据库:
    icon: /icons/database.png
    items:
      - MySQL:
          href: http://mysql.admin
          server: mysql
          container: mysql
          statusOptions:
            memoryWarning: 80%  # 内存超80%标黄

优化技巧:

  • 对关键服务设置memoryWarning阈值
  • 使用statusStyle: "basic"显示具体数值
  • 通过columns: 3调整每行显示的服务数量

5. 性能优化与故障排查

5.1 资源占用控制

HomePage监控本身消耗极低:

  • 内存占用:约50MB(监控10个容器时)
  • CPU使用:<1%的单核资源

若发现页面加载慢,可尝试:

# 查看容器日志定位问题
docker logs homepage | grep -i error

# 调整监控频率(需修改源码)
ENV MONITOR_INTERVAL=60  # 默认30秒检测一次

5.2 常见问题解决方案

问题现象 可能原因 解决方法
所有容器显示"离线" docker.sock权限不足 检查PUID/PGID是否为0
部分服务无监控数据 容器名不匹配 核对docker.yaml中的name字段
网站监控延迟显示为"-" 防火墙阻止出站请求 放行HomePage容器的出站流量
CPU显示超过100% 多核CPU统计方式问题 忽略或升级到v0.9.0+版本

最后分享一个真实案例:某用户配置后发现Nginx容器始终显示异常,最终发现是services.yaml中误将container: nginx写成了container: nginxx。这种细节错误往往最容易被忽视,建议使用VS Code的YAML插件进行语法校验。

更多推荐