DailyTxT 介绍与选型指南
DailyTxT 自托管加密日记 Web 应用认知与选型:Svelte+Go v2 架构、ChaCha20-Poly1305+Argon2id 加密模型谱系、功能全景与 Joplin/jrnl/Trilium 量化对比(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-Poly1305 24 字节 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 使用详解》。
六、适用场景与限制
适合:
- 个人/家庭自托管加密日记,追求"数据在自己手里且服务器管理员读不了";
- NAS 用户(官方镜像原生支持 ARM64,42MB 体积、百 MB 级内存占用);
- 想要日历式记录 + 图片/附件/旅行地图的日记场景,而非无限层级笔记库;
- 重视数据长期可读性:JSON 文件 + 官方解密备份 + HTML 导出,无数据库锁定。
限制(均据官方资料,查询日期 2026-11-01):
- 非客户端 E2EE:运行期密钥在服务器内存中,威胁模型是"防静态数据泄露",不防被攻陷的运行中进程;
- 无原生 App:移动端靠 PWA,无应用商店客户端;
- 单机形态:官方仅提供单容器部署,无集群/HA 方案;多实例共享数据卷会互相踩踏(写锁仅在进程内);
- v2 与 v1 不兼容:环境变量几乎全部更换、内部端口由 8000 改为 80,升级必须走官方迁移流程并备份数据目录;
- 版本策略为"类 semver 但不保证向后兼容"(官方 README 原话),升级前备份是硬要求;
- 项目为单人维护(作者 PhiTux,捐赠模式),社区规模与 Joplin 等不在一个量级(见下节量化对比)。
七、同类选型对比
对比维度取可量化事实:星数(shields.io 徽章实查,查询日期 2026-11-01)、许可证、技术栈、存储、加密模型、多用户、版本节奏(各官方仓库/releases 页实查):
| 产品 | 星数 | 许可证 | 技术栈 | 存储 | 加密模型 | 多用户 | 日记属性 | 版本节奏 |
|---|---|---|---|---|---|---|---|---|
| DailyTxT 2.6.4 | 510 | MIT | Go + Svelte | JSON 文件(无数据库) | 服务端 ChaCha20-Poly1305 静态加密 + Argon2id 派生 | 是(独立密钥) | 日历日记专用 | 2.0.0→2.6.4 约 11 个月 7 个稳定版,testing 标签先行 |
| Joplin | 57k | AGPL-3.0 | TypeScript(Electron) | 本地 SQLite + 文件 | 客户端 E2EE(可选,按笔记) | 同步服务器多用户弱 | 笔记+待办,日记靠插件 | 高频,月级发版 |
| jrnl | 7.4k | MIT | Python | 本地文本/加密文件 | 可选口令加密(本地) | 否(单机 CLI) | CLI 日记鼻祖 | 稳定但慢 |
| Trilium Notes(Next) | 2.9k | AGPL-3.0 | TypeScript + Node | SQLite | 加密属性(按需) | 单用户为主 | 层级知识库 | 社区接棒维护中 |
解读与选型建议("如果…则…"):
- 要日历式日记 + 服务端加密 + 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)。
八、参考链接
- 官方仓库:https://github.com/PhiTux/DailyTxT(README、Changelog、docker-compose.yml、Dockerfile,查询日期 2026-11-01)
- Releases 订阅源:https://github.com/PhiTux/DailyTxT/releases.atom(最新稳定版 2.6.4,2026-10-10)
- 官方镜像:https://hub.docker.com/r/phitux/dailytxt/(75 tags / 342,513 pulls,查询日期 2026-11-01)
- 在线演示:https://dailytxt.phitux.de
- v1 分支(Python/Flask 旧实现):https://github.com/PhiTux/DailyTxT/tree/v1
- 星数徽章:https://img.shields.io/github/stars/PhiTux/DailyTxT、https://img.shields.io/github/stars/laurent22/joplin、https://img.shields.io/github/stars/jrnl-org/jrnl、https://img.shields.io/github/stars/TriliumNext/Notes(查询日期 2026-11-01)