成功在群晖的 Docker 上自建了 Synapse 服务器.

2021-12-22 04:58:39 +08:00
 YamatoRyou
前情提要:
https://www.v2ex.com/t/750475
https://www.v2ex.com/t/605207

--------
Delta Chat 用了大半年的感受就是 bug 实在是太多了 (Windows 最多, Andorid 次之), 我甚至体验到网上很多人说的 "Windows 10 每更新一次都会带来新的 bug" 的感觉 (然而 DC 每次更新也都不痛不痒). 有时 Delta Chat 上一条本该立刻就收到的消息, 结果过了好几个小时才收到. 感觉这玩意根本达不到 "能用" 的程度.

以前的帖子里有人再次提到 Rocket.Chat; XMPP 和 Matrix.
于是我接下重试之前失败过的 Rocket.Chat. 这次部署成功, 但试用不到 1 小时就发现: 它在 Android 端不能后台推送通知 (只有当界面在前台显示才能在顶部显示通知, 而且这个通知横幅是嵌入界面内部的), 遂放弃 (对 Rocket.Chat 我反正是彻底死心了);
然后是 XMPP 协议的 ejabberd, 服务端问题不大, 客户端虽然选择很多, 但问题和 Delta Chat 一样, 大多数都很简陋. 挑了好久最后在 Android 上选择了 Conversations (使用过程中也发现了一些问题但我忘了是哪些), Windows 上是 Gajim (让我搞不懂的操作逻辑; 经常崩溃).
最后重试 Matrix 协议的 Synapse. 不知道我做了什么操作, 部署竟然很快就成功了. 对我这种 Linux 菜鸟简直就是惊喜. 为避免未来忘记部署的方法, 我一边实战, 一边写了一份非常详细的 step by step 教程备用.

我主观判断 Element (原 Riot) 的完成度在众多 Matrix 协议 IM 客户端中是最高的, 桌面版和 DC 一样是 Electron App (我不是职业开发者, 对 Electron 的认识只停留在用它编写的软件, 界面放在一个阉割过的 Chromium 内部并且支持跨平台). DC 上蛋疼的通知推送; 消息同步; 大文件传输; 图片粘贴; 托盘图标等问题, Element 统统不存在.
Android 版有不依赖 FCM 的 F-Droid 分支可选. 即使是国产安卓, 经过一番设置 (电池优化 + 通知权限) 也能收到通知推送.
iOS 就不清楚了, 我手上只有一个 iPhone 4S, 没法测试.

现状:
3 部 Android 手机 (未来还会增加); 1 台 Windows 10 笔记本; 1 台 Windows 7 台式机都用上了 Element.
还有一台 Windows 8.1 平板电脑, 因为桌面版 Element 不支持 32 位 Windows 的关系, 只能在浏览器使用 Element-web.
Docker 里额外部署了 matrix-commander, 能用命令行发送消息.

当然 Element 并不完美, 试用了 3~4 天后发现以下问题:
* 私聊聊天室头像有时会消失 (Windows; web);
* 无法更换头像 (Android);
* 无法记忆左侧边栏的宽度; 分类预览和项目排序, 这些设置会因为重新登录而丢失 (Windows; web);
* 无法默认禁用端到端加密 (Android; Windows; web, 双方同时在线的情况下因为要私聊而创建的房间是强制启用端到端加密的, 一旦启用就不能禁用. 看了一些文档说是需要服务端设置才行, 但我还没搞懂怎么弄);
* 手机与手机之间的语音呼叫大部分时候在连接阶段都非常慢 (Android, 同样的服务器, 同样的网络条件, 手机与 PC 却能瞬间接通);
* 消息列表右侧会强制预留一大片空白, 可能留给已读回执的显示 (Windows; web);
* 不支持设置详细的在线状态和个人简介 (Android; Windows; web);
* 界面语言总是被重置为英文 (会发生在重启 Element 时, 在 Windows 10 上发现, Windows 7 没有);
* 窗口坐标被重置 (会发生在重启 Element 时, 在 Windows 10 上发现, Windows 7 没有);

