用 GitHub Release Monitor 自动追踪开源项目更新:从零到部署的完整指南
“
你是否也常常在浏览器里反复刷新某个 GitHub 仓库,只为等那条「Release v2.3.0」?
本文手把手带你用 GitHub Release Monitor 把这件重复、耗时、还容易遗漏的小事自动化。全文 9000+ 字,含 Docker 一行启动、手动部署、常见坑排查与 FAQ,照着做 30 分钟就能上线。
一、这东西到底能帮我做什么?
一句话:把「追踪开源项目的新版本」这件事变成「收到一封邮件通知」。
使用场景举例 | 过去怎么做 | 现在怎么做 |
---|---|---|
每天早八检查十几个常用库的 release | 打开浏览器 × N → 点进每个仓库 → 看 tag | 早上 8:05 打开邮箱,邮件标题告诉你谁发布了什么 |
发现依赖库出了 RC 版本,想提前测试 | 手动订阅 release → 收到所有 pre-release 的噪音 | 在 UI 里只勾选 rc 标签,其他 beta/alpha 不打扰 |
团队内部共享关注列表 | 把仓库链接甩进群里,大家各自收藏 | 导出一份 JSON,同事 5 秒导入,同步完成 |
二、核心能力速览
功能 | 一句话解释 |
---|---|
自动监控 | 背景任务每 N 分钟轮询一次 GitHub API,发现新版本即发邮件 |
邮件通知 | 支持任何 SMTP 服务器,主题、正文可自定义 |
过滤规则 | 全局开关(稳定版 / 预发布 / 草稿),还能给每个仓库单独改规则 |
国际化 | 界面英文、德文随浏览器语言切换 |
数据可移植 | 一键导出 JSON,换机器也能 10 秒复原 |
内置诊断 | 测试页告诉你「GitHub 通不通」「SMTP 发不发得出」 |
三、30 秒看懂技术栈
-
前端:Next.js 14 + TypeScript + Tailwind CSS + ShadCN UI -
后端:同一套 Next.js 的 App Router,无需额外服务器 -
邮件:Nodemailer,支持 STARTTLS / SSL -
认证:iron-session 加密 cookie,无需数据库 -
打包:Docker 镜像 ghcr.io/iamspido/github-release-monitor:latest
“
如果你只关心“跑起来”,直接跳到「Docker Compose 部署」即可;想深入源码再看「手动部署」。
四、Docker Compose 部署(官方推荐,含自动 HTTPS)
1. 准备条件
-
一台能装 Docker 和 Docker Compose 的 Linux 服务器(Ubuntu 22.04 演示) -
一个域名,例如 releases.example.com
解析到服务器 IP -
80/443 端口未被占用(Traefik 会自动申请 Let’s Encrypt 证书)
2. 下载示例配置
git clone https://github.com/iamspido/github-release-monitor.git
cd github-release-monitor/example
目录结构:
example
├── traefik/ # 反向代理 + 自动 HTTPS
├── smtp/ # 本地 SMTP relay(可选)
└── github-release-monitor/ # 主程序
3. 配置主程序
进入主程序目录,编辑 .env
:
cd github-release-monitor
cp env.example .env
nano .env
最少需要改 4 处:
变量 | 示例值 | 说明 |
---|---|---|
AUTH_SECRET | openssl rand -base64 32 生成的 44 位随机串 |
加密 cookie 用 |
AUTH_USERNAME | admin | 登录用户名 |
AUTH_PASSWORD | Sup3rSecure! | 登录密码 |
GITHUB_ACCESS_TOKEN | ghp_xxx… | 去 GitHub → Settings → Tokens 创建,不要勾选任何 scope 即可公开库访问 |
MAIL_FROM_ADDRESS | notify@example.com | 发件人 |
MAIL_TO_ADDRESS | you@example.com | 收件人 |
“
如果你用自带的 SMTP relay,MAIL_HOST / MAIL_PORT 保持默认即可。
4. 配置 Traefik
进入 example/traefik/compose.yaml
:
command:
- "--certificatesresolvers.letsencrypt.acme.email=you@example.com"
把邮箱换成自己的,证书到期自动续期。
5. 配置 SMTP Relay(可选但推荐)
进入 example/smtp/compose.yaml
:
environment:
- POSTFIX_myhostname=example.com
- OPENDKIM_DOMAINS=example.com=mail
域名与 MAIL_FROM_ADDRESS
对应,减少进垃圾箱概率。
6. 启动服务
按顺序启动:
# 1. 反向代理网络
docker compose -f traefik/compose.yaml up -d
# 2. SMTP
docker compose -f smtp/compose.yaml up -d
# 3. 主程序
docker compose -f github-release-monitor/compose.yaml up -d
浏览器打开 https://releases.example.com
,输入用户名密码即可。
五、Docker 单行启动(无 HTTPS,本地测试)
如果你只是本地尝鲜,一条命令:
mkdir -p data && sudo chown -R 1001:1001 data
docker run -d \
-p 8080:3000 \
-v "$PWD/data:/app/data" \
--env-file .env \
--name github-release-monitor \
ghcr.io/iamspido/github-release-monitor:latest
访问 http://localhost:8080
。
六、手动部署(源码跑起来)
适用场景:
-
想改 UI 或加功能 -
公司内网无法拉镜像 -
想跑在 ARM、OpenWrt 等特殊环境
步骤 1:克隆代码
git clone https://github.com/iamspido/github-release-monitor.git
cd github-release-monitor
步骤 2:安装依赖
npm install
步骤 3:准备数据目录
mkdir data
sudo chown $(whoami) data
步骤 4:写 .env
复制示例并填写:
cp .env.example .env
nano .env
必填项与 Docker 部分相同,不再赘述。
步骤 5:启动
开发模式(热更新):
npm run dev
生产模式:
npm run build
npm run start
默认监听 :3000
。
七、界面速通:第一次登录后做什么?
-
添加仓库
主页右上角「Add Repository」→ 输入facebook/react
这类格式 → 保存。
系统立刻查询一次,如有最新 release 会立即发邮件(可关闭)。 -
全局过滤器
Settings → Global Filters:-
Stable:稳定版 -
Pre-release:预发布 -
Draft:草稿
按你的口味开关。
-
-
仓库级过滤
对单个仓库点「Edit」→ Override Global → 只勾rc
,于是只有v2.0.0-rc.1
会提醒你。 -
测试邮件
Settings → Diagnostics → Send Test Email,确认 SMTP 通不通。 -
导入导出
Settings → Data → Export JSON,换机器时直接拖进去即可。
八、FAQ:你可能遇到的 12 个问题
问题 | 一句话答案 |
---|---|
没有域名能用吗? | 可以,单行 Docker 跑本地 localhost:8080 ,只是没有 HTTPS。 |
GitHub Token 必须吗? | 不填也能跑,但每小时只能调 60 次 API,多几个仓库就超。 |
邮件发不出去? | 先看 Diagnostics → Test Email;再检查 25/587/465 端口是否被封。 |
能同时通知多人吗? | 目前一封邮件只能填一个 MAIL_TO_ADDRESS ,可自建邮件组解决。 |
能钉钉/飞书通知吗? | 官方只支持 SMTP;社区有人用 Webhook-to-Email 转发实现。 |
如何更新版本? | Docker:docker pull … 然后 docker compose up -d ;源码:git pull && npm run build 。 |
数据存在哪? | Docker:./data/settings.json ;源码:./data/ ,定期备份即可。 |
忘记密码? | 停容器 → 改 .env 里 AUTH_PASSWORD → 重启。 |
能监控私有仓库吗? | 需要给 Token 加 repo scope,并把仓库地址写完整。 |
ARM 服务器能用吗? | 镜像支持 linux/arm64 ,手动部署亦可。 |
日志在哪看? | Docker:docker logs github-release-monitor ;源码:./data/logs/ 。 |
会重复发邮件吗? | 不会,系统记录已发 release id,除非删库重建。 |
九、常见场景配置示例
场景 1:只关注稳定版
-
Global Filters:仅勾选 Stable -
所有仓库用 Global 即可 -
好处:邮箱安静,不被 alpha/beta 打扰
场景 2:前端团队关注 Next.js Canary
-
添加 vercel/next.js
-
Override → Pre-release 打勾 → Tags 填 canary
-
于是 v14.0.5-canary.6
会提醒,而v14.0.4
不会
场景 3:运维组内部共享列表
-
管理员 A 把常用 30 个库添加完 -
Settings → Export JSON → 存成 team-repos.json
-
新同事入职:Import JSON → 10 秒完成同步
十、故障排查清单(收藏备用)
现象 | 检查项 |
---|---|
页面打不开 | docker ps 看容器是否 Exited;docker logs 查报错 |
SSL 证书无效 | Traefik 日志里找 acme 关键字;域名是否解析正确 |
邮件进垃圾箱 | 给 POSTFIX_myhostname 与 DNS A 记录对齐;加 SPF、DKIM |
API 报错 403 | Token 是否过期;私有库是否忘加 repo scope |
界面显示德语 | 浏览器语言优先级导致,手动在 URL 加 ?locale=en |
十一、扩展阅读:如何自己魔改
-
换主题色:改 tailwind.config.js
→ 重新编译 -
加 Webhook 通知:在 src/lib/notifications.ts
里新增 provider -
接入企业微信:把 SMTP 换成企业微信的「邮件机器人」地址即可 -
跑在 NAS:群晖 DSM 7 直接装 Docker Compose,网络选 host 模式
十二、小结
GitHub Release Monitor 把「盯版本」这件事做到了极简:
-
对开发者:再也不用写脚本轮询 GitHub API -
对团队:共享列表、零配置迁移 -
对运维:一条 Docker Compose 搞定 HTTPS、SMTP、备份
照着本文 30 分钟搭好,把节省下来的时间留给写代码吧。