零成本打造全网服务监控:基于GitHub Actions的Upptime
为什么选择Upptime?
作为个人开发者,我常遇到这类困扰:需要同时监控十几个自建服务(NAS、博客、API接口等),但商业监控工具不付费不好用,比如不开放自定义状态页(如 UptimeRobot)。自建方案又得操心服务器维护,直到发现利用 GitHub 的开源方案 Upptime。
这套方案巧妙利用三个GitHub免费服务:
- Actions:通过全球微软服务器执行拨测
- Issues:自动生成故障 Issues,包含发生和解决时间
- Pages:实时更新可视化状态面板
运作原理简析
graph LR
A[定时任务] -->|GitHub Actions| B(全球多个监测节点)
B --> C{访问成功率检测}
C -->|正常| D[更新数据存档]
C -->|异常| E[创建故障Issue]
D & E --> F[生成状态网页]
一、搭建流程
1.1 Fork仓库
- 创建模板库
- Fork Upptime仓库
- 输入仓库名称(如
website-status
)
- 关键步骤:勾选 ✅
Include all branches
- 点击 Create repository from template
1.2 配置密钥
生成 Personal Access Token 访问令牌

填入仓库密钥

二、自定义域名配置(不需要自定义可以跳过)
2.1 绑定域名到仓库
- 设置 GitHub Pages 域名
- 进入仓库 → Settings → Pages → Custom domain
- 输入你的域名(如
status.example.com
),点击 Save
2.2 配置DNS解析
IPv4地址(A记录) 任选以下一个IP地址:
1 2 3 4
| 185.199.108.153 185.199.109.153 185.199.110.153 185.199.111.153
|
IPv6地址(AAAA记录)任选以下一个IP地址:
1 2 3 4
| 2606:50c0:8000::153 2606:50c0:8001::153 2606:50c0:8002::153 2606:50c0:8003::153
|
2.3 启用HTTPS
- 等待DNS解析生效,大概十分钟以内
- 强制开启HTTPS
- 返回仓库 → Settings → Pages → ✅ Enforce HTTPS
Github 官方参考:https://docs.github.com/zh/pages/configuring-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your-github-pages-site
三、配置监控参数
3.1 编辑配置文件
- 进入仓库 → 点击文件
.upptimerc.yml
- 点击右上角铅笔图标 ✏️ Edit file
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| owner: Iuleoo repo: Upptime
sites: - name: Google url: https://www.google.com - name: Wikipedia url: https://zh.wikipedia.org - name: Cloudflare DNS url: 1.1.1.1 port: 53 check: "tcp-ping"
- name: Mirrors url: $MIRRORS
status-website:
cname: upptime.yayal.cc logoUrl: https://raw.githubusercontent.com/upptime/upptime.js.org/master/static/img/icon.svg name: Upptime监控 introTitle: "**服务状态看板**" introMessage: 这是[**YAYAL**](https://www.yayal.cc/)的服务状态页面 navbar: - title: 状态页 href: / - title: GitHub href: https://github.com/$OWNER/$REPO
|
3.2 提交修改
- 滚动至页面底部 → 点击绿色按钮 ✅ Commit changes
- 系统将自动触发 GitHub Actions 部署
四、启用GitHub Actions
一般情况下,修改 .upptimerc.yml
后,GitHub Actions 会自动触发监控工作流,约1分钟内可在仓库的 Actions
标签页查看运行状态(黄圈为执行中,绿勾为成功,红叉为失败)。若出现失败,需重点检查 YAML 文件格式(缩进对齐、冒号后空格)。
成功运行后,访问配置的域名验证监控状态,仓库 README 将自动更新延迟数据。首次部署需等待 5-10 分钟生成状态页,持续异常可使用 YAML 验证工具排查语法错误。
五、汉化配置
把下面内容粘贴到``.upptimerc.yml`最下面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| i18n: activeIncidents: 当前事件 allSystemsOperational: 所有系统运行正常 incidentReport: "事件 #$NUMBER 追踪 →" activeIncidentSummary: Opened at $DATE 更新 $POSTS 动态 incidentTitle: 事件 $NUMBER 详情 incidentDetails: 事件追踪 incidentFixed: 已解决 incidentOngoing: 处理中 incidentOpenedAt: 发生时间 incidentClosedAt: 解决时间 incidentViewOnGitHub: 前往 GitHub 关注动态 incidentCommentSummary: $DATE 由 $AUTHOR 发布 incidentBack: ← 查看所有事件 pastIncidents: 已解决事件 pastIncidentsResolved: $MINUTES 分钟解决,产生 $POSTS 条记录 liveStatus: 服务状态看板 overallUptime: "服务可用率: $UPTIME" overallUptimeTitle: 服务可用率 averageResponseTime: "平均响应: $TIMEms" averageResponseTimeTitle: 接口响应 sevelDayResponseTime: 7日响应趋势 responseTimeMs: 响应时长(ms) up: 正常 down: 中断 degraded: 性能下降 ms: ms loading: 加载中 navGitHub: GitHub footer: 本页面开源托管于 [Github]($REPO), 基于 [Upptime](https://upptime.js.org) 构建 rateLimitExceededTitle: 访问频率受限 rateLimitExceededIntro: 您已达到每小时访问上限,请稍候重试或绑定 GitHub 令牌继续访问。 rateLimitExceededWhatDoesErrorMean: 为何出现此提示? rateLimitExceededErrorMeaning: 因使用 GitHub 接口获取数据,每个 IP 每小时限访问 60 次。 rateLimitExceededErrorHowCanFix: 如何恢复访问? rateLimitExceededErrorFix: 等待 1 小时自动恢复,或绑定个人令牌可提升至每小时 5,000 次。 rateLimitExceededGeneratePAT: 获取个人令牌指南。 rateLimitExceededHasSet: 您已绑定访问令牌。 rateLimitExceededRemoveToken: 解除绑定 rateLimitExceededGitHubPAT: GitHub 访问令牌 rateLimitExceededCopyPastePAT: 输入您的令牌 rateLimitExceededSaveToken: 保存设置 errorTitle: 数据加载失败 errorIntro: 获取最新状态时出现异常。 errorText: 建议稍后刷新重试。 errorHome: 返回主页 pastScheduledMaintenance: 维护记录 scheduledMaintenance: 计划性维护 scheduledMaintenanceSummaryStarted: 维护进行中 $DATE 开始,持续 $DURATION 分钟 scheduledMaintenanceSummaryStarts: 维护预告 $DATE 开始,预计 $DURATION 分钟 startedAt: 开始于 startsAt: 计划于 duration: 时长 durationMin: $DURATION 分钟 incidentCompleted: 维护完成 incidentScheduled: 维护预告 duration24H: 24小时 duration7D: 7天 duration30D: 30天 duration1Y: 1年 durationAll: 全部时段 locale: zh-CN
|
结语
- upptime可以实现的功能远不止于此,还可以实现TCP监视,监视网页内容,监视网页延迟,隐藏监控,自定义监控频率,自定义通知渠道(比如通过邮件,短信,telegram机器人,webhook,Discord发送异常通知),更多可以查询官方文档 https://upptime.js.org/docs/configuration
- 虽然理论上他是5分钟监控一次,但github大部分时间不允许这么短的间隔,所以实际会是每隔10~20分钟监控一次。
- 也可以用自己的服务器,接入到 GitHub Actions 作为 Self-hosted runner,Self-hosted runner 作为自定义检测点,可以在更接近用户的地方提供检测,具有更佳的准确性(但是这样好像就没必要了)。


