使用 Docker 安装 Outline
前言
Outline 也是一个文档软件,定位是知识库,跟飞书文档之类的相同。跟 showdoc 一样,作为可部署的文档软件,因为页面更加简洁大气,瞬间上头想要一个。最不济,就当是拿它作为 docker 测试项目部署练练手。
之前尝试安装过一次,只不过为了合并公司项目的 docker-compose.yml 项,导致容器各种报错,完全没眼看。这次干脆清理环境(镜像、容器、数据卷)之后,从零开始安装。
操作系统:
Outline should run on any Unix operating system that supports the software dependencies listed below. The docker image is based on Alpine Linux and operators have successfully deployed Outline on Ubuntu, Debian, and similar.
Outline is developed Unix-compatible operating systems only. It does not run on Microsoft Windows server, for instance.
依赖软件:
PostgreSQL (v12+)
Redis (v4+)
内存:
A minimum of 512MB of memory is required, depending on the number of users 1GB or more is recommended.
教程非常详细,甚至还给了安装 docker compose 的方法链接。
回顾整个安装部署过程,主要在两个节点遇到问题,一个是启动获取不到 docker 镜像,另一个是启动之后登录没有默认账号密码,需要修改配置使用三方授权登录。
问题一:启动报错:拉取镜像失败
文档配置部分需要创建两个文件:docker.env、docker-compose.yml,按照文档上的添加之后,启动报错:
> docker compose up -d
[+] Running 3/3
✘ outline Error Get "https://registry.hub.docker.com/v2/": context deadline exceeded (Client.Timeout exceeded while awai...
> docker pull docker.getoutline.com/outlinewiki/outline:latest
Error response from daemon: Get "https://registry.hub.docker.com/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)单独拉取镜像也报错,直接访问可以看到多次跳转过程:http -> https -> registry.hub.docker.com -> hub.docker.com/outlinewiki/outline。最后访问未找到是因为 outline 库实际 https 访问地址为: https://hub.docker.com/r/outlinewiki/outline。
但是去掉前面的域名,直接拉取最新版,是可以的(拉取具体版本也不行):
> docker pull outlinewiki/outline:latest
...
Status: Downloaded newer image for outlinewiki/outline:latest
docker.io/outlinewiki/outline:latest
> docker pull docker.io/outlinewiki/outline:1.4
Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)文档中建议是要取具体的版本号,而不是 latest。所以刚开始按照文档里的说明,取的都是最新版本的版本号,结果各种镜像在 /etc/docker/daemon.json 中来回切都不管用。甚至还去搞了阿里云的容器镜像服务,结果是部分软件可以安装,部分只能通过本地导出之后再上传导入(本地开了 VPN,不确定是否是网络问题)。
注意:需要本地版本与线上服务器兼容,常见的是本地 Mac m系列导出 arm64架构版本,线上一般的 ubuntu 为 amd64,,不能兼容,无法创建容器
#导出镜像为 tar 文件
docker save -o outline-1.4.tar outlinewiki/outline:1.4
#二次压缩,适用体积较大的文件
gzip outline-1.4.tar
#上传(也可以直接用工具上传)
scp outline-1.4.tar.gz root@IP:~/outline-1.4.tar.gz
#解压
gunzip outline-1.4.tar.gz
#导入
docker load -i outline-1.4.tar
#验证
docker images | grep outline其实还可以通过 tag 指令来修改本地镜像的版本号(如果线上可以下载下来 latest版本的话):
docker tag outlinewiki/outline:latest outlinewiki/outline:1.4尤其需要注意的是,docker 下载的镜像名和版本号需要与 docker-compose.yml 文件中定义的 image 部分完全一致。否则,启动的时候,仍会重新 pull。
问题二:outline 三方授权配置
我是直接问 deepseek 的,没注意 文档里的授权验证 部分是有所有支持的配置说明的,包括 Google、GitHub、Slack。
Google 申请前先去开通了二次验证,之后才可以配置(已授权的 JS 来源和授权重定向 URI)。获取客户端ID 和 客户端密钥,添加到 docker.env 配置文件中。
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=然后授权登录后发现,重定向地址跳转有点问题,无法发送请求到 Google。也就是说,不支持外网访问的服务器没办法通过验证。
后面做的 GitHub 和 Slack 都是可以国内访问到的,Slack 为 Outline 推荐的授权方式,默认显示。试了 GitHub 没有显示出来,现在看文档里 GitHub 属于集成配置,可能与授权验证部分的支持项有区别。
最后没办法还是搞了 Slack。Slack 是一个可以管理产品和项目的软件,还可以组内聊天。先去 Slack 网站创建账号,一开始几个邮箱都注册不了,包括 Google 的邮箱。绕了一圈回来,发现注册页面下面可以切换归属地,果断切到英国(其他的不认识),然后再提交就好了。
创建工作空间,之后获取所有需要的配置项:
SLACK_CLIENT_ID=
SLACK_CLIENT_SECRET=
# 后面的也填了,不知道是否有用到
SLACK_VERIFICATION_TOKEN=
SLACK_APP_ID=
SLACK_MESSAGE_ACTIONS=true除了上面授权登录的参数,还有一些过程修改到、用到的:
URL=
# openssl rand -hex 32 指令生成,默认的会报格式错误
SECRET_KEY=
# 一样指令生成了,但不确定是否使用到了
UTILS_SECRET=
# 语言
DEFAULT_LANGUAGE=zh_CN
# DATABASE 部分的,需要取消注释,因为与 Postgres 连接没用到 SSL 证书,否则会连不上数据库
PGSSLMODE=disable需要注意,有可能 docker.env 在重启 outline 之后也没有生效,需要删除容器再重新生成。deepseek 是建议在 docker-compose.yml 中 outline 部分添加环境变量:
outline:
image: outlinewiki/outline:1.4
env_file: ./docker.env
environment:
GITHUB_CLIENT_ID:
GITHUB_CLIENT_SECRET:站点是自动签的 SSL 域名证书,不用三个月换一次,真香!
最后附上登录页面: