关于 openuptime
OpenUptime 是面向网站和基础设施运维团队的开源在线状态监控与状态页服务。它支持多种检查类型、事件管理和告警渠道,可部署在 Cloudflare Workers 或 Docker 中。
主要功能
- 01HTTP、TCP、DNS、数据库和心跳检查
- 02事件与维护管理
- 03支持订阅的公开状态页
- 04通过邮件、聊天和 Webhook 告警
- 05工作区、项目、角色和 API 密钥
适用场景
- 01监控服务可用性和响应缓慢情况
- 02跟踪事件和计划维护
- 03向订阅者发布服务状态
MCP 相关
MCP 服务允许 Agent 和其他 MCP 客户端通过 `/api/mcp` 的 Streamable HTTP 管理监控器、事件和状态页。支持 OAuth 或 API 密钥授权。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://openuptime.app/api/mcpclaude mcp add --transport http app-openuptime https://openuptime.app/api/mcp{"mcpServers":{"app-openuptime":{"type":"http","url":"https://openuptime.app/api/mcp"}}}在 Cursor 中打开{"servers":{"app-openuptime":{"type":"http","url":"https://openuptime.app/api/mcp"}}}在 VS Code 中打开{"mcpServers":{"app-openuptime":{"type":"http","url":"https://openuptime.app/api/mcp"}}}{"mcpServers":{"app-openuptime":{"serverUrl":"https://openuptime.app/api/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍

OpenUptime
开源的运行时间监控和状态页。可在 Cloudflare Workers 上搭配 Postgres 运行,也可在单个 Docker 容器中运行。
- HTTP、TCP、DNS、心跳、PostgreSQL、MySQL 和 Redis 检查,并支持关键词匹配和慢响应告警
- 事件、维护窗口和公共状态页,并支持通过电子邮件 / RSS 订阅
- 向 Slack、Lark / Feishu、Telegram、PagerDuty、webhook 和电子邮件发送告警
- 工作区、项目、角色、API 密钥、供 Agent 使用的 MCP 服务、JSON 导入 / 导出
| 部分 | 技术栈 |
|---|---|
apps/api | Hono、better-auth、Cloudflare Worker(cron + 队列消费者) |
apps/web | Astro(静态页面、状态页 SSR)+ React islands |
packages/repo | 存储接口(Repo)和实体类型 |
packages/db-pg | Repo 的 Postgres 实现:Drizzle 架构、迁移 |
部署到 Cloudflare
该站点在同一域名上运行两个 Worker:
| Worker | 提供服务 | 还负责 |
|---|---|---|
openuptime-api | your-domain/api/*(区域上的 Worker 路由) | 分钟级 cron、运行检查的队列消费者 |
openuptime-web | your-domain 上的其他所有内容(Worker 自定义域名) | 状态页(SSR);通过服务绑定访问 API |
将 API 放在同一域名的 /api/* 下,可确保会话 Cookie 保持同源。无需单独的 API 主机名。
开始之前
- 一个 Cloudflare 账户,以及 DNS 托管在 Cloudflare 上的域名(区域)。
- 一个可从互联网访问的 Postgres 数据库(Neon、Supabase、RDS 或自建数据库)。Workers 通过 Hyperdrive 连接。
- Node.js 22+ 和 pnpm(
corepack enable可提供固定版本)。 - 队列需要 Workers 付费计划(默认)。免费计划下,请改用内联模式:参见参考文档。
1. 获取代码并登录
git clone https://github.com/becoolme/openuptime.git && cd openuptime
pnpm install
cd apps/api && npx wrangler login
除非另有说明,以下所有 npx wrangler … 命令都在 apps/api 中运行。
2. 创建队列和 Hyperdrive
npx wrangler queues create openuptime-checks
npx wrangler hyperdrive create openuptime-prod --connection-string="postgres://user:pass@host:5432/db"
第二条命令会打印一个 ID。在 apps/api/wrangler.jsonc 中取消 hyperdrive 行的注释并粘贴该 ID:
"hyperdrive": [{ "binding": "HYPERDRIVE", "id": "<id printed above>" }],
注释掉的 placement 行是可选的(它会让 Worker 在数据库主机附近运行);除非你有此需求,否则请保留注释。
3. 创建架构
在仓库根目录中运行:
DATABASE_URL="postgres://user:pass@host:5432/db" pnpm db:migrate
该命令只会应用新增内容,因此每次升级后都要再次运行。它不会执行 CREATE SCHEMA,所以没有数据库级 CREATE 权限的角色也可以使用。
4. 将配置指向你的域名
编辑两个文件。在这两个文件中,将 status.example.com 替换为你的域名。
apps/api/wrangler.jsonc 中,zone_name 应填写区域(顶级域名),即使你从子域名提供服务也是如此。
取消 routes 的注释并设置:
"routes": [{ "pattern": "status.example.com/api/*", "zone_name": "example.com" }],
"vars": {
"BETTER_AUTH_URL": "https://status.example.com", // public origin: cookies, OAuth, email links
"WEB_ORIGIN": "https://status.example.com", // same value
"EMAIL_FROM": "[email protected]" // sender address; optional, see below
}
电子邮件配置为可选项:不配置时,邀请和告警会写入 Worker 日志。若要发送邮件,请先在 Cloudflare 控制面板的 Email Sending 中启用你的域名(参见参考文档)。
apps/web/wrangler.jsonc:
"routes": [{ "pattern": "status.example.com", "custom_domain": true }],
"vars": { "PRODUCT_URL": "https://status.example.com" } // target of the "Powered by" link on status pages
自定义域名会为你创建 DNS 记录和证书;该主机名不能已有指向其他位置的 DNS 记录。
域名未托管在 Cloudflare 上? 从两个文件中移除 routes,并将 BETTER_AUTH_URL 和 WEB_ORIGIN 设置为 Web Worker 的 https://openuptime-web.<your-subdomain>.workers.dev 地址。随后,Web Worker 会通过服务绑定将 /api/* 转发给 API Worker,从而确保 Cookie 保持同源。
5. 设置密钥
npx wrangler secret put BETTER_AUTH_SECRET # openssl rand -hex 32
npx wrangler secret put CRON_SECRET # any long random string; guards /internal/*
如果 wrangler 询问是否先创建 Worker,请回答是。可选:设置 GITHUB_CLIENT_ID 和 GITHUB_CLIENT_SECRET,即可添加“使用 GitHub 登录”。
6. 部署
pnpm exec wrangler deploy # in apps/api
cd ../web && pnpm build && pnpm exec wrangler deploy
请先部署 API:Web Worker 会按名称绑定到它。
7. 检查
curl https://status.example.com/api/health # {"ok":true}
打开域名并注册。创建好自己的账户后,可以在 API 的 vars 中设置 "DISABLE_SIGNUP": "true",然后重新部署以关闭注册(受邀者仍可加入)。
**稍后升级:**拉取代码,运行 pnpm install、pnpm db:migrate,然后依次部署 API 和 Web Worker。
使用 Docker 自托管
一个容器即可运行 API、Web 应用和检查调度器;Postgres 已包含在 compose 文件中。你可以运行已发布的镜像,也可以从源代码构建;两种方式的设置相同。
选项 A:运行已发布的镜像
带标签的发行版已发布到 ghcr.io/becoolme/openuptime,支持 linux/amd64 和 linux/arm64。你无需克隆或构建:
mkdir openuptime && cd openuptime
curl -fsSLO https://raw.githubusercontent.com/becoolme/openuptime/main/docker-compose.yml
curl -fsSL https://raw.githubusercontent.com/becoolme/openuptime/main/.env.docker.example -o .env
编辑 .env:设置 POSTGRES_PASSWORD 和 BETTER_AUTH_SECRET(openssl rand -hex 32),并取消注释 OPENUPTIME_IMAGE。指定一个版本(ghcr.io/becoolme/openuptime:0.1.0),或使用最新发行版(:latest)。然后运行:
docker compose pull && docker compose up -d # http://localhost:8080
升级:如果指定了版本标签,请更改该标签,然后再次运行相同的两条命令。迁移会在启动时运行。
选项 B:从源代码构建
git clone https://github.com/becoolme/openuptime.git && cd openuptime
cp .env.docker.example .env # set POSTGRES_PASSWORD and BETTER_AUTH_SECRET (openssl rand -hex 32)
docker compose up -d --build # http://localhost:8080
升级:运行 git pull,然后运行 docker compose up -d --build。
无论选择哪种方式
架构会在启动时迁移,数据存储在 pgdata 卷中。如果应用不是通过 http://localhost:8080 提供服务,请设置 PUBLIC_URL。电子邮件为可选项;请参阅参考文档。
创建好自己的账户后,在 .env 中设置 DISABLE_SIGNUP=true,并运行 docker compose up -d 以关闭注册(受邀者仍可加入)。
开发
pnpm install
cp .env.example apps/api/.dev.vars # edit DATABASE_URL and secrets
DATABASE_URL=postgres://user:pass@localhost:5432/openuptime_dev pnpm db:migrate # same URL as in .dev.vars
pnpm dev:api # http://localhost:8787 (checks run inline every 15s)
pnpm dev:web # http://localhost:4321 (proxies /api to the API)
pnpm typecheck
MCP 服务
Agent(Claude、Cursor、Codex 和任何 MCP 客户端)可以通过 /api/mcp 上的 Streamable HTTP 管理监控项、事件和状态页,并使用 OAuth 或 API 密钥进行授权:
claude mcp add --transport http openuptime https://openuptime.app/api/mcp # or https://<your-host>/api/mcp
客户端设置、作用域和工具列表详见 MCP 文档。
介绍常见工作流的 Agent 技能已随 skills/openuptime 一同发布:
npx skills add becoolme/openuptime。
托管服务已在 MCP Registry 中列出,名称为 app.openuptime/mcp;其条目为 server.json。
测试、检查的运行方式、MCP 服务、警报渠道及其他详细信息,请参阅 docs/reference.md。
开源版与托管版
两种版本的监控功能使用相同的代码。位于 openuptime.app 的托管服务增加了套餐、账单和一些仅在该版本中提供的功能;它通过一个接口接入此代码库(Edition,参见 docs/editions.md),因此核心功能不会被锁定或限流。
| 自托管(此代码库,MIT) | 托管(openuptime.app) | |
|---|---|---|
| 监控项、事件、状态页、警报渠道、API、MCP | 全部包含 | 全部包含 |
| 限制 | 无:没有套餐、配额或计量 | 免费套餐,付费套餐起价为每月 $5(定价);监控项、检查、电子邮件和历史记录时长取决于套餐 |
| 运行方式 | 由你负责:Postgres、Worker 或容器、邮件服务提供商、备份和升级 | 由我们负责;无需安装 |
SSL 证书监控(到期警报、ssl 监控类型) | 不包含 | Lite 及以上套餐 |
| 状态页自定义域名 | 不包含 | Team |
| 数据存储位置 | 你的数据库 | 我们的数据库(托管服务上的 Postgres) |
如果你想自行掌控数据和基础设施,或不希望受到任何限制,请选择自托管。如果你不想运行任何服务,请选择托管版。两种版本都会获得相同的核心更新。
贡献与安全
请参阅 CONTRIBUTING.md。请按照 SECURITY.md 中的说明私下报告漏洞,不要在公开 issue 中报告。
许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。