本文介绍了使用Docker部署Outline知识管理系统的完整流程。
主要内容包括:
- 部署PostgreSQL 12数据库并创建用户;
- 安装Redis 6缓存服务;
- 配置Minio对象存储服务替代AWS S3;
- 搭建SSO单点登录服务器;
- 准备Outline容器镜像和环境变量配置。
这里直接使用纯 Docker 的方式进行部署。
Outline依赖 PostgreSQL (v9.5+)
、Redis (v4+)
、Minio, S3, or S3 兼容对象存储服务
还要另外配置一个登录授权的服务器,这里我采用的是自建的服务器
这个部署起来还真是麻烦,不过用起来是很舒服了,有种 Typora 的在线版的感觉
- 安装 Docker
- 部署 postgres 12
docker run -d \--name postgres_12 \--restart=always \-e POSTGRES_PASSWORD=mysecretpassword \-e PGDATA=/var/lib/postgresql/data/pgdata \-v postgres_12:/var/lib/postgresql/data \-p 5432:5432 \postgres:12.10
创建用户和数据库
# 进入数据库命令行
docker exec -it --user postgres postgres_12 psql -U postgres# 创建用户
CREATE USER outline WITH PASSWORD '123456';# 创建数据库
CREATE DATABASE outline OWNER outline;
CREATE DATABASE outline_test OWNER outline;# 退出
\q
- 部署 Redis
docker run -d \--name redis_6 \--restart=always \-p 6379:6379 \redis:6.2.7
- 部署 minio,用来代替 AWS S3
参考
# 创建容器
docker run -d \--name minio \--restart=always \-p 9000:9000 \-p 9001:9001 \-e MINIO_ROOT_USER="6m2lx2ffmbr9ikod" \-e MINIO_ROOT_PASSWORD="2k78fpraq7rs5xlrti5p6cvb767a691h3jqi47ihbu75cx23twkzpok86sf1aw1e" \-e MINIO_REGION_NAME="cn-homelab-1" \-e MINIO_BROWSER="on" \-e MINIO_SERVER_URL="http://192.168.100.155:9000/" \-e MINIO_BROWSER_REDIRECT_URL="http://192.168.100.155:9001/" \--volume minio:/data \minio/minio:RELEASE.2021-09-03T03-56-13Z server /data --console-address ":9001"
MINIO_ROOT_USER
使用小写字母加数字长度为16位的随机数
MINIO_ROOT_PASSWORD
使用小写字母加数字长度为64位的随机数
MINIO_SERVER_URL
是API地址,反向代理请务必开启 proxy_pass,否则会无法连接,导致附件及图片无法上传
比如说使用了 Nginx Proxy Manager,就要在代理的高级选项中加入以下字段(IP需要使用自己的)
location / {proxy_pass http://192.168.100.155:9000;proxy_set_header Host $http_host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Scheme $scheme;proxy_set_header X-Script-Name /;
}
MINIO_BROWSER_REDIRECT_URL
是管理地址,即反代后的地址比如 https://file-admin.lab.com/
,不反代就老老实实用原始访问的地址
这边还需要访问这个页面,创建一个新的 Buckets,名称为 outline
,不创建的话到时候上传不了图片,也导出不了文件
- 搭建 OIDC 服务器(
sso-server
),用于代替 slack 或 google 登录
项目地址
docker run -d \--name=sso-server \-e CLIENT_NAME="My SSO Service" \-e CLIENT_ID="b8c40013-cc03-4bc5-b3a5-6a31046fa415" \-e CLIENT_SECRET="26272010-37d9-4bea-a58e-6b0a382d7626" \-e USER_PASS="password" \-p 3000:80 \soulteary/sso-server:1.1.5
CLIENT_NAME
是随机的
CLIENT_ID
是随机的,格式如上面所示
CLIENT_SECRET
是随机的,格式如上面所示
USER_PASS
是默认的密码
启动后就可以有一个挺好看的登录页可访问:http://localhost:3000/login
默认的用户名是 username
,密码是 USER_PASS
字段所设置的
- 先拉取一下 outline
docker pull outlinewiki/outline:0.63.0
- 编辑一个
.env
的本地文件
参考 .env.sample
# –––––––––––––––– REQUIRED ––––––––––––––––# 生成一个十六进制编码的 32 字节随机密钥。你应该使用`openssl rand -hex 32`
# 在你的终端中生成一个随机值。
SECRET_KEY=6697a4fc3c47d879f42d73e4ed00cda076c79e845257acfab8661b2241532ea7# 生成唯一的随机密钥。格式并不重要,您仍然可以使用 `openssl rand -hex 32`
# 在你的终端中生成。
UTILS_SECRET=9fb6973a0e562ca592999436c2f5ed4326a81e2fdff8c996b27cb58b5abff79a# 对于生产点这些在您的数据库中,在开发中默认应该开箱即用。
# 这里的 postgres_12 是上面创建的数据库容器的默认 Hostname,需要建立单独的网络或使用 --link
# outline:123456 是上面创建的数据库账户
DATABASE_URL=postgres://outline:123456@postgres_12:5432/outline
DATABASE_URL_TEST=postgres://outline:123456@postgres_12:5432/outline_test
DATABASE_CONNECTION_POOL_MIN=
DATABASE_CONNECTION_POOL_MAX=
# 取消注释以禁用 SSL 连接到 Postgres
PGSSLMODE=disable# 对于 redis,你可以像这样指定一个 ioredis 兼容的 url
# 这里的 redis_6 是上面创建的数据库容器的默认 Hostname,需要建立单独的网络或使用 --link
REDIS_URL=redis://redis_6:6379
# 或者,如果您想提供额外的连接选项,
# 使用 base64 编码的 JSON 连接选项对象。参考 ioredis 文档获取可用选项的列表。
# 示例:使用 Redis Sentinel 实现高可用性
# {"sentinels":[{"host":"sentinel-0","port":26379},{"host":"sentinel-1","port":26379}],"name":"mymaster"}
# REDIS_URL=ioredis://eyJzZW50aW5lbHMiOlt7Imhvc3QiOiJzZW50aW5lbC0wIiwicG9ydCI6MjYzNzl9LHsiaG9zdCI6InNlbnRpbmVsLTEiLCJwb3J0IjoyNjM3OX1dLCJuYW1lIjoibXltYXN0ZXIifQ==# URL 应指向完全限定的、可公开访问的 URL。
# 如果使用代理 URL 和 PORT 中的端口可能不同。
# 简单的说就是第一个是反代后访问的地址
# PORT 是服务器默认打开的端口,是需要本地开放的端口
URL=http://192.168.100.155:13090
PORT=3000# 参见 [文档](docs/SERVICES.md) 运行单独的协作服务器,正常操作不需要设置。
COLLABORATION_URL=# 支持上传头像和文档附件的图片必须提供与 s3 兼容的存储。建议使用 AWS S3 进行冗余
# 但是,如果您想将所有文件存储保持在本地,则可以使用替代方法,例如
# minio (https://github.com/minio/minio) can be used.# 有关设置 S3 的更详细指南可在此处获得:
# => https://wiki.generaloutline.com/share/125de1cc-9ff6-424b-8415-0d58c809a40f
# AWS_ACCESS_KEY_ID 对应上面的 MINIO_ROOT_USER
# AWS_SECRET_ACCESS_KEY 对应上面的 MINIO_ROOT_PASSWORD
# AWS_REGION 对应上面的 MINIO_REGION_NAME
# AWS_S3_UPLOAD_BUCKET_URL 是 MINIO 的API地址,注意是API地址,不是管理地址
AWS_ACCESS_KEY_ID=6m2lx2ffmbr9ikod
AWS_SECRET_ACCESS_KEY=2k78fpraq7rs5xlrti5p6cvb767a691h3jqi47ihbu75cx23twkzpok86sf1aw1e
AWS_REGION=cn-homelab-1
AWS_S3_ACCELERATE_URL=
AWS_S3_UPLOAD_BUCKET_URL=http://192.168.100.155:9000
AWS_S3_UPLOAD_BUCKET_NAME=outline
AWS_S3_UPLOAD_MAX_SIZE=26214400
AWS_S3_FORCE_PATH_STYLE=true
AWS_S3_ACL=private# –––––––––––––– 认证 ––––––––––––––# 第三方登录凭据,工作安装至少需要Google、Slack或Microsoft中的一个,否则您将没有登录选项。# 要配置 Slack 身份验证,您需要在
# => https://api.slack.com/apps
#
# 配置Client ID时,在“OAuth & Permissions”下添加重定向URL:
# https://<URL>/auth/slack.callback
SLACK_KEY=
SLACK_SECRET=# 要配置 Google 身份验证,您需要在以下位置创建 OAuth 客户端 ID
# => https://console.cloud.google.com/apis/credentials
#
# 配置Client ID时,添加Authorized redirect URI:
# https://<URL>/auth/google.callback
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=# 要配置 Microsoft/Azure 身份验证,您需要创建一个 OAuth 客户端。
# 查看有关设置 Azure 应用程序的详细信息的指南:
# => https://wiki.generaloutline.com/share/dfa77e56-d4d2-4b51-8ff8-84ea6608faa4
AZURE_CLIENT_ID=
AZURE_CLIENT_SECRET=
AZURE_RESOURCE_APP_ID=# 要配置通用 OIDC 身份验证,您需要某种身份提供者。
# 请参阅文档,了解您用于获取以下信息的任何 IdP:
# 重定向 URI 是 https://<URL>/auth/oidc.callback
# 此处的参数对应上面 OIDC 服务器的配置
# OIDC_CLIENT_ID 对应上面的 OIDC 服务器的 CLIENT_ID
# OIDC_CLIENT_SECRET 对应上面的 OIDC 服务器的 CLIENT_SECRET
# OIDC_AUTH_URI 是上面的 OIDC 服务器的对公网开放的地址
# OIDC_TOKEN_URI 和 OIDC_USERINFO_URI 应该是用 OIDC 服务器的对公网不开放的地址,当然用开放的也能用,不安全,我这里用开放的地址
OIDC_CLIENT_ID=b8c40013-cc03-4bc5-b3a5-6a31046fa415
OIDC_CLIENT_SECRET=26272010-37d9-4bea-a58e-6b0a382d7626
OIDC_AUTH_URI=http://192.168.100.155:3000/dialog/authorize
OIDC_TOKEN_URI=http://192.168.100.155:3000/oauth/token
OIDC_USERINFO_URI=http://192.168.100.155:3000/api/outline/oidc# 指定要从中派生用户信息的声明支持使用JWT负载的任何有效JSON路径
OIDC_USERNAME_CLAIM=preferred_username# OIDC 认证的显示名称
OIDC_DISPLAY_NAME=SZC_SSO# 空格分隔的身份验证范围。
OIDC_SCOPES=openid profile email# –––––––––––––––– 可选 ––––––––––––––––# 用于 HTTPS 终止的 Base64 编码私钥和证书。This is only
# required if you do not use an external reverse proxy. See documentation:
# https://wiki.generaloutline.com/share/1c922644-40d8-41fe-98f9-df2b67239d45
SSL_KEY=
SSL_CERT=# If using a Cloudfront/Cloudflare distribution or similar it can be set below.
# This will cause paths to javascript, stylesheets, and images to be updated to
# the hostname defined in CDN_URL. In your CDN configuration the origin server
# should be set to the same as URL.
CDN_URL=# 在生产中自动重定向到https。
# 默认值为true,但如果可以确保SSL在外部负载平衡器处终止,则可以将其设置为false。
FORCE_HTTPS=false# 通过向维护人员发送匿名统计信息,让安装人员检查更新情况
ENABLE_UPDATES=false# 应该产生多少进程。作为一个合理的规则,将服务器的可用内存除以512进行粗略估计
WEB_CONCURRENCY=1# 如果有嵌入图像的特别大的Word文档,可能需要覆盖文档导入的最大大小
MAXIMUM_IMPORT_SIZE=5120000# 如果您的反向代理已经记录了传入的http请求,并且结果是重复的,则可以删除这一行
DEBUG=http# 允许登录wiki的域的逗号分隔列表。如果未设置,则在使用Google OAuth登录时默认允许所有域
ALLOWED_DOMAINS=# 为了实现与搜索和发布到渠道的完整集成,还需要以下配置,以及更多详细信息
# => https://wiki.generaloutline.com/share/be25efd1-b3ef-4450-b8e5-c4a4fc11e02a
#
SLACK_VERIFICATION_TOKEN=your_token
SLACK_APP_ID=A0XXXXXXX
SLACK_MESSAGE_ACTIONS=true# 还可以选择启用google analytics来跟踪知识库中的页面浏览量
GOOGLE_ANALYTICS_ID=# 可选地启用Sentry(Sentry.io)来跟踪错误和性能
SENTRY_DSN=# 要支持发送“文档更新”或“您已被邀请”等传出事务性电子邮件,您需要为SMTP服务器提供身份验证
SMTP_HOST=
SMTP_PORT=
SMTP_USERNAME=
SMTP_PASSWORD=
SMTP_FROM_EMAIL=
SMTP_REPLY_EMAIL=
SMTP_TLS_CIPHERS=
SMTP_SECURE=true# 显示在认证屏幕上的自定义徽标,缩放至高度:60px
# TEAM_LOGO=https://example.com/images/logo.png# 默认的接口语言。有关可用语言代码及其大致翻译百分比的列表,请参见 translate.getoutline.com 。
DEFAULT_LANGUAGE=zh_CN
请注意:该文件没写完整,补充可以参考
该配置文件适用于版本 0.63.0
,新版可能需要重新进行更改
- 运行前需要先迁移数据库
docker run --rm \--env-file=.env \--link postgres_12 \--link redis_6 \outlinewiki/outline:0.63.0 \yarn db:migrate --env production-ssl-disabled
- 运行
docker run -d \--restart=always \--name=outline \--env-file=.env \--link postgres_12 \--link redis_6 \-p 13090:3000 \outlinewiki/outline:0.63.0docker logs outline
- 访问浏览器
http://192.168.100.155:13090
来自: 【Outline】纯Docker部署指南 - BitEax