推送 v 开头的 tag 时自动执行: - frontend: 前端只构建一次(含 vue-tsc 类型检查),产物由各平台共用, 保证所有二进制内嵌的前端完全一致 - build: 交叉编译 linux/windows/darwin 的 amd64 与 arm64 共 5 个目标, 打包时附带 README/LICENSE/docs - release: 汇总产物、生成 checksums.txt、创建 Release(自动生成发布说明) - docker: buildx 构建 amd64+arm64 镜像推送 ghcr,标签按 semver 展开 Dockerfile 改为交叉编译友好:前端与后端构建阶段固定在 BUILDPLATFORM, 用 TARGETARCH 做 Go 交叉编译,避免构建 arm64 镜像时 npm 与 go build 被丢进 QEMU 执行。同时补上 -trimpath。 只使用内置 GITHUB_TOKEN,无需额外 secret。 文档: 新增 docs/release.md,README 补充镜像拉取与二进制下载说明, docker-compose 默认镜像改为 ghcr。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
goodBaby v2
摇篮系统 —— 为独居青年准备的「死人开关」(Dead Man's Switch)。
一个人在大城市生活,最怕的是出了事都没人知道。goodBaby 让你定期回来报一声平安;一旦超过设定的期限没有签到,它就会替你把预先托付的留言送出去:给家人的邮件、给朋友的 QQ / 钉钉消息、一条 B 站动态,或是公开你的 GitHub 仓库,把作品留给世界。
功能
- WebUI:内置 Vue3 前端,注册 / 登录、定时器、规则、账号、执行日志、设置全部可视化操作
- 定时器 (Timer):设定签到周期与提前提醒时间,到期前通过钉钉机器人提醒你签到
- 规则 (Rule):定时器到期后要执行的动作,支持:
- 发送邮件 (SMTP)
- 发布 B 站动态
- 发送 QQ 消息 (OneBot / NapCat)
- 发送钉钉机器人消息
- 公开 GitHub 仓库
- 账号 (Account):集中管理第三方凭据,支持连通性测试,敏感字段(密码/Cookie/Token)不会回显
- 执行日志:每次规则执行与提醒都有记录,规则支持手动测试
- 配置测试:账号可一键测试连通性;规则可手动触发验证
快速开始
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
可用标签:latest、v2.2.0(完整版本)、2.2(次版本)、2(主版本)。
下载预编译二进制
Releases 提供 Linux / Windows / macOS 的 amd64 与 arm64 产物,
解压后直接运行即可(前端已内嵌,无需额外部署)。压缩包旁的 checksums.txt 可校验完整性:
sha256sum -c checksums.txt --ignore-missing
从源码构建
需要 Go 1.25+ 与 Node.js 20+:
# 1. 构建前端(产物输出到 web/dist,会被 go:embed 打进二进制)
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。
管理员后台
第一个注册的用户自动成为管理员(老版本升级上来时,注册最早的用户会被自动提升)。
管理员在「设置」页面会多出一个「系统配置」区块,可以直接修改并立即生效,无需重启:
- 开放注册
- 检查间隔(保存后会自动重排定时任务)
- 规则重试时长
- 日志保留条数
监听地址、数据库、会话密钥这类启动项不在后台开放,只能改配置文件。
数据库
默认 SQLite,可选 PostgreSQL,详见 docs/database.md。
发版
推送 v 开头的 tag 即可自动构建产物、创建 Release 并推送镜像到 ghcr,
详见 docs/release.md。
驱动配置
各驱动的账号 / 规则配置说明见 docs/:
开发:新增一种规则类型
- 在
drivers/<name>/下实现:- 规则验证器(实现
ruleConfigChecker.RuleValidator,Meta()返回表单元数据) - 执行器(实现
runner.RuleExecutor) - 如需第三方凭据,再实现账号验证器(
accountConfigChecker.AccountValidator,可选实现AccountTester支持连通性测试)
- 规则验证器(实现
- 在
internal/ruleConfigChecker/reg.go、internal/accountConfigChecker/reg.go、handler/runner/interface.go中注册 - 前端无需改动 —— WebUI 会根据
Meta()返回的字段描述自动渲染配置表单