【Outline】纯Docker部署指南
找了好久,总算中意了一个,好看又好用,开源不要钱,赶紧部署一个试试。
因为用的是 UnRaid 系统,这里直接使用纯 Docker 的方式进行部署。
Outline依赖 PostgreSQL (v9.5+)
、Redis (v4+)
、Minio, S3, or S3 兼容对象存储服务
还要另外配置一个登录授权的服务器,这里我采用的是自建的服务器
这个部署起来还真是麻烦,不过用起来是很舒服了,有种 Typora 的在线版的感觉
安装 Docker
部署 postgres 12
1
2
3
4
5
6
7
8docker 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创建用户和数据库
1
2
3
4
5
6
7
8
9
10
11
12# 进入数据库命令行
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
1
2
3
4
5docker run -d \
--name redis_6 \
--restart=always \
-p 6379:6379 \
redis:6.2.7部署 minio,用来代替 AWS S3
1
2
3
4
5
6
7
8
9
10
11
12
13
14# 创建容器
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需要使用自己的)
1
2
3
4
5
6
7location / {
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 登录1
2
3
4
5
6
7
8docker 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.5CLIENT_NAME
是随机的CLIENT_ID
是随机的,格式如上面所示CLIENT_SECRET
是随机的,格式如上面所示USER_PASS
是默认的密码启动后就可以有一个挺好看的登录页可访问:
http://localhost:3000/login
默认的用户名是
username
,密码是USER_PASS
字段所设置的先拉取一下 outline
1
docker pull outlinewiki/outline:0.63.0
编辑一个
.env
的本地文件参考 .env.sample
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172# –––––––––––––––– 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
2
3
4
5
6docker run --rm \
--env-file=.env \
--link postgres_12 \
--link redis_6 \
outlinewiki/outline:0.63.0 \
yarn db:migrate --env production-ssl-disabled运行
1
2
3
4
5
6
7
8
9
10docker 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访问浏览器
http://192.168.100.155:13090
【Outline】纯Docker部署指南