Cachet 状态页面系统搭建教程

Cachet 是一款专注于状态展示的开源项目,用 PHP(Laravel 框架)编写。与 Statping 不同,Cachet 本身不提供主动监控功能,而是作为一个精美的状态展示和事件管理平台。你可以通过 API 与外部监控工具集成,或手动更新组件状态和发布事件公告。Cachet 特别适合需要向用户展示服务状态的团队。

一、Docker 部署

mkdir -p /opt/cachet && cd /opt/cachet

创建 docker-compose.yml

version: '3.8'

services:
  cachet:
    image: cachethq/docker:latest
    restart: always
    ports:
      - "8086:8000"
    environment:
      DB_DRIVER: pgsql
      DB_HOST: db
      DB_PORT: 5432
      DB_DATABASE: cachet
      DB_USERNAME: cachet
      DB_PASSWORD: cachet_password
      APP_KEY: base64:生成的随机密钥
      APP_LOG: errorlog
      CACHE_DRIVER: redis
      SESSION_DRIVER: redis
      REDIS_HOST: redis
    depends_on:
      - db
      - redis

  db:
    image: postgres:16-alpine
    restart: always
    environment:
      POSTGRES_DB: cachet
      POSTGRES_USER: cachet
      POSTGRES_PASSWORD: cachet_password
    volumes:
      - postgres_data:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine
    restart: always

volumes:
  postgres_data:
# 生成 APP_KEY
docker compose run --rm cachet php artisan key:generate --show

# 启动服务
docker compose up -d

# 运行数据库迁移
docker compose exec cachet php artisan migrate --force

二、Nginx 反向代理

server {
    listen 80;
    listen 443 ssl http2;
    server_name status.example.com;

    ssl_certificate /etc/letsencrypt/live/status.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/status.example.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:8086;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
nginx -t && systemctl reload nginx

三、初始化配置

访问 https://status.example.com/setup,按照向导完成配置:环境设置、缓存和会话驱动、邮件配置、管理员账号。

四、组件和组件组管理

Cachet 使用"组件"来代表你的各项服务:

  • 组件组:将相关组件归类,如"网站服务"、"API 服务"、"基础设施"。
  • 组件状态:运行正常、性能问题、部分中断、严重中断。
# 通过 API 创建组件组
curl -X POST https://status.example.com/api/v1/components/groups \
  -H "X-Cachet-Token: YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"网站服务","order":1}'

# 创建组件
curl -X POST https://status.example.com/api/v1/components \
  -H "X-Cachet-Token: YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"主站","description":"公司官网","status":1,"group_id":1}'

五、事件管理

当服务出现故障时,通过事件(Incident)向用户通报:

# 创建故障事件
curl -X POST https://status.example.com/api/v1/incidents \
  -H "X-Cachet-Token: YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name":"数据库性能问题",
    "message":"我们正在调查数据库响应缓慢的问题。",
    "status":2,
    "component_id":1,
    "component_status":2,
    "visible":1
  }'

# 更新事件(发布进展)
curl -X POST https://status.example.com/api/v1/incidents/1/updates \
  -H "X-Cachet-Token: YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"status":3,"message":"问题已定位,正在修复中。"}'

六、与监控工具集成

Cachet 的 API 可以与外部监控工具(如 UptimeRobot、Zabbix)集成,自动更新组件状态:

#!/bin/bash
# 监控脚本:检查服务并自动更新 Cachet 组件状态

API_URL="https://status.example.com/api/v1"
API_TOKEN="YOUR_TOKEN"
COMPONENT_ID=1

# 检查网站是否可达
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" https://example.com)

if [ "$HTTP_CODE" == "200" ]; then
    STATUS=1  # 运行正常
else
    STATUS=4  # 严重中断
fi

# 更新组件状态
curl -X PUT "$API_URL/components/$COMPONENT_ID" \
  -H "X-Cachet-Token: $API_TOKEN" \
  -H "Content-Type: application/json" \
  -d "{"status":$STATUS}"

七、订阅通知

Cachet 支持用户通过邮件订阅状态更新。确保已配置 SMTP 邮件服务,用户可以在状态页面底部输入邮箱订阅。当有新事件或状态变更时,订阅用户会自动收到邮件通知。

八、数据备份

# 备份 PostgreSQL 数据
docker compose exec db pg_dump -U cachet cachet > /root/backups/cachet_$(date +%Y%m%d).sql

总结

Cachet 是专业的状态展示平台,精美的界面和完善的事件管理功能使它成为向用户传达服务状态的理想工具。与 Statping 不同,Cachet 需要配合外部监控工具使用,但在状态展示和事件管理方面更加专业。配合 UptimeRobot 实现自动化状态更新是最佳实践。

选购搬瓦工 VPS 请查看 全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的折扣,通过 bwh81.net 进入官网购买。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。