Databag 0.1.18 介绍与选型指南

Databag 自托管联邦制端到端加密 IM 全景解析:架构、数据模型、E2E 机制、版本双轨说明与同类量化选型对比。

DatabagDatabag端到端加密即时通信自托管去中心化2026/10/25

Databag 0.1.18 介绍与选型指南

目标:说清 Databag 是什么、架构如何设计、适合谁用、与同类自托管 IM 相比怎么选。本文信息均实查自官方仓库、Docker Hub 与项目设计文档(查询日期:2026-10-25),部署与 API 的实测细节见专栏后续篇目。

一、环境信息

  • 调研日期:2026-10-25
  • 官方仓库:https://github.com/balzack/databag(GitHub Star 1.5k,Apache-2.0,最近提交 2026-06-14,处于活跃维护状态)
  • 服务端镜像:balzack/databag(Docker Hub,最新标签 0.1.18,推送于 2025-10-15,amd64/arm64 双架构)
  • 客户端:Web(React,服务端内置托管)、Android(Google Play / F-Droid)、iOS(App Store)
  • 服务端技术栈:Go(gorilla/mux + GORM + SQLite)、WebSocket 事件推送、ImageMagick/FFmpeg 媒体转码

二、软件概述

Databag 是一个面向自托管场景的联邦制(Federated)端到端加密即时通讯系统,由个人开发者 balzack 主导开发。它的设计目标非常明确:让普通人用一台低功耗设备(官方宣称树莓派 Zero 即可跑)就能给自己和家人朋友搭一个私密 IM 节点。

与主流 IM 的核心差异:

  • 去中心化 + 联邦制:每个人/家庭跑自己的节点,不同节点上的账号可以互相通信(类似电子邮件/Matrix 的联邦模型),没有中心服务器。
  • 身份不依赖域名或区块链:账号身份 = 公私钥对的指纹(fingerprint),创建账号时生成密钥对,私钥永不离开所在节点,所有数据签名在服务端完成。
  • 真正的端到端加密(E2E):消息内容只在客户端加解密,节点管理员也无法查看「密封(sealed)」频道内容。
  • 话题(Topic)制消息组织:消息按频道(Channel)下的话题组织,而不是按联系人会话流。
  • 不限人数:群组成员数无上限、单节点账号数无上限。

一句话定位:Signal 的加密理念 + 电子邮件的联邦拓扑 + 极低的自托管门槛。

三、核心架构

3.1 组件与数据流

Databag 系统由三类组件构成:

  • 节点(Node):自托管的服务端(即本文档系列的主角),Go 编写,内嵌 SQLite 存储,同时托管 Web 客户端静态资源。
  • 客户端(App):Web/Android/iOS,通过 REST API + WebSocket 双通道连接节点。
  • TURN 中继(可选):音视频通话依赖 STUN/TURN 做 NAT 穿透,需单独部署(如 coturn)或使用公共服务。

一次跨节点消息投递的数据流(来自官方设计文档 doc/design_overview.md):

  1. 发送方客户端通过 REST API 把数据提交到发送方节点;
  2. 发送方节点通过 Notification 通道通知接收方节点「有更新」;
  3. 接收方节点通过 WebSocket 通知接收方客户端;
  4. 接收方客户端主动通过 REST API 从发送方节点拉取数据。

⚠️ 注意:节点之间只同步事件通知,不同步内容。内容始终存放在发送方所在节点,由接收方客户端跨节点拉取——这与 Matrix 的「全量房间状态复制」模型有本质区别,也是 Databag 能做到极轻量的关键原因。

3.2 数据模型

服务端只定义数据的关系结构与同步规则,数据格式对应用层透明(加密载荷)。核心对象:

对象作用共享关系
Profile账号资料可公开分享(用于联系人发现)
Card网络中另一个账号的引用(联系人)账号私有
Alias联系人分组账号私有
Channel一组共享数据的集合(会话/频道)共享给指定 Alias/Card
TopicChannel 下的一条消息(可带附件)随 Channel
CommentTopic 下的评论随 Channel
Attribute账号发布的属性数据共享给指定 Alias

同步机制采用版本号(revision)增量模型:账号下所有 Channel 共享同一 revision 计数器,客户端记录自己同步到的 revision,之后只拉取「revision 大于 X」的变更;删除用「slot 保留、value 置空」的墓碑方式传播。

3.3 身份与 E2E 加密

  • 账号身份 = RSA 公钥的 SHA-256 指纹;私钥在服务端生成并保存(支持 RSA2048/RSA4096,见 C1 配置篇 keyType)。
  • 密封密钥(Sealing Key):客户端生成的 E2E 密钥对,公钥随资料公开;私钥用 PBKDF2 派生密钥加密后存于节点,同账号多客户端可恢复。
  • 频道加密:每个 Channel 有独立对称密钥,用每个参与账号的 sealing 公钥分别加密后随频道分发。

