本文是网友要求写的,文章有点长,为了便于阅读分成了上、下两篇,上篇主要是一些前期的准备工作,下篇才是正式的安装
什么是 Outline ?
Outline
是使用React
和Node.js
构建的开放、可扩展的wiki
,美观,功能丰富,并兼容Markdown
,是适用于成长型团队的最快wiki
和知识库。
如果你不想自己部署,可以去官网:/ 看看
前言
最早折腾Outline
是去年11
月,当时遇到了认证的问题给搁置了,直到最近有网友问起,才又捡起来研究。
Outline
用Docker
部署并不难,只是环境变量有点多,仔细一点应该是没问题的,麻烦的是Outline
不支持本地认证,也就说Outline
不支持电子邮件 + 密码的身份验证方式,而需要借助第三方认证,比如Google
、Microsoft / Azure
、OIDC
、Slack
等等,至于LDAP
和SAML
则只会包含在企业版中,不会包含在开源代码库中。考虑到Google
在国内访问的麻烦,老苏第一次选了Microsoft
,结果反而还遇到了问题(具体的问题后面有描述)。
这回老苏改换用Slack
做第三方认证,总算顺利的搞定了。
部署的方式用的是docker-compose
命令行,没有用portainer
的原因是因为用到了环境变量文件,而portainer
并不支持搜索主机的绝对路径,变通的办法是给portainer
映射卷,然后把环境变量文件放到映射的卷里
能不能用群晖的docker
管理器?老苏觉得应该可以,只是容器多,环境变量多,调试的时候很不方便,现在也懒得再去重新改了,最近工作比较忙,这么多图弄起来也是不小的工作量。
安装
下载镜像
开始是打算过用portainer
安装的,考虑到deploy the stack
的时候看不到镜像的下载进度,所以老苏把要用到镜像都先下载了
Outline
依赖下面这3
个软件,所以一共要下载四个镜像:
PostgreSQL (v12+)
Redis (v4+)
Minio, S3, or S3 兼容对象存储服务
在注册表中搜索postgres
,选择第一个postgres
,版本选择latest
。
在注册表中搜索redis
,选择第一个redis
,版本选择latest
。
在注册表中搜索minio
,选择第一个minio/minio
,版本选择latest
。
关于
minio
可以看老苏之前写的:『 拥有自己的MinIO对象存储服务器 』,原本开始准备用Fake S3
的,因为不熟悉所以改了。
在注册表中搜索outline
,选择第一个outlinewiki/outline
,版本选择latest
。
准备域名
用第三方认证涉及到回调地址,所以需要有可以访问的域名,老苏准备了两个
分别用Nginx Proxy Manager
做了反代处理
其中:
192.168.0.197
为群晖的IP
6070
是准备分配给Outline
的端口
SSL
设置里全部勾选了
另一个地址https://s3.laosu.ml
9100
是准备分配给Outline API
的端口9101
是准备分配给Outline Console
的端口,出于安全性考虑,并没有将9101
映射到公网,所以不能通过Web
从公网来访问Console
,只能在局域网中通过http://192.168.0.197:9101
访问
SSL
设置里全部勾选了
还需要在Advanced
-->Custom Nginx Configuration
中填入👇下面的内容
参考:https://docs.min.io/docs/setup-nginx-proxy-with-minio.html
# Proxy requests to the bucket "outline" to MinIO server running on port 9100location / {proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_set_header Host $http_host; proxy_connect_timeout 300;# Default is HTTP/1, keepalive is only enabled in HTTP/1.1proxy_http_version 1.1;proxy_set_header Connection "";chunked_transfer_encoding off;proxy_pass http://192.168.0.197:9100;}
其中
proxy_pass http://192.168.0.197:9100;
要改为你自己的局域网IP
+ 端口
获取认证信息
关于第三方认证,参考的是官方的文档:/share/770a97da-13e5-401e-9f8a-37949c19f97e/doc/authentication-7ViKRmRY5o
微软认证虽然失败了,但还是记录了过程,方便后续发现问题,如果你们看出来,请一定告诉我,当局者总是迷的
微软(失败)
打开网址:找到Azure Active Directory
左侧菜单中找到应用注册
,选择+ 新注册
在注册应用程序
中填入 应用的名称账户类型选择仅此组织目录中的账号
重定向URI
中选择Web
,后面的地址填入
https://域名/auth/azure.callback
,也就是https://ot.laosu.ml/auth/azure.callback
点实际上老苏因为没有备案的缘故,域名后是带端口的,但在不影响理解的情况下老苏的描述一般会忽略端口的存在;
注册
后,客户获取到Client ID
左侧菜单这个值对应着
AZURE_CLIENT_ID
API 权限
,选择+ 添加权限
选择Microsoft Graph
在委托的权限
-->OpenId 权限
中勾选email
和profile
,然后点下面的添加权限
按钮
添加完成后可以在列表中找到
左侧菜单证书和密码
,选择+ 新客户端密码
用了默认的截止期限,可以自定义
添加完成,可以获取到AZURE_CLIENT_SECRET
左侧菜单注意不是
机密 ID
,而是前面的值
清单
,查找resourceAppId
这个值对应着
AZURE_RESOURCE_APP_ID
Slack(成功)
打开网址:/apps,登录后点Create an App
创建一个新应用如果还没有账号,需要先注册一个
填入相关信息,比如App name
、icon
、description
等,然后保存
左侧菜单中找到老苏懒得改,都用的默认值,反正就是测试而已
OAuth & Permissions
,在Redirect URLs
的地址填入https://域名/auth/slack.callback
,也就是https://ot.laosu.ml/auth/slack.callback
,点后面的Add
按钮之后,别忘记还要点Save URLs
按钮
往下找到和前面一样,老苏忽略了端口,真实的域名实际上是带端口的
Scopes
-->User Token Scopes
,通过Add an OAuth Scope
添加identify.avatar
identify.basic
identify.email
identify.team
左侧菜单中找到Basic Information
,下拉找到App Credentials
,找到Client ID
和Client Secret
其中Client ID
对应docker.env.txt
中的SLACK_KEY
,Client Secret
则对应着SLACK_SECRET
到这里,前期的准备工作就差不多了,下篇开始正式进入安装环节
参考文档
outline/outline: The fastest wiki and knowledge base for growing teams. Beautiful, feature rich, and markdown compatible.
地址:/outline/outline
Outline – Team knowledge base & wiki
地址:/
Use Fake S3 to simulate and test APIs of Amazon S3 in a sandbox environment | Devforgalaxy
地址:https://zeckli.github.io/en//02/14/use-fake-s3-to-test-aws-s3-api-en.html