以上问题的发现, 均以使用自建的服务器为前提.
因为已经阶段性地满足了需求, 折腾自建 IM 服务大概要告一段落了.
9361 次点击
所在节点    NAS
62 条回复
YamatoRyou
2022-05-24 17:42:44 +08:00
@MAIJIANBANG
既然是群晖, 那我猜你的 Synapse 实例是 Docker 容器的形式. 但悲催的是 Docker 容器似乎只支持 HTTP/HTTPS 协议的代理. 这种可以为容器添加环境变量 `HTTPS_PROXY`, 值填写 `http://ip:端口`. 为了以防万一可以再添加一个变量 `HTTP_PROXY`, 值同上.
我的方案是再起一个 Privoxy 容器, 专供 Synapse, 把上游 Socks5 代理转换为 HTTP 代理.

Privoxy 配置文件参考:
`
listen-address 0.0.0.0:8081
forward / .
forward-socks5 ifconfig.me ip:端口 .
forward-socks5 matrix.org ip:端口 .
`

代理搭建完成后测试代理是否生效:
从 Synapse 容器启动终端, 输入命令:
`
curl https://ifconfig.me
curl https://matrix.org/_matrix/push/v1/notify
`
第 1 个命令用于判断 Privoxy 的代理规则, 正确应返回代理服务器的 IP 地址.
第 2 个命令如果返回 `405 - Method Not Allowed` 则成功, 这个要重复几次.
如果手头有 iOS 设备和外区苹果 ID 建议用它测试 Element, 因为这是确保 iOS 版本能收到推送的唯一方式.
YamatoRyou
2022-05-24 17:44:26 +08:00
@YamatoRyou 我本来是写了文案打算做成视频教程, 但我的口条水平似乎不允许. 再加上文案还在完善, 就先搁置了.
MAIJIANBANG
2022-05-25 10:33:17 +08:00
@YamatoRyou 稳定的 https 代理不好找啊,有推荐的吗?我和家里人主要用 IOS ,另外我想利用 webhook 走 bark 通知,但是我打开 webhook 界面,提示“此集成管理器为离线状态或者其不能访问你的主服务器。”,这个怎么解决?
YamatoRyou
2022-05-26 01:19:38 +08:00
@MAIJIANBANG
无法解决, 因为我解决通知问题不靠这个.
Bark 或 Gotify 这类并不是最佳选择, 语音视频呼叫及端到端加密消息靠这个转发可能会出现障碍.
我认为你还不如选择 V 或 S 之类的节点放在 Docker 上. 至少能让苹果直接给你推送.
这是我目前正在用的方案, 虽然节点有时仍然需要更换, 但有些节点能撑半个多月. 不行了就再换一个.

这番体验下来我认为 Android 才是最适合 Element 的平台.
YamatoRyou
2022-05-26 01:35:38 +08:00
@YamatoRyou
效果如图.
YamatoRyou
2022-05-26 01:49:45 +08:00
MAIJIANBANG
2022-05-26 11:22:41 +08:00
@YamatoRyou 羡慕啊,我再研究研究,主要是我是技术小白,搭建啥的都是跟网上教程走才会,头疼,期待大佬早日出遍详细点的教程!!!
YamatoRyou
2022-06-13 01:52:17 +08:00
@MAIJIANBANG
在这个问题上我犯了个错误, Element 来电画面取决于设备的 IP 地址. 有以下可能:
a) 手机所处的网络环境有透明代理的梯子, 或手机正在挂梯子改变了 IP 地址, 导致苹果的推送服务认为该手机来自国外. 这种情况下来电能显示全屏画面;
b) 国内 IP 则只能显示通知, 需要手动进入 Element 才能接听.

