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 进入官网购买。