【Outline】纯Docker部署指南

发布于:2025-06-30 ⋅ 阅读:(23) ⋅ 点赞:(0)

本文介绍了使用Docker部署Outline知识管理系统的完整流程。
主要内容包括:

  1. 部署PostgreSQL 12数据库并创建用户;
  2. 安装Redis 6缓存服务;
  3. 配置Minio对象存储服务替代AWS S3;
  4. 搭建SSO单点登录服务器;
  5. 准备Outline容器镜像和环境变量配置。

这里直接使用纯 Docker 的方式进行部署。

Outline依赖 PostgreSQL (v9.5+)Redis (v4+)Minio, S3, or S3 兼容对象存储服务

还要另外配置一个登录授权的服务器,这里我采用的是自建的服务器

这个部署起来还真是麻烦,不过用起来是很舒服了,有种 Typora 的在线版的感觉

  1. 安装 Docker
  2. 部署 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
  1. 部署 Redis
docker run -d \
    --name redis_6 \
    --restart=always \
    -p 6379:6379 \
    redis:6.2.7
  1. 部署 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,不创建的话到时候上传不了图片,也导出不了文件

  1. 搭建 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 字段所设置的

  1. 先拉取一下 outline
docker pull outlinewiki/outline:0.63.0
  1. 编辑一个 .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,新版可能需要重新进行更改

  1. 运行前需要先迁移数据库
docker run --rm \
    --env-file=.env \
    --link postgres_12 \
    --link redis_6 \
    outlinewiki/outline:0.63.0 \
    yarn db:migrate --env production-ssl-disabled
  1. 运行
docker run -d \
    --restart=always \
    --name=outline \
    --env-file=.env \
    --link postgres_12 \
    --link redis_6 \
    -p 13090:3000 \
    outlinewiki/outline:0.63.0

docker logs outline
  1. 访问浏览器 http://192.168.100.155:13090

来自: 【Outline】纯Docker部署指南 - BitEax


网站公告

今日签到

点亮在社区的每一天
去签到