在 @debryc 于 此处 提问之后,我们简要说明一下为让 Discourse 论坛与云存储(我们使用的是 NextCloud 实例)和聊天工具(我们使用的是 Mattermost)良好协作所进行的一些工作。
这是一篇较长的帖子,因此我们将详细内容隐藏起来,直到您点击箭头…
完整长文
我首先要强调的是,我并非该系统的开发者——它是由技术团队的另一位成员使用 C#/.NET 开发的,因此我无法回答有关该系统的详细技术问题。我只是想说明我们想要解决的问题以及我们所采取的措施。
背景:我们曾使用一个集成系统(Basecamp)来提供讨论、实时聊天和文件存储集成。该系统在结构和安全性方面存在许多令人不满意的地方,因此我们决定将组织迁移到一套新的开源系统。
我们进行了大量的筛选和评估——我们的部分选择是出于权宜之计,部分是出于寻找最符合我们需求的方案,还有部分则是为了使 1 万名用户的迁移过程尽可能顺畅(这些用户中非技术人员占很高比例,还有相当数量的技术恐惧症患者,每个人都持有强烈的个人观点——这并不容易取悦!)
言归正传,我们最终确定了三个独立组件:Mattermost 用于提供实时聊天,Discourse 用于提供更深入的讨论,Nextcloud 用于提供安全的文件存储和协作编辑(取代了原生 Basecamp 存储和 Google Docs 的组合)。所有这些系统都托管在我们自己管理的服务器上。
因此,我们现在需要一种方法,以相对无缝的方式将所需的三个登录整合在一起,并自动创建用户账户,将用户分配到相应的访问组/论坛(Discourse)、共享存储组(Nextcloud)以及团队和频道(Mattermost)。
该组织有数百个独立的组/团队(按地点和职能划分),用户可能属于多个组——有些是封闭的,有些则允许任何用户随时加入。
第一个问题是在三个系统上创建用户账户,并最初确保它们具有相同的用户名(以便相互识别)和密码(以便至少只需记住/存储一套凭证,最终实现三个系统的单点登录)。
我们还需要一种方法来管理如何在创建账户时将人员分配到正确的组——旧系统中实际组与在线组之间没有良好的映射关系,因此我们无法简单地迁移它。
我们提出的解决方案是建立一个名为“中心(Hub)”的独立网站,用于跟踪用户账户,并利用三个系统的 API 来创建和更新用户详情。
该中心还允许每个组(或一组组)的“技术冠军”邀请人员加入新服务,从而确保只有合适的人员进入每个地方。
因此,用户会收到一封邀请邮件,加入新服务,其中包含一个一次性链接,指向中心网站,用户可以在那里创建用户名和密码。随后,系统将自动在三个独立服务上创建相应的用户账户。
该中心还知道用户应有权访问哪些组/论坛、团队/频道和存储区域,并通过 API 在相应位置将其添加进去。
随着其发展,中心已开发出更多功能,现在用户可以使用它查找频道和论坛,申请加入,以及为技术冠军和用户执行各种其他管理功能。
它现在还可以提供某种形式的单点登录,因此用户只需在中心登录,即可通过单击一个按钮登录到其他服务之一。(这项工作的一部分涉及排除正在使用的标准企业社交媒体类型登录方式)
我们曾考虑过各种将聊天和文件存储集成到单一系统中的方法(这三者都提供了一些此类功能),但它们总是涉及巨大的妥协,最终会造就像 Basecamp 那样的“骆驼”(由委员会设计出来的马)。更好的做法是为每个核心功能坚持使用专门的纯种解决方案,并确保它们做得出色。