用 Donetick 安排家务和重复任务

用 Donetick 记录周期家务和成员分工。试一次延迟完成,检查下一次日期,再测试通知并关闭公开注册。

滤芯上次什么时候换的、这周谁清理洗衣机,可以用 Donetick 留下记录并安排下次任务。部署后先试一次重复周期,再确认家人能收到需要的提醒。

先录入五件有记录价值的事情,不必把每天顺手完成的动作全部搬进去。按固定星期安排的任务与完成后再间隔一段时间的任务不同,这个选择会影响之后的日期。

采用 SQLite 的家庭实例

准备 Linux VPS、Docker Engine、Compose 插件和可用 SSH。应用数据与配置分别放在 data、config,入口先只绑定本机:

sudo mkdir -p /opt/donetick/data /opt/donetick/config
sudo chown "$(id -u):$(id -g)" /opt/donetick/config
cd /opt/donetick
curl -fL https://raw.githubusercontent.com/donetick/donetick/main/config/selfhosted.yaml \
  -o config/selfhosted.yaml
openssl rand -hex 32

最后一条生成用于 jwt.secret 的随机值,替换文件里的公开示例,不要把它留在截图或公开仓库。下载的是项目自建配置;选择镜像版本以后,要检查文件与该版本匹配,不能每次升级都拿 main 分支覆盖自己的设置。

保留完整配置结构,修改这些字段:

字段本例安排
jwt.secret自己生成的随机值
server.public_host初次私有访问用 http://127.0.0.1:12021
server.cors_allow_origins包含上述实际浏览器来源
realtime.allowed_origins限定实际入口,去掉默认通配来源
email.log_raw_url设为 false,另外安排密码恢复邮件

配置包含密钥,应限制可读取的账户,并保证容器实际运行身份仍能读配置、写数据。不要用全目录开放写权限解决问题。

创建 compose.yaml:

services:
  donetick:
    image: donetick/donetick:latest
    restart: unless-stopped
    ports:
      - "127.0.0.1:2021:2021"
    volumes:
      - ./data:/donetick-data
      - ./config:/config
    environment:
      DT_ENV: selfhosted
      DT_SQLITE_PATH: /donetick-data/donetick.db
      TZ: Asia/Shanghai

DT_ENV 对应配置名称,DT_SQLITE_PATH 对应数据库落点。启动后记录已使用的镜像摘要,固定经过验证的版本或摘要,避免可变的 latest 与旧配置发生不受控组合。

docker compose config --quiet
docker compose pull
docker compose up -d
docker compose logs --tail=100 donetick
curl -f http://127.0.0.1:2021/api/v1/health

健康接口响应只说明该请求正常,不能证明重复周期或通知配置正确。配置解析失败查 YAML 层级,写库失败查挂载、权限和磁盘;保留原数据排查,不要删库重建。

成员分别登录,完成后关闭注册

在自己的电脑转发并打开 http://127.0.0.1:12021:

ssh -N -L 127.0.0.1:12021:127.0.0.1:2021 user@YOUR_VPS_IP

按当前界面创建账号与家庭小组。成员分别建账号,完成记录才能区分是谁提交的;如果分享同一个账号,分工历史就失去意义。

接入公网域名时,先配置 HTTPS 网关代理到服务器本机 2021,再将 public host、普通 CORS 与 realtime 来源一起换成真实 HTTPS 入口。家庭成员加入后,将顶层 is_user_creation_disabled 改为 true,重启应用,用未登录窗口检查新用户创建已被限制。改配置不能只改 DNS。

故意晚一点完成,检查下次日期

建一项短周期临时任务,故意晚一点完成,观察下一次日期。固定收垃圾日应保持原定星期;需要“完成后再隔一段时间”的维护任务,则应该按实际完成时间安排。实际采用哪一种,以任务设置与验证结果为准。

任务说明写清完成标准,例如清洗哪个部位、依照哪份设备维护说明。应用记录的是成员提交的结果,不能替代真实检查,也不宜只按完成条数比较家务量。

电脑列表能实时刷新,手机关闭页面后却未收到提醒,是另一类问题。分别测试应用时区、客户端时间、通知渠道与接收端权限;没有配好恢复邮件时,也不要假定忘记密码一定能收到链接。重要周期先用临时任务走通,再录入长期事项。

备份成员、完成记录和配置

本例的数据库在 data,配置在 config。先停止应用,用备份工具保存这两处与 Compose,再启动服务;将副本放到独立存储,保护密钥与家庭资料。如果另启用附件或对象存储,还要按实际配置补上文件落点。

恢复演练使用同一镜像版本、独立目录和不同回环端口,暂时停用正式通知渠道。核对成员、完成历史和重复周期,确认可恢复后再接真实域名。

家庭任务量少时可以复用已有机器。准备同时运行其他私人应用,再按总资源和备份安排查看Docker 应用 VPS 的选择条件;为了记几件家务另买服务器,反而会多一项需要维护的账单。项目配置与更新入口见 Donetick 官方仓库。

家庭成员少、使用 SQLite 的实例可以从 2 GB 内存的 Linux 实例试用,为备份与其他容器留余量。需要中文面板管理,可看 雨云 RCS 的家庭应用配置;希望短期验证环境,可比较 Evoxt 的小实例。先关闭公开注册,测试通知和重复周期,从家人常用的网络试访问,再选地区,不为家务统计另买用不上的高规格。