成功在群晖的 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 服务大概要告一段落了.
10321 次点击
所在节点    NAS
62 条回复
dangyuluo
2021-12-22 05:12:19 +08:00
下一步就是怎么让亲朋好友注册账号了
YamatoRyou
2021-12-22 06:09:14 +08:00
@dangyuluo
服务有 2 个主要目的:
解决我没有微信之后 IM 需求. 实行计划分配制, 不开放注册. 总使用人数最多也就 5 个左右. 就算开放注册, 没有我的指导他们也是寸步难行.
除了消息同步, 还能作为多个设备的云剪贴板.
loading
2021-12-22 08:35:30 +08:00
有点谍战片的感觉了,自建 im 一般是是企业级应用,亲朋好友可能要友尽。
matolv
2021-12-22 09:53:54 +08:00
synapse 建在墙内没法启用 federation ,matrix 被 gfw 屏蔽了,会导致 ios 和 play store 的 element 都收不到消息。
这东西我用了好几年了,现在版本比起当初了 0.x 已经算是可以用了,之前吃内存那是一个快,bug 又多,界面又不人性化。
不建议 docker 安装,python3 虚拟环境是他最佳用法,然后 nginx 反代。另外视频 /语音通话需要 turn server ,原理是 webrtc 。
如果你服务器端玩了比较生疏建议用 tg ,大陆 ios 是搜不到 element 的
YamatoRyou
2021-12-22 10:02:41 +08:00
@matolv
我不打算联邦式, 虽说这是它的特色.
Docker 对我来说也许是最佳选择, 直接绕过群晖的 webui 给系统加料可能会把系统给搞死, 尤其是我不熟悉的情况下.
我在 2018 到今年年初换用 Delta Chat 之前用的是 TG, 它哪都好, 唯二的致命伤就是中文搜索和代理. 因为我长期独居, 代理一旦挂掉了就相当于失联, 我总不能动不动就跑回去给他们换代理吧.
iOS 的话, 我在试用 Android 版 Element 的一瞬间就已经预感到它在 iOS 上推送也是个大问题. 鉴于周围亲属什么的用 iPhone 的非常少, 我还是暂时不考虑了吧.
YamatoRyou
2021-12-22 10:04:50 +08:00
@loading 因为我早在几年前就强行弃用了微信, 友尽这种结果早就经历过, 不在乎再来一次.
qeqv
2021-12-22 12:10:17 +08:00
@YamatoRyou OP 是肉翻了吗,国内现在不用微信哪里都去不了,健康码强制让你用微信。另外怎么和父母沟通
YamatoRyou
2021-12-22 17:04:24 +08:00
@sevefev
并没有, 而且我对 "健康码" 的需求极小 (属于能不用尽量不用). 如果在外要用, 通常是纸质健康码. 因为还没交接完成, 当下与家里人沟通用的仍然是 Delta Chat.
zololiu
2021-12-23 14:05:16 +08:00
比较好奇为什么不直接使用群晖自带的 Chat 套件呢
YamatoRyou
2021-12-23 18:04:37 +08:00
@zololiu
因为我用的是黑群晖, 即使是 Android 也无法接收推送, 我不能接受.
我要和家里人用, 但它的界面专注办公场合, 易用性不足.
不能发语音消息.
我已经放弃它大概两年多了吧, 不知道现在有没有改善. 我猜不会.
YamatoRyou
2021-12-23 18:13:07 +08:00
@zololiu 关于没有推送, 可以想象一下这个问题在微信上会是什么结果:
对方想要急切地联系你, 给你发无论文字或语音, 此时微信在后台, 手机却毫无动静.
过了许久, 你打开微信, 这才知道对方早就已经连续发了好长一串, 而对方却心如死灰...
同样地也适用于来电. 我曾经遇到过一台山寨手机, 对方给它打电话有接通的声音, 但这台手机毫无反应 (无论是听觉; 触觉还是视觉层面). 那么机主自然不会知道他有电话要接.
des
2021-12-29 17:58:10 +08:00
我打算试试 Rocket.Chat
推送可以转发到网关,然后推到 bark 上,然后 url 跳转
Android 可能你得自己想办法了,应该也有对应的 App
不过需要写少量的代码
des
2021-12-30 14:15:28 +08:00
@YamatoRyou 发现了另外一个好用的,叫 mattermost 。
支持推送,不过是推到他们的测试环境,然后走 APN/GCM
YamatoRyou
2022-02-26 00:43:14 +08:00
@des
我最近收了一个 旧 iPhone 专门测试 Element. Bark 也是我一开始考虑的选择, 但我发现它无法和 Synapse 联动 (比如监控如何触发一个推送通知, 以及这个通知是一般消息还是呼叫?). 由于我一直没解决这个问题, 遂放弃 Bark.
后来我才知道只要用的是官方发布的 Element 就不用担心推送渠道问题. 只是 matrix.org 已经被墙, 可以用代理让容器连接到 matrix.org.

自建的 Synapse 在 iOS 上的推送流向是这样的:
Synapse 服务器 -> matrix.org -> APNS -> iOS 设备
也就是说服务器管理员只需解决自建的 Synapse 与 matrix.org 的连接问题即可, 更关键的是: 它免费且不限量.
des
2022-02-26 09:47:24 +08:00
@YamatoRyou 应该是有 webhook 之类的东西可以用的,可以参考一下这个是怎么配置的 https://github.com/matrix-org/sygnal
或者直接在这个上面改,把 bark 的 apns key 复制过来,按照 bark 的数据格式,参考一下 bark 的代码。
des
2022-02-26 09:52:08 +08:00
@YamatoRyou 写几行代码转换一下就好了,不用挂代理。原文是用的 Gotify ,换成 bark 应该也挺容易的
https://blog.southfox.me/2021/11/%E4%B8%BAMatrix%E5%8A%A0%E5%85%A5%E6%8E%A8%E9%80%81%E5%8A%9F%E8%83%BD/
MAIJIANBANG
2022-05-23 16:58:42 +08:00
@YamatoRyou 一直搞不定提醒问题,能否加一下你的 Element 请教一下提醒的问题?
MAIJIANBANG
2022-05-23 17:02:09 +08:00
@YamatoRyou 我的 element: @maijianbang:THE ,盼回复
YamatoRyou
2022-05-24 00:28:42 +08:00
@MAIJIANBANG 你的客户端收不到推送?
Android 版本请从 F-Droid 下载, 如果应用常驻后台则可以接收推送. 设置 -> 通知的最下面有 "通知故障排除" 用于诊断推送的工作状态.
iOS 无需任何设置. 但对于墙内的自建服务器, 应确保服务器能访问 matrix.org.
MAIJIANBANG
2022-05-24 16:50:32 +08:00
@YamatoRyou 从 F-Droid 下载之后确实可以提醒了,谢谢。我是群晖搭建的,有什么办法让服务器能访问 matrix.org

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

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

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

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

© 2021 V2EX