私有化部署Outline

Outline介绍

Outline是一个开源的知识库, 类似Notion/语雀的 基于块的文本编辑
因为是开源的 所以可以拿来私有化部署 Github

部署

先把坑放前面

知识库总归是要用户登录访问的, Outline的登录方式可以有邮件和OAuth2, 但是邮件的方式 必须需要用OAuth2登录一次才能开启, 而OAuth2那些服务基本上都从中国大陆无法访问, 而且Outline本身那个Node程序, 又不走系统的HTTP_PROXY, 所以很难受

docker配置

参考官方的文档, 需要配置一个postgres和一个redis

我写这篇的时候, 官方的文档的docker-compose配置是把redis和postgres暴露到宿主机的端口的, 其实可以不用暴露出来 走docker网络就可以了

环境配置

必须的配置项:

  • 开头的各种token
  • redis和postgres 和Outline自身的存储
  • 一个OAuth2服务器
  • SMTP

OAuth2

Outline支持的OAuth2服务端有如下几个:

  • Google
    需要有Google space, 收费的, 只能使用15天
  • AZure
    也是要花钱, 试用1年
  • Slack
    不熟, 没试
  • OIDC
    我选用的这种方案, 使用的Cloudflare的OIDC服务器

Cloudflare OIDC配置

入口: cf控制台 -> Zero Trust -> Access -> Applications

  1. Add An Application
  2. 选SaaS服务
  3. authentication protocol选OIDC
  4. 把cf给的Client ID和各种url填到Outline的.env上, cf这里应该少了一个logout的链接, 把Authorization endpoint最后的authorization改成logout就行了
  5. 权限控制, 我配的邮件

注意不要漏掉没提到的其他cf给的必填项

网络

Outline因为需要访问其他的OAuth服务器, 基本是需要访问外网的, 而Outline这个Node程序不走容器的环境变量的http/https代理, 所以我这边 Outline服务所在的宿主机的网关就是一个软路由, 如果直接用外网服务器就没这个问题了

暴露到公网的话 我使用的Cloudflare Tunnel, 直接配置目标接口为内网接口即可

我弄得有点复杂, 因为我想把manifest (https://your.outline.domain/static/manifest.webmanifest) 篡改一下, 所以在cf worker还起了一个反代, 将manifest的请求打到另一个文件上(minio文件)
这个操作我试了一下直接在cf的重定向上试了一下, 没有生效, 应该是chrome不认重定向后的manifest, 改用了cf workers, 对manifest的url做一个反代