outline非docker方式部署
December 6, 2023
预研了几个可托管部署的团队wiki,看了一圈还是觉得outline比较合适。但是不太希望以docker的方式来部署,所以折腾下本地非docker方式的部署方案。记录如下。
需求
作为团队知识管理系统,选型上重点考虑以下需求:
- 开源,可定制。
- 支持多机部署。即所有数据不存储在本地,而是外部存储服务中。
- Markdown语法支持。
- 可导出Markdown。即随时可以切换到别的平台。
- 团队协作的权限管理。针对用户设置不同级别的访问权限。内部用户可编辑,外部用户仅查看。
- 支持多种账号形态。
outline基本符合以上各类条件。支持Slack、Google以及Azure,同时也支持第三方OIDC认证。刚好前段时间预研过dex的用法,所以就以dex作为OIDC的服务方来部署。
部署
整体部署流程分为几步:
- 安装相关依赖,包括Postgres、Redis、minio(可选)
- 安装OIDC鉴权服务。配置相关认证鉴权参数。
- 从git下载代码,启动方式参考官方文档即可。
依赖
存在以下几个存储依赖:
- Postgres:用于存储outline内部数据以及文章数据。
- Redis:用作缓存
- minio:存储图片。看配置文件已经支持了本地文件方式了,但为了可扩展性考虑还是选用了兼容s3的minio。
注:我以为minio图片下载会有自己的域名,部署完毕后发现还是通过monio服务下发的。如果图片量比较大的话可能要考虑优化为CDN方式。或者在内容编辑过程中就使用自己的CDN服务。
这几个模块都比较常见了,本地我都已经docker部署过了,就直接拿来用了。docker命令可以参考这里。
相关配置:
授权
如果是直接使用Slack、Google或者Azure账号,这里应该不复杂。但为了可扩展性考虑,所以我选用了第三方OIDC服务,流程上也就稍微麻烦。以dex为例的配置方法如下:
首先需要在dex server端为app配置基础信息。配置如下:
- id、secret:分配的app id以及秘钥,与outline中的配置一致即可。
- redirectURIs:授权重定向地址。使用过程中会校验callback是否与outline登录中的callback参数一致,如果不一致会禁止回跳。
- name:外显的授权App名称。
其他参数可以参考我之前的dex介绍。
启动dex之后可以通过dex的discovery链接查看相关服务的具体地址,参考这里。本地部署时相关配置如下:
在outline配置OIDC相关地址,配置参考:
OIDC_CLIENT_ID 与 OIDC_CLIENT_SECRET 与dex server中的id和secret保持一致即可。授权、token获取以及用户信息获取与dex服务的discovery返回信息中的地址保持一致即可。
授权相关的基础配置就完成了。当然现网部署需要根据自己的需求调整dex的配置,但是整体配置流程还是比较简单的。重点是要理解OIDC相关的基础概念以及流程。
注:之前对dex不是很熟悉,所以摸索花了点时间。不得不承认这种OIDC基础服务还是非常方便的,能够快速打通各种类型的账号,开发仅需要关注业务本身即可。顺便也搜索了一下国内的常用账号系统(比如微信)是否有类似的标准化服务,貌似各种账号体系都有其特殊性,没有找到相关实现。。。
启动
参考官方的从源码启动方式即可。