可能是 CallKit 受政策限制导致的, 我试过更改 iOS 的地区和语言, 亲测无效.
wgsgyes
2022-06-19 00:27:47 +08:00
delta chat 要用好,关键是要挑选合适的邮件服务器。
国内的 163 、QQ 用的 iamp 协议,似乎做了修改,delta chat 无法完美支持。
国外的邮件服务器,有通达及时性缺陷( hotmail 勉强可以)。
自建邮件服务器的话,估计很难解决垃圾邮件的问题。

完美的解决方案是:使用境内世纪互联的 office365 邮箱。
YamatoRyou
2022-06-19 03:49:05 +08:00
@wgsgyes
对于自建的邮件服务器, 我当时的策略是这样的:
由于专为 Delta Chat 服务, 所以 SMTP / IMAP 端口都是故意设置了非标准端口 (另一个原因是为了规避政策风险). 这会导致常见的邮件服务无法发送邮件到此服务器, 该服务器也无法发送邮件到这些邮件服务. 也就杜绝了垃圾邮件. 从去年年 2 月到 12 月底服务器存续期间从未收到过任何垃圾邮件 (测试时使用的是 QQ 邮箱和 Outlook).
wgsgyes
2022-06-19 09:43:11 +08:00
@YamatoRyou 垃圾邮件不是问题,收信策略严格就行。
自建的邮件服务器,不管是 VPS 还是在自己家搭建,若发信量较大,哪天服务商把端口封了,工作就白费了。
还不如全家统一公用的邮件服务器,比如 outlook ,Delta Chat 已经对所有信息加密了
wgsgyes
2022-06-19 09:50:30 +08:00
@YamatoRyou 抱歉,前面可能没表达清楚:自建邮件服务器,在发信量较大时,vps 或你的网络服务商,可能会误判你发垃圾邮件,造成服务不可用
YamatoRyou
2022-06-19 13:44:52 +08:00
@wgsgyes 看你这么说有点后怕, 不过还好我早就停了.
kernelt4sk
2022-06-28 17:46:05 +08:00
大佬有相关教程了吗。 一直尝试在群晖中搭建 一直未果 基本情况与大佬相同 稳定的就黑群一台 Linux 。
YamatoRyou
2022-06-28 18:54:27 +08:00
@kernelt4sk
已有一份比较完善的纯文字版 (无配图), 有做成视频的想法. 如果你急用可以先发给你参考.
https://1drv.ms/t/s!AqJDCzhI3LndjmU7ZgBweNIhJiWN?e=GpO41G

内容还在修改中, 不视为最终成品.
YamatoRyou
2022-06-28 18:56:52 +08:00
@YamatoRyou
在线预览如果乱码请下载到本地并更换编辑器再查看.
kernelt4sk
2022-06-29 09:39:07 +08:00
@YamatoRyou 感谢大佬 成功跑起来了,还有些小问题 就是安卓无法解密消息 很奇怪。音视频巨卡甚至无法链接 估计 coturn 的问题。 再调试下
YamatoRyou
2022-06-29 15:54:04 +08:00
@kernelt4sk
这个问题通常发生在第 2 个及以上登录的设备, 可能是该设备没有交叉验证. 验证未通过的设备不会同步密钥到该设备导致消息无法在该设备上解密.
coTURN 有公网 IPv4 时效果比较好, 我猜你配置的 coTURN 根本没有生效. 可以观察 coturn 容器的日志.
SSH 执行命令:
docker logs -t -f --tail 100 [容器名称]
用你的设备开始呼叫, 观察日志的变化.
kernelt4sk
2022-06-29 17:11:50 +08:00
@YamatoRyou 确实 看了相关日志 coturn 没生效, 虽然端口开放了 应该是配置文件哪里有问题。 顺便再尝试下整合 id server
Achophiark
2022-07-01 10:45:15 +08:00
一直想搞一下加密聊天,看了这篇文章又不知道该怎么选择了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/823651

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX