DailyTxT 介绍与选型指南

DailyTxT 自托管加密日记 Web 应用认知与选型:Svelte+Go v2 架构、ChaCha20-Poly1305+Argon2id 加密模型谱系、功能全景与 Joplin/jrnl/Trilium 量化对比(2026-11-01 联网溯源)

DailyTxT自托管加密2026/11/01

DailyTxT 介绍与选型指南

目标:从产品定位、技术架构、加密模型、功能特性与同类对比五个维度认识 DailyTxT——一款自托管的加密日记/日志 Web 应用,回答"它是不是适合我的私人日记方案"。本文全部结论来自官方仓库、官方 Docker Hub 与公开资料联网溯源(查询日期 2026-11-01),部署与参数实测见 《DailyTxT 2.6.4 Docker Compose 部署指南》 等后续篇目。

一、环境信息

本文属认知选型篇,不涉及本地安装,仅列出溯源得到的关键事实:

  • 项目主页:GitHub 仓库 PhiTux/DailyTxT(注意:DailyTxT/DailyTxT、qvtop/DailyTxT 两个历史猜测路径实测均返回 404,官方仓库就是 PhiTux 名下)
  • 最新版本:2.6.4(GitHub Releases 订阅源 releases.atom 与 README Changelog 一致,发布于 2026-10-10;查询日期 2026-11-01)
  • 官方镜像:Docker Hub phitux/dailytxt(共 75 个 tag、累计拉取 342,513 次;查询日期 2026-11-01)
  • 技术栈:Svelte(SvelteKit 前端)+ Go 后端 + nginx 运行时,多阶段构建,支持 AMD64 与 ARM64
  • 许可证:MIT(仓库页 license 元数据实查)
  • 在线演示:https://dailytxt.phitux.de(官方 live demo)
  • 版本演进:v1 为 Python/Flask 实现(归档在 v1 分支);v2(2.0.0,2025-11-08)起为 Go + Svelte 全重写,两者数据格式与环境变量不兼容,官方提供自动迁移机制

二、软件概述

DailyTxT 是一个自托管加密日记/日志 Web 应用:所有日记正文与上传附件在写入服务器存储之前完成加密,服务器上的数据文件即使被拖库、备份泄露或管理员直接查看,也只能得到密文;同时保留全文搜索、标签、日历、地图定位等日记场景功能,并支持多用户(每个用户独立加密密钥)。

一句话定位:"用 Docker 十分钟起一个属于自己的、管理员也读不了的加密日记站"。它与通用笔记软件的最大差异在于以"日历天"为第一数据单元——一天一篇带日期的条目、图片画廊、附件、地点标记,天然贴合写日记的心智模型,而不是无限层级的笔记本。

官方对加密模型的表述值得完整转述(README "About encryption and data storage" 一节,查询日期 2026-11-01):

  • 加密算法为 ChaCha20-Poly1305(认证加密,同时保证机密性与完整性);
  • 用户登录时,用 Argon2id 从口令派生"派生密钥"(derived key),派生密钥放入 HttpOnly Cookie,随每次 API 调用发送;
  • 派生密钥用于解密用户的"加密密钥"(encryption key,创建用户时随机生成),加密密钥负责加解密该用户的全部数据,永不离开服务器;
  • 官方明确说明没有采用客户端侧端到端加密:"There is no E2E-encryption used on client-side, because the search-functionality would not work then"——若做纯客户端 E2E,服务端无法索引,搜索就必须把全部密文下发到客户端解密。这是 DailyTxT 最核心的一个设计取舍;
  • 修改口令时,加密密钥用旧派生密钥解密、再用新派生密钥重新加密,历史数据无需重加密;
  • 支持"备份码"(backup keys):一组随机密钥加密保存派生密钥,仅展示一次,口令遗忘时可当密码替代品。

💡 技术拓展:日记/笔记类自托管产品的加密谱系差异很大,常见模型对比——

加密模型代表产品密钥在哪服务端搜索防拖库防管理员
客户端 E2EE(零知识)Standard Notes、Joplin(可选)仅客户端不支持(需全量下发)强强
服务端静态加密(口令派生密钥)DailyTxT服务器内存(登录态)支持强较强(运行期有密钥)
本地文件加密(无服务端)jrnl(加密模式)本地 keyring本地全文不适用不适用
不加密(依赖磁盘/传输加密)多数 wiki/笔记—支持弱弱

DailyTxT 选择第二行:牺牲"零知识"换服务端全文搜索与低资源开销,官方在 README 中如实标注了这一取舍,选型时应把它理解为"静态数据加密日记"而非严格意义的端到端加密。

三、核心架构

官方 README 与 Dockerfile(查询日期 2026-11-01)揭示的运行形态是"一个镜像、两个进程":

浏览器(SvelteKit SPA/PWA)
   │  HTTPS(需自行反代) / HTTP:80
   ▼
nginx ── 静态资源: /usr/share/nginx/html(SvelteKit 构建产物)
   │       /api/* 反向代理 → 127.0.0.1:8000
   ▼
Go 后端(单二进制 dailytxt, 监听 :8000)
   │  ChaCha20-Poly1305 加解密 / Argon2id 派生 / JWT(HttpOnly Cookie)
   ▼
/data 数据卷(JSON 文件树, 密文落盘)
  • 前端:SvelteKit 构建的 SPA,可安装为 PWA;11 种语言内置(英/德/法/捷/挪威/简中/繁中/意/荷/加泰/日)。
  • 后端:Go 1.25 编译的静态二进制(CGO_ENABLED=0),标准库 net/http + ServeMux 路由,无框架依赖;登录态用 HS256 JWT 存 HttpOnly Cookie。
  • 存储:官方明确"All data is stored in json-files. No database is used"——不用数据库的理由是"保证数据最高可移植性与长期可用性"。数据目录按 users.json + <user_id>/<年>/<月>.json + files/ + tags.json + templates.json + settings.encrypted 组织,正文与文件名密文、结构字段(日期、id、标签引用)明文。
  • 镜像构成:多阶段构建(node:24-alpine 编前端 → golang:1.25-alpine 编后端 → nginx:alpine-slim 运行时),最终镜像解包仅 42.4MB(Docker Hub tag 元数据实查,2026-11-01),资源占用极轻。

💡 技术拓展:认证加密(AEAD)算法不止 ChaCha20-Poly1305,常见选项对比——

算法特点适用场景
ChaCha20-Poly1305纯软件实现快、抗侧信道、Go 标准库原生DailyTxT 所用:无硬件加速的服务器/ARM NAS
AES-256-GCM有 AES-NI 时更快,业界默认传输层 TLS、磁盘加密
AES-256-CBC+HMAC旧式组合,易实现错误遗留系统
XChaCha20-Poly130524 字节 nonce,随机 nonce 更安全libsodium 生态

口令派生同样有多选:Argon2id(内存硬,2015 密码哈希竞赛冠军,DailyTxT 所用)/ scrypt / bcrypt / PBKDF2,详见 《DailyTxT 2.6.4 配置参数详解》 的实测参数。

四、功能特性

官方 README Features 清单(查询日期 2026-11-01)逐项归纳:

功能说明
加密存储一切正文与附件写盘前加密,管理员不可读
文件上传任意文件按天上传,单文件上限 500MB,图片自动识别进画廊
图片查看按天画廊视图与全屏浏览
Markdown编辑器 Markdown + 实时预览
标签按条目打标签,便于组织与检索
搜索全文搜索任意词、标签、文件名(服务端解密索引)
地图每天可钉地点,地图展示,支持 GPX 轨迹(2.5.0 引入)
自定义模板条目模板,可设默认模板(2.4.6)
阅读模式按月沉浸式连续阅读,可调日期顺序(2.6.0)
多语言11 种语言,含简体中文与繁体中文
HTML 导出条目连同附件导出为单文件 HTML
备份/导入加密或解密两种形态的 ZIP 备份,含自动备份 API 端点(2.3.0)
移动端响应式 + PWA 安装
多用户多账号,每账号独立加密密钥
管理面板用户管理、磁盘占用、临时开放注册(按秒计时)
统计面板GitHub 式书写分布热力图、字数/文件/标签统计
更新通知自动检查 Docker Hub 新版本并提示

五、快速开始(最小可用示例)

官方 README 给出的最小部署形态(TLDR:直接用仓库自带 docker-compose.yml 后 docker compose up -d),核心内容如下(引自官方 README,查询日期 2026-11-01):

services:
  dailytxt:
    image: phitux/dailytxt:2.x.x        # 选择正确版本 tag
    container_name: dailytxt
    restart: unless-stopped
    volumes:
      - ./data:/data                     # 数据目录(JSON 密文文件树)
    environment:
      - SECRET_TOKEN=...                 # openssl rand -base64 32 生成
      - INDENT=4                         # JSON 美化缩进(可选)
      - ALLOW_REGISTRATION=true          # 建议仅首个用户期间开启
      - ADMIN_PASSWORD=your_admin_password
      - LOGOUT_AFTER_DAYS=40
    ports:
      - 127.0.0.1:8000:80                # v2 内部端口为 80

打开 http://127.0.0.1:8000 → 注册第一个用户 → 即可写日记;官方强烈建议首个用户建好后关闭 ALLOW_REGISTRATION,后续加人可在管理面板临时开放。完整可复现的部署、验证与多用户实测流程见 《DailyTxT 2.6.4 Docker Compose 部署指南》,API 自动化见 《DailyTxT 2.6.4 API 使用详解》。

六、适用场景与限制

适合:

  1. 个人/家庭自托管加密日记,追求"数据在自己手里且服务器管理员读不了";
  2. NAS 用户(官方镜像原生支持 ARM64,42MB 体积、百 MB 级内存占用);
  3. 想要日历式记录 + 图片/附件/旅行地图的日记场景,而非无限层级笔记库;
  4. 重视数据长期可读性:JSON 文件 + 官方解密备份 + HTML 导出,无数据库锁定。

限制(均据官方资料,查询日期 2026-11-01):

  1. 非客户端 E2EE:运行期密钥在服务器内存中,威胁模型是"防静态数据泄露",不防被攻陷的运行中进程;
  2. 无原生 App:移动端靠 PWA,无应用商店客户端;
  3. 单机形态:官方仅提供单容器部署,无集群/HA 方案;多实例共享数据卷会互相踩踏(写锁仅在进程内);
  4. v2 与 v1 不兼容:环境变量几乎全部更换、内部端口由 8000 改为 80,升级必须走官方迁移流程并备份数据目录;
  5. 版本策略为"类 semver 但不保证向后兼容"(官方 README 原话),升级前备份是硬要求;
  6. 项目为单人维护(作者 PhiTux,捐赠模式),社区规模与 Joplin 等不在一个量级(见下节量化对比)。

七、同类选型对比

对比维度取可量化事实:星数(shields.io 徽章实查,查询日期 2026-11-01)、许可证、技术栈、存储、加密模型、多用户、版本节奏(各官方仓库/releases 页实查):

产品星数许可证技术栈存储加密模型多用户日记属性版本节奏
DailyTxT 2.6.4510MITGo + SvelteJSON 文件(无数据库)服务端 ChaCha20-Poly1305 静态加密 + Argon2id 派生是(独立密钥)日历日记专用2.0.0→2.6.4 约 11 个月 7 个稳定版,testing 标签先行
Joplin57kAGPL-3.0TypeScript(Electron)本地 SQLite + 文件客户端 E2EE(可选,按笔记)同步服务器多用户弱笔记+待办,日记靠插件高频,月级发版
jrnl7.4kMITPython本地文本/加密文件可选口令加密(本地)否(单机 CLI)CLI 日记鼻祖稳定但慢
Trilium Notes(Next)2.9kAGPL-3.0TypeScript + NodeSQLite加密属性(按需)单用户为主层级知识库社区接棒维护中

解读与选型建议("如果…则…"):

  • 要日历式日记 + 服务端加密 + Docker 一键起:选 DailyTxT。它是四者中唯一"日记优先"的自托管 Web 应用,且镜像最小(42MB vs Joplin Server 全家桶)、依赖最少(无数据库)。
  • 要零知识端到端加密:选 Joplin(开启 E2EE)或 Standard Notes(客户端 E2EE,AGPL);接受"服务端搜不了"的代价。
  • 纯命令行/脚本化记录:jrnl 最轻,但没有 Web UI、图片、地图、多用户。
  • 要复杂知识网络:Trilium 更合适,但它不是日记模型。
  • 社区活跃度:Joplin(57k★)>> jrnl(7.4k★)>> TriliumNext(2.9k★)>> DailyTxT(510★)。DailyTxT 星数最小,但发版节奏稳定(几乎每月有动静,testing 标签先行)、官方 live demo 长期在线、Docker Hub 拉取 34 万+,作为单人维护的垂直工具属于健康状态;对"停更风险"敏感的团队可优先 Joplin。
  • 数据可移植性:DailyTxT 的 JSON 文件树 + 解密 ZIP 备份 + HTML 导出三件套是四者中最直白的(Joplin 依赖 Markdown 目录+SQLite 索引,jrnl 是单文件,Trilium 锁 SQLite)。

八、参考链接

DailyTxT 介绍与选型指南 - Quzuo