goodBaby v2

GitHub go.mod Go version (subdirectory of monorepo) GitHub GitHub tag (with filter)

根据《中国心血管健康与疾病报告2023》,中国 每年 猝死总人数(含心源性和非心源性)或达80万-100万,18-35岁人群占比为38%,也就是说,每天18-35岁人群有近1000人猝死

伴随着中国人口老龄化加剧,年轻人的牵挂越来越多,面对着可能的猝死,我们或许真的需要做好准备

所以我写了goodBaby来解决这个问题,他和apple app store里的“死了么”形式上有些接近,不过goodBaby支持了更多好玩的通知方式,比如bilibili动态,github仓库,邮件,OneBot,还可以方便的自托管

通过雨云一键部署

功能

  • WebUI:内置 Vue3 前端,注册 / 登录、定时器、规则、账号、执行日志、设置全部可视化操作
  • 定时器 (Timer):设定签到周期与提前提醒时间,到期前通过钉钉机器人提醒你签到
  • 规则 (Rule):定时器到期后要执行的动作,支持:
    • 发送邮件 (SMTP)
    • 发布 B 站动态
    • 发送 QQ 消息 (OneBot / NapCat)
    • 发送钉钉机器人消息
    • 公开 GitHub 仓库
  • 账号 (Account):集中管理第三方凭据,支持连通性测试,敏感字段(密码/Cookie/Token)不会回显
  • 消息网关 (Gateway):为外部系统生成 Webhook 地址,投递进来的消息会触发绑定在该网关上的「网关规则」
  • 网关规则:与定时器规则分开存储、分开管理,规则里的消息字段(msg / message / body)会被投递内容替换
  • 执行日志:每次规则执行与提醒都有记录,规则支持手动测试
  • 配置测试:账号可一键测试连通性;规则可手动触发验证

快速开始

Docker Compose (推荐)

docker compose up -d

首次启动会在 ./data 下自动生成 config.json 与 data.db。 打开 http://localhost:8088,按引导创建第一个账号即可。

直接拉取镜像

每次发版会自动构建 linux/amd64 与 linux/arm64 镜像推送到 GitHub Container Registry:

docker run -d --name goodbaby -p 8088:8088 -v ./data:/app/data ghcr.io/ssdomei232/goodbaby:latest

下载预编译二进制

Releases 提供 Linux / Windows / macOS 的 amd64 与 arm64 产物, 解压后直接运行即可。压缩包旁的 checksums.txt 可校验完整性:

sha256sum -c checksums.txt --ignore-missing

从源码构建

需要 Go 1.25+ 与 Node.js 20+:

# 1. 构建前端
cd web/frontend && npm install && npm run build && cd ../..

# 2. 构建后端
go build -o goodbaby .

# 3. 运行
./goodbaby

本地开发

# 终端 1: 启动后端 (监听 :8088)
go run .

# 终端 2: 启动前端 dev server (监听 :5173,API 代理到 :8088)
cd web/frontend && npm run dev

配置

配置文件默认为工作目录下的 config.json,首次启动自动生成,字段均有默认值:

字段 默认值 说明
listen_addr :8088 HTTP 监听地址
enable_registry true 是否开放注册(系统无用户时始终允许注册第一个账号)
timeout_duration_hours 6 规则执行失败后指数退避重试的最长时间(小时)
check_interval_minutes 10 检查定时器的间隔(分钟)
database_driver sqlite 数据库驱动,sqlite 或 postgres
database_path data.db sqlite 数据库路径
database_dsn 空 postgres 连接串,见 docs/database.md
session_secret 自动生成 会话加密密钥,自动生成并持久化
session_max_age_hours 168 会话有效期(小时)
allowed_origins [] 允许跨域的来源,前端本地开发时可填 ["http://localhost:5173"]
log_retain_count 500 每个用户保留的执行日志条数

环境变量覆盖:GOODBABY_CONFIG(配置文件路径)、GOODBABY_LISTEN_ADDR、GOODBABY_DB_DRIVER、GOODBABY_DB_PATH、GOODBABY_DB_DSN、GOODBABY_SESSION_SECRET、GOODBABY_ENABLE_REGISTRY。

管理员后台

第一个注册的用户自动成为管理员。

API Key

每个用户在注册时会自动生成 API Key,可在 WebUI 的“设置”页面查看。调用需要认证的 API 时,在请求头中任选其一:

X-API-Key: gb_<your-api-key>

或:

Authorization: Bearer gb_<your-api-key>

数据库

默认 SQLite,可选 PostgreSQL,详见 docs/database.md。

发版

推送 v 开头的 tag 即可自动构建产物、创建 Release 并推送镜像到 ghcr, 详见 docs/release.md。

驱动配置

各驱动的账号 / 规则配置说明见 docs/:

开发:新增一种规则类型

driver 只负责把动作做出去:规则本体与关联账号由 handler/runner 组装成 model.RuleTask 后传进来, driver 内部不访问数据库、不写日志,需要账号凭据时从 task.Account 里解析。

  1. 在 drivers/<name>/ 下实现:
    • tool.go:解析规则 / 账号配置的 ParseXxx 函数
    • 规则验证器(实现 ruleConfigChecker.RuleValidator,Meta() 返回表单元数据)
    • 执行器(实现 runner.RuleExecutor,方法签名为 Execute(ctx, *model.RuleTask))
    • 对外动作(底层函数)保持原子:一次调用只做一件事,用 retry.Do(ctx, ...) 包裹重试
    • 如需第三方凭据,再实现账号验证器(accountConfigChecker.AccountValidator,可选实现 AccountTester 支持连通性测试)
  2. 在 internal/ruleConfigChecker/reg.go、internal/accountConfigChecker/reg.go、handler/runner/reg.go 中注册
  3. 前端无需改动 —— WebUI 会根据 Meta() 返回的字段描述自动渲染配置表单

开发:新增一种消息网关

  1. 在 internal/gateway/ 下实现 Gateway 接口(GetType() / Meta() / Deliver()), Deliver 拿到的 Task 里已经包含网关与待触发的规则,实现里不访问数据库
  2. 在 internal/gateway/reg.go 中注册
  3. 前端无需改动 —— 新建网关时的类型选项与说明来自 Meta()
S
Description
摇篮系统 简化你的死亡
https://die.mmeiblog.cn Readme MIT
1.2 MiB
Languages
Go 46.5%
Vue 37.1%
TypeScript 10.4%
CSS 5.4%
Dockerfile 0.4%
Other 0.2%