前不久,我写了一篇文章,介绍《如何在本地部署安装 Outline》,我之所以写这篇文章,主要原因是我最近需要做一个项目,使用 Outline 来构建一个公司级知识库。所以我需要在本地先搭建一个,来撰写一些前期的文档,并体验试用系统。
现在,我部署了一个线上的系统,来正式实现公司级的知识库,结果踩了不少坑,特撰写文章来与大家分享,希望大家引以为戒。
一、企业级部署
前文已经介绍而本地部署的方法,其实企业级部署,也差不多的方式,我就不想多介绍细节了,主要介绍一下坑。
企业级的部署采用的主要方法,还是使用 Docker 或者 K8S 这样的系统来部署,是最简单的。坑主要在几个地方:
1. 登录方式
你首先要想好的事部署好了 Outline 的话怎么登录呢?可以使用帐号登录,那样的话,会在企业原有很多业务系统的前提下,又多了一个帐号系统,员工入职申请和离职吊销引发的一致性问题,都是需要解决的。很不方便。
使用 OAuth 登录,这个是需要专门修改代码来开发的,不是很直观。原生提供的方式还有使用 Google 邮箱登录,或者使用 OIDC 登录,还有就是集成 Slack,不过中国公司没几个使用 Slack 的就有点尴尬。
我们公司是使用 Google 邮箱的,但是 Outline 部署在中国,服务器是无法联通 Google 服务器的,还需要给服务器科学,才能正式完成 Google 登录。而 Outline 本身不支持配置代理在里面,所以整个配置过程有点麻烦,我不想赘述。
2. 附件存储
企业级使用,你不可能不考虑附件存储的问题。而且 Docker 部署,则约束了你不能使用简单的本地存储方式。比如,最起码,你需要挂载网络卷,然后让本地文档存储在网络硬盘上,这个还比较好部署一点。
另一种方式,就是使用网络存储,但是 Outline 原生只支持 AWS 的 S3,好在中国的阿里云和腾讯云都是支持 S3 的 API 的。但是我们实际配置了才知道,这也是一个大坑。比如,腾讯云的 COS,我们配置了,发现,腾讯实现的 HTTP 协议竟然是区分 Header 大小写的,这明显与协议不符。不知道写这个 HTTP 服务的 老哥是怎么混进去的。
如果访问腾讯的 COS,使用 S3 的协议,必须将所有的鉴权 Header 全部小写才可以被腾讯验证。哔了狗的体验,难怪做不过阿里云,不过我并不知道阿里云实现的对不对,反正腾讯云糟糕。
如何才能让 Outline 支持腾讯云的 COS 呢?非修改代码不可。真是无语凝咽。
二、兼容性问题
解决了部署,终于可以愉快的使用了,你发现噩梦才开始。系统有一些很神奇的设定,让你惊讶。
1. 导入导出
我的设想是,我弄一个测试环境,在上面编辑好文档,然后导出,导入到线上环境。想法很美妙,现实很残酷!
我发现,我导出后,再导入,我设置的文档集前面的小图标没了!而且,文档集的顺序全乱掉了。
而且,文档集内的文档的顺序也没了,只能按照字典序排列,而且,不能手动脱拽调整顺序了!!功能根本不一致。
2. 格式兼容
我编辑的一些加黑 + 高亮的格式,在导入再导出后,加黑突然失效了。所以,这个系统对 Markdown 的支持是有缺陷的。
3. 图片链接
我发现另一问题就是,我导出的文档里面包含的系统内部的链接,在导入后全部失效了!! 都变成了 url encode 后的乱码了。这个太糟心了,点击也没法跳转了。所以整套导入导出机制,就彻底无意义了。
另一个致命问题是图片。这个系统是有 BS 架构的。所以是 server 的,结果你上传了任何图片,它保留在文档里的图片链接,竟然是指向了自己的 server,所以更加枪毙了导入导出的方案,糟糕至极。
4. 不合常理的设计
我导入完毕后,看到有个导入的历史记录,就很洁癖的随手删掉了,弹出的二次提醒完全没看。后来我才知道,那个提醒上写着,如果删除,您此次导入的所有文档都将删除!!!!!气死我也,等我回过神来发现,怎么所有文档都不见了,还在那里调查出了啥 bug。
所有的文档都进入了回收站,我心暗叫还好,然后就发现另一个更惊讶的事情,回收站的文档竟然只能看,不能恢复!!还是免不了 30 天被删除的命运,能活活气死你。
5. 中文搜索
我发现对中文的搜索支持极其不足,比如我的一篇文档是“客户端证书安装指南”,结果搜“证书” 是完全搜不到的,只能搜“客户端”,这……
后来我手动加了空格,“客户端 证书 安装指南”,才能让“证书” 两个字可以搜索出来,简直了!
三、结论
所以,你想搞个免费的企业级知识库的话,Outline 未必是比较好的选择。上面的问题,你都能接受即可。除了上述的各种缺点外,其编辑器算是比较好用的了,另外允许对图片加工对齐格式和大小,也比较友好。协同编辑的功能和性能也还可以。还是有一些优点的。当然界面也很美观。
只是远远称不上完美。对于负责安装部署和维护的人来说,堪称糟糕。
顺便提一嘴,我用的版本是 0.75.2 (2024-03),如果您从遥远的未来看到此文,注意时效性。