支持音视频的消息服务Databag

什么是 Databag ?

Databag 是用于去中心化网络的微型轻量级自托管联合信使。显著的特征包括去中心化(应用程序和服务器节点之间的直接通信)和联合(不同节点上的帐户可以通信)。可实现企业内音视频服务,保护企业通信隐私。

软件特点:

  • 去中心化(应用程序和服务器节点之间直接通信)
  • 联合(不同节点上的账户可以通信)
  • 基于公钥-私钥的身份(不绑定到任何区块链或托管域)
  • 端到端加密(如果密封,托管管理员无法查看主题)
  • 音视频通话(NAT 穿越需要单独的中继服务器)
  • 基于主题的线程(按主题而不是联系人组织的消息)
  • 轻量级(服务器可以在树莓派 zero v1.3 上运行)
  • 低延迟(使用 websocket 进行推送事件以避免轮询)
  • 每个节点无限个帐户(为您的整个家庭提供主机)
  • 新联系人、消息和通话的移动提醒(支持 UnifiedPushFCMAPN

也支持移动端

安装

在群晖上以 Docker 方式安装。

在注册表中搜索 databag ,选择第一个 balzack/databag,版本选择 latest

本文写作时, latest 版本对应为 0.1.8

docker 文件夹中,创建一个新文件夹 databag,并在其中建一个子文件夹 data

文件夹 装载路径 说明
docker/databag/data /var/lib/databag 存放数据库和上传文件等

端口

本地端口不冲突就行,不确定的话可以用命令查一下

1
2
# 查看端口占用
netstat -tunlp | grep 端口号
本地端口 容器端口
8770 7000

环境

可变
ADMIN 管理员的密码

命令行安装

如果你熟悉命令行,可能用 docker cli 更快捷

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 新建文件夹 databag 和 子目录
mkdir -p /volume1/docker/databag/data

# 进入 databag 目录
cd /volume1/docker/databag

# 运行容器
docker run -d \
--restart unless-stopped \
--name databag \
-p 8770:7000 \
-v $(pwd)/data:/var/lib/databag \
-e ADMIN=123456 \
balzack/databag:latest

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
version: '3'

services:
databag:
image: balzack/databag:latest
container_name: databag
restart: unless-stopped
ports:
- 8770:7000
volumes:
- ./data:/var/lib/databag
environment:
- ADMIN=123456

然后执行下面的命令

1
2
3
4
5
6
7
8
9
10
# 新建文件夹 databag 和 子目录
mkdir -p /volume1/docker/databag/data

# 进入 databag 目录
cd /volume1/docker/databag

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

反向代理

老苏没有公网服务器做内网穿透,但这次需要和第三方的 WebRTC Server 互通,同时网页上使用音视频功能又需要 https 协议,所以本次采用的方案是 Cloudflared + npm,一方面可以使用 https 协议,另一方面也能获取到可公开访问的地址,不了解的可以去看看老苏之前写的文章

文章传送门:免费的Cloudflared实现外网访问群晖(续)

代理主机设置

SSL 不需要设置

Advanced 需要填入下面的内容

1
2
3
4
5
6
7
8
9
10
11
12
server_name databag.laosu.cf;
add_header Strict-Transport-Security "max-age=0";

location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_pass http://192.168.0.197:8770;
client_max_body_size 0;
proxy_max_temp_file_size 0;
}

其中:

  • server_name 后面的 databag.laosu.cf 就是我们设定的域名;
  • proxy_pass 后面的 http://192.168.0.197:8770 对应的就是我们局域网访问的地址;

运行

管理后台

在浏览器中输入 http://群晖IP:8770 或者用 https://域名 就能看到登录界面

点右上角的齿轮,切换到 Admin 用户,然后输入环境变量设置的密码

新建账号

登录成功后,点最右侧的小人图标创建新账号 Create Account Link

会弹出创建新账号的链接

如果用域名访问

复制上面的 Browser Link,在浏览器的新窗口打开,来创建新的账号

登录成功后的用户界面

老苏建了 2 个账号用于测试

【注意】:一定要在 Account 中启用 Visible in Registry ,否则别人加好友的时候是搜不到你的;

移动端

Android 客户端可以在 Google Play 或者 F-Droid 下载,iOS 则需要到 App Store 下载

注意选择正确的平台,一般 Android 手机应该是用的 arm64-v8a

移动端也是可以注册账号的,但是老苏是先建好的,所以可以直接登录

【注意】:第一行要输入 用户名/服务器地址

登录成功后的主界面

接下来就可以开始聊天了

移动端的界面

音视频呼叫

Databag 支持音频和视频通话功能,但依赖于 STUN/TURN 中继服务器进行 NAT 穿越

如果想启用音频和视频通话,如果自己没搭建,但是又想体验的话,可以在管理端设置

  • Enable WebRTC calls:启用;
  • WebRTC Server URL:设为 turn:34.210.172.114:3478?transport=udp
  • WebRTC Username:设为 user
  • WebRTC Password:设为 pass

如果在移动端发起,打开联系人,点 Call Contact

进入呼叫界面

网页端上会弹出一行按钮

【注意】:网页端必须使用 https 协议

接听后会申请权限

接通后默认是不打开摄像头和麦克风的,需要自己开启

参考文档

balzack/databag: A tiny selfhosted federated messenger for the decentralized web.
地址:https://github.com/balzack/databag