2026-04-05 10:38:19 +08:00
# goodBaby v2
2026-07-29 11:24:23 +08:00
2026-08-02 20:59:30 +08:00
  
2026-08-02 20:53:39 +08:00
2026-07-28 22:46:51 +08:00
根据《中国心血管健康与疾病报告2023》,中国 每年 猝死总人数(含心源性和非心源性)或达80万-100万,18-35岁人群占比为38%,也就是说,每天18-35岁人群有近1000人猝死
2025-10-03 22:54:19 +08:00
2026-07-28 22:46:51 +08:00
伴随着中国人口老龄化加剧,年轻人的牵挂越来越多,面对着可能的猝死,我们或许真的需要做好准备
2025-10-07 08:59:33 +08:00
2026-08-02 20:59:30 +08:00
所以我写了goodBaby来解决这个问题,他和apple app store里的“死了么”形式上有些接近,不过goodBaby支持了更多好玩的通知方式,比如bilibili动态,github仓库,邮件,OneBot,还可以方便的自托管
2025-10-07 08:01:28 +08:00
[](https://app.rainyun.com/apps/rca/store/7125/cat_)
2025-10-06 18:57:53 +08:00
2026-07-26 22:19:41 +08:00
## 功能
2025-10-06 18:57:53 +08:00
2026-07-26 22:19:41 +08:00
* **WebUI**:内置 Vue3 前端,注册 / 登录、定时器、规则、账号、执行日志、设置全部可视化操作
* **定时器 (Timer)**:设定签到周期与提前提醒时间,到期前通过钉钉机器人提醒你签到
* **规则 (Rule)**:定时器到期后要执行的动作,支持:
* 发送邮件 (SMTP)
* 发布 B 站动态
* 发送 QQ 消息 (OneBot / NapCat)
* 发送钉钉机器人消息
* 公开 GitHub 仓库
* **账号 (Account)**:集中管理第三方凭据,支持连通性测试,敏感字段(密码/Cookie/Token)不会回显
* **执行日志**:每次规则执行与提醒都有记录,规则支持手动测试
* **配置测试**:账号可一键测试连通性;规则可手动触发验证
2025-10-06 18:57:53 +08:00
2026-07-26 22:19:41 +08:00
## 快速开始
2025-10-06 18:57:53 +08:00
2026-07-26 22:19:41 +08:00
### Docker Compose (推荐)
```bash
docker compose up -d
```
首次启动会在 `./data` 下自动生成 `config.json` 与 `data.db` 。
打开 `http://localhost:8088` ,按引导创建第一个账号即可。
2026-07-27 07:38:44 +08:00
### 直接拉取镜像
每次发版会自动构建 `linux/amd64` 与 `linux/arm64` 镜像推送到 GitHub Container Registry:
```bash
docker run -d --name goodbaby -p 8088:8088 -v ./data:/app/data ghcr.io/ssdomei232/goodbaby:latest
```
### 下载预编译二进制
[Releases ](https://github.com/ssdomei232/goodBaby/releases ) 提供 Linux / Windows / macOS 的 amd64 与 arm64 产物,
2026-07-28 22:46:51 +08:00
解压后直接运行即可。压缩包旁的 `checksums.txt` 可校验完整性:
2026-07-27 07:38:44 +08:00
```bash
sha256sum -c checksums.txt --ignore-missing
```
2026-07-26 22:19:41 +08:00
### 从源码构建
需要 Go 1.25+ 与 Node.js 20+:
```bash
2026-07-28 22:46:51 +08:00
# 1. 构建前端
2026-07-26 22:19:41 +08:00
cd web/frontend && npm install && npm run build && cd ../..
# 2. 构建后端
go build -o goodbaby .
# 3. 运行
./goodbaby
```
### 本地开发
```bash
# 终端 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` | 检查定时器的间隔(分钟) |
2026-07-27 07:17:16 +08:00
| `database_driver` | `sqlite` | 数据库驱动,`sqlite` 或 `postgres` |
2026-07-26 22:19:41 +08:00
| `database_path` | `data.db` | sqlite 数据库路径 |
2026-07-27 07:17:16 +08:00
| `database_dsn` | 空 | postgres 连接串,见 [docs/database.md ](docs/database.md ) |
2026-07-26 22:19:41 +08:00
| `session_secret` | 自动生成 | 会话加密密钥,自动生成并持久化 |
| `session_max_age_hours` | `168` | 会话有效期(小时) |
| `allowed_origins` | `[]` | 允许跨域的来源,前端本地开发时可填 `["http://localhost:5173"]` |
| `log_retain_count` | `500` | 每个用户保留的执行日志条数 |
2026-07-27 07:17:16 +08:00
环境变量覆盖:`GOODBABY_CONFIG` (配置文件路径)、`GOODBABY_LISTEN_ADDR` 、`GOODBABY_DB_DRIVER` 、`GOODBABY_DB_PATH` 、`GOODBABY_DB_DSN` 、`GOODBABY_SESSION_SECRET` 、`GOODBABY_ENABLE_REGISTRY` 。
### 管理员后台
2026-07-28 22:46:51 +08:00
**第一个注册的用户自动成为管理员** 。
2026-07-27 07:17:16 +08:00
## 数据库
默认 SQLite,可选 PostgreSQL,详见 [docs/database.md ](docs/database.md )。
2026-07-26 22:19:41 +08:00
2026-07-27 07:38:44 +08:00
## 发版
推送 `v` 开头的 tag 即可自动构建产物、创建 Release 并推送镜像到 ghcr,
详见 [docs/release.md ](docs/release.md )。
2026-07-26 22:19:41 +08:00
## 驱动配置
各驱动的账号 / 规则配置说明见 [docs/ ](docs/ ):
* [Bilibili ](docs/bilibili-config.md )
* [Email ](docs/email-config.md )
* [OneBot (QQ) ](docs/onebot-config.md )
* [钉钉机器人 ](docs/dingtalk-config.md )
* [GitHub ](docs/github-config.md )
2026-08-02 20:53:39 +08:00
* [饭碗警告 ](docs/fwalert-config.md )
2026-07-26 22:19:41 +08:00
## 开发:新增一种规则类型
1. 在 `drivers/<name>/` 下实现:
* 规则验证器(实现 `ruleConfigChecker.RuleValidator` , `Meta()` 返回表单元数据)
* 执行器(实现 `runner.RuleExecutor` )
* 如需第三方凭据,再实现账号验证器(`accountConfigChecker.AccountValidator` ,可选实现 `AccountTester` 支持连通性测试)
2. 在 `internal/ruleConfigChecker/reg.go` 、`internal/accountConfigChecker/reg.go` 、`handler/runner/interface.go` 中注册
3. 前端无需改动 —— WebUI 会根据 `Meta()` 返回的字段描述自动渲染配置表单