💡 技术拓展:E2E 算法在 IM 领域有多条路线——

算法路线特点代表
公钥加密对称密钥(无前向 secrecy)实现简单、多设备友好Databag
Signal 协议(双棘轮)前向/后向 secrecy,实现复杂Signal、WhatsApp
Megolm(群组棘轮)群聊前向 secrecy,服务端仍见元数据Matrix
MLS(IETF RFC 9420)标准化群聊 E2E 协议新兴 IM 采用中

Databag 选择无棘轮方案的理由(官方设计文档):内容只驻留发送方节点,对前向 secrecy 的需求被弱化,换取多客户端与实现的灵活性。

四、功能特性

实查官方 README 与仓库确认的能力清单:

  • 文本/图片/音频/视频/二进制附件消息(媒体类型可按节点开关)
  • 端到端加密「密封频道」、未密封频道可选(allowUnsealed)
  • 音视频通话(WebRTC,需自建 STUN/TURN 中继)
  • 移动推送(UnifiedPush / FCM / APN,服务端内置 WebPush VAPID 密钥对自动生成)
  • 多因素认证(TOTP,兼容 Google Authenticator 类应用)
  • 联邦通信:跨节点联系人、跨节点频道
  • 管理端:账号创建链接、账号禁用/重置密码、存储配额、开放注册(open access)
  • 官方一键平台支持:CapRover、CasaOS、Unraid、Runtipi、Kubero、Umbrel

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

最简体验方式是官方镜像 + 一条命令(完整生产化部署见本专栏《Databag 0.1.18 Docker Compose 部署指南》):

docker run -d --name databag \
  -p 7000:7000 \
  -e ADMIN=q1w2e3r4 \
  -v databag-data:/var/lib/databag \
  balzack/databag:0.1.18

启动后访问 http://<主机>:7000,点右上角齿轮输入管理员口令进入管理台,设置节点域名后生成账号创建链接,发给使用者即可开户。

💡 说明:Databag 客户端要求服务端有「DNS 域名 + 证书」才能正常使用(移动端尤其严格),裸 HTTP/IP 直连只适合本机体验;正式使用需配反向代理 + TLS 证书,或启动时用 -c/-k 直挂证书。

六、适用场景与限制

适合:

  • 家庭/小团队私密 IM:一台树莓派/NAS/小 VPS 即可承载全家账号
  • 隐私优先社区:节点管理员看不到密封频道内容,适合对「自托管但仍防管理员」有要求的场景
  • 无公网大资源的环境:实测空载内存约 23MB(见安装篇实测),官方称可在 Raspberry Pi Zero v1.3 运行

限制(实查结论,非臆测):

  • 版本号双轨制容易踩坑:GitHub Releases 的 v1.1.x 是客户端 App 版本线(附件只有 webapp.tar.gz 前端包);Docker Hub 的 0.1.x 才是服务端版本线。部署服务端请以镜像标签 0.1.18 为准,不要按 GitHub「Latest Release v1.1.1021」去找服务端包。
  • 服务端项目体量小:个人主导项目,无商业支持;GitHub Release 节奏(2024 年后未再发 v1.x 版)与镜像推送(2025-10 仍更新)不同步,版本判定要以 Docker Hub 标签时间为准。
  • 联邦生态小:不像 Matrix 有大规模公共联邦网络,Databag 联邦主要靠自建节点互联。
  • 无桌面原生客户端:桌面端用 Web 版(浏览器或套壳)。
  • 管理 API 行为有版本差异:实测 0.1.18 镜像中 enableOpenAccess 等少数字段不随 PUT /admin/config 持久化(main 分支源码已接入),详见配置篇 FAQ。

七、同类选型对比

自托管 IM 的主要候选量化对比(Star 数实查自 shields.io,2026-10-25):

产品Stars技术栈拓扑E2E资源占用适合人群
Databag1.5kGo + SQLite联邦(节点间仅通知)内置默认极低(树莓派 Zero 级)家庭/极客小圈
Matrix (Synapse)12kPython + PostgreSQL联邦(全量状态复制)Megolm 可选开启高(GB 级内存)社区/组织级
SimpleX Chat20kHaskell无身份中继网络双棘轮默认中极致匿名通信
Rocket.Chat46kNode.js + MongoDB中心化可选中高企业团队协作
Mattermost39kGo + PostgreSQL中心化无(依赖 TLS)中企业 Slack 替代
Ejabberd (XMPP)6.7kErlang联邦依赖客户端 OMEMO低标准协议派

选型建议:

  • 要「一家人私聊 + 极低资源 + 开箱 E2E」→ Databag
  • 要「大社区联邦 + 成熟生态 + 客户端多」→ Matrix/Synapse
  • 要「不注册账号、无元数据」→ SimpleX
  • 要「企业 IM、频道权限、集成机器人」→ Rocket.Chat / Mattermost
  • 要「开放协议、跨厂商客户端互通」→ XMPP(Ejabberd)

八、参考链接