本文介紹了使用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