各个方面叨叨叨

在 VPS 上部署 tududi:把待办、项目和随手记放到同一个入口

部署 tududi,整理任务、项目与笔记,核对数据库新路径、日期规则与附件备份。

文章目录

同一件事很容易散落在几个地方:聊天里说了要改,便签里写了日期,真正动手时却找不到相关材料。tududi 把任务、项目、笔记和生活领域放在一个自托管入口里。它适合整理自己需要推进的事情,但项目能否推进,仍取决于任务有没有写清楚、有没有及时更新。

先拿一个近期的小项目试用。例如“把旧电脑交给家人”:检查硬盘、备份资料、重装系统、交接账号分别是一件可执行的事;“处理电脑”则太宽。部署成功后,把这几件事建进去,比立刻导入多年待办更容易判断工具是否合适。

tududi 官方任务界面

这是项目提供的界面示例,任务与日期均为演示内容,具体布局以所用发行版为准。

国内海外,一站选云|雨云 RCS · 弹性升级 · 多系统可选

部署前先确认 VPS 的磁盘、内存和公网访问条件,也可以查看雨云云服务器;注册时填写优惠码 KuZhuJi。

先保住数据库目录,再谈升级

当前官方镜像为 chrisvel/tududi:latest,网页端口是 3002。SQLite 数据放在 /app/db,上传文件在 /app/uploads,还可以挂载 /app/backups 保存应用备份。三个目录承担不同用途,备份目录和数据库在同一块 VPS 磁盘上时,仍会一起受到磁盘故障影响。

旧版教程尤其要核对路径。项目在 v1.2.0 更改过数据库挂载目录,早期 /app/backend/db 的写法不能直接套到新部署。下面按当前 README 的路径搭建新实例;已有旧实例应先读升级说明并确认实际数据位置,不能用空目录覆盖原有资料。

VPS 上需要已经安装 Docker Engine 与 Compose 插件,有 SSH 登录权限,并为数据库、附件和备份留出磁盘空间。应用端口只绑定本机,首次登录通过 SSH 隧道完成。先把初始账号与持久数据验收好,再接正式域名。

mkdir -p /opt/tududi
cd /opt/tududi
mkdir -p db uploads backups
umask 077
printf 'TUDUDI_SESSION_SECRET=%s\n' "$(openssl rand -hex 64)" > .env
printf 'TUDUDI_USER_PASSWORD=%s\n' "$(openssl rand -hex 24)" >> .env
chmod 600 .env

用编辑器打开 .env,把初始密码存到自己的密码管理器。不要把这个文件传到公开仓库,随机会话密钥也应持续保存,而不是每次重启临时生成。

在同一目录建立 compose.yaml:

services:
  tududi:
    image: chrisvel/tududi:latest
    restart: unless-stopped
    ports:
      - "127.0.0.1:3002:3002"
    environment:
      TUDUDI_USER_EMAIL: "[email protected]"
      TUDUDI_USER_PASSWORD: "${TUDUDI_USER_PASSWORD:?set password}"
      TUDUDI_SESSION_SECRET: "${TUDUDI_SESSION_SECRET:?set secret}"
      BASE_URL: "http://localhost:13002"
    volumes:
      - ./db:/app/db
      - ./uploads:/app/uploads
      - ./backups:/app/backups

把邮箱改为自己的地址。本例 BASE_URL 与下面本地访问地址一致;切换正式域名时,需要同时改成正式 HTTPS 地址,避免邮件中的验证、重置链接仍指向 localhost。邮件发送还需要另行配置,不要把填写邮箱理解为已经接通邮件服务。

docker compose config --quiet
docker compose up -d
docker compose ps
docker compose logs --tail=100 tududi

在自己电脑上建立隧道,把 user@VPS_IP 换成实际 SSH 目标:

ssh -N -L 13002:127.0.0.1:3002 user@VPS_IP

打开 http://localhost:13002,用配置的邮箱和初始密码登录。容器处于运行状态只说明进程未退出,还要新建任务、上传一份无敏感内容的测试附件,重启容器后再次查看,确认记录落在持久目录里。

准备独立实例时,可在雨云选择适合的云服务器配置,优惠码 KuZhuJi。配置按实际任务选择,数据库和附件另做备份。

日期只给真正有时间约束的事

把所有待办都填成今天,第二天就会得到一整屏过期任务。交付日期、预约时间和自己的计划时间应分开理解:有外部承诺的事填明确日期,没有承诺的事可以先留在项目中,安排下一步时再确定。

项目名描述结果,任务名描述动作,笔记保存材料。例如项目是“完成家庭网络整理”,任务是“拍下弱电箱接线”,笔记则记录端口对应关系。不要让一段长说明同时承担任务与资料库的角色,否则在手机上勾选时很难判断到底完成了什么。

领域适合存放持续责任,如家庭、工作、学习;项目则有阶段性的结束条件。重复任务也先建一条验证,观察完成后新实例如何出现、到期日期怎样计算,再安排大量每周事项。软件里有周期设置,不代表它会按你脑中的规则生成后续任务。

tududi 数据与任务关系示意

国内海外,一站选云|雨云 RCS · 弹性升级 · 多系统可选

需要增加服务器时,可以打开雨云选购页面,填写优惠码 KuZhuJi;迁移前保留数据与原有部署配置。

让手机与电脑看到同一件事

私人试用可以一直用隧道。希望手机日常访问时,准备独立子域名,用现有反向代理转发到 127.0.0.1:3002,配置 HTTPS,并把 BASE_URL 更新为这个地址。首次账号创建和密码修改完成后,再让正式入口可访问。

浏览器登录、任务修改、附件下载分别检查一次。若经过代理后登录异常,先核对代理转发与项目当前的信任代理配置,不要通过关闭登录保护来掩盖问题。需要 CalDAV 或 OIDC 时,按官方对应文档单独配置,并用少量任务核对客户端同步范围;不同客户端的重复任务和字段支持可能不同。

从聊天整理任务时,保留必要上下文即可,不要连同验证码、密码或私人对话整段上传。手机能看见这些资料,也意味着账号和附件权限需要认真管理。任务工具是操作入口,原始合同、照片或长期档案仍应另存可恢复副本。

一次完整备份包括三份目录与配置

应用自身生成的备份可以提供便利,但首次迁移建议先保留停止写入后的完整副本。备份里包含个人计划与附件,应放在只有自己可读的位置,并复制到另一台机器。

cd /opt/tududi
umask 077
mkdir -p backup-out
docker compose stop tududi
sudo tar -czf "backup-out/tududi-$(date +%F-%H%M%S).tgz" db uploads backups compose.yaml .env
docker compose start tududi

若归档失败,先查磁盘和目录权限,并恢复服务,不要继续升级。恢复时使用独立目录与未占用的本机端口,先启动原来验证过的镜像版本,确认任务、附件、项目归属和登录都回来,再考虑版本迁移。验收后记录镜像摘要或固定发行标签,别让恢复过程同时变成升级试验。

每周整理一次仍未推进的项目:给它补上下一步动作,或明确暂停。对已经结束的项目保留必要材料并归档,待办列表才能继续承担“接下来做什么”的作用。

继续阅读 · 自托管 返回顶部