如何使用 Docker 在 Ubuntu 上安装 Outline Knowledgebase Wiki
在此页
- 先决条件
- 第 1 步 - 配置防火墙
- 第 2 步 - 安装 Docker
- 第 3 步 - 安装 Docker Compose
- 第 4 步 - 为 Docker 创建环境文件
- 配置 Slack 身份验证
- 配置 Slack 集成
- 创建 S3 凭证
- 创建密钥
- 创建和编辑环境文件
Outline 是一种开源、协作、知识库软件。您可以使用它来托管文档和粉丝页面,甚至可以将其用于笔记共享。它包括一个 markdown 编辑器,并与 Slack、Figma、Airtable、Google Docs、Trello、Zapier、Codepen、Spotify、Youtube 等多种服务集成。它具有安全功能,如用户组具有单独的读写权限,允许公开共享并有 13 种语言翻译的 RTL 支持。它是使用 React 和 Node.js 构建的。有两种使用大纲的方法。一种是他们的云托管版本,或者您可以将其托管在您的服务器上。
本教程将教您如何使用 Docker 在基于 Ubuntu 的服务器上安装 Outline Wiki。
先决条件
-
A server running Ubuntu 20.04 with a minimum of 1GB of RAM.
-
A non-root user with sudo privileges.
-
A domain name pointing to the server. We will use
https://outline.example.com
for our tutorial. -
Few essential apps to get started.
$ sudo apt install nano curl wget unzip gnupg
第 1 步 - 配置防火墙
第一步是配置防火墙。 Ubuntu 默认带有 ufw (Uncomplicated Firewall)。
检查防火墙是否正在运行。
$ sudo ufw status
您应该得到以下输出。
Status: inactive
允许 SSH 端口,以便防火墙在启用时不会中断当前连接。
$ sudo ufw allow OpenSSH
也允许 HTTP 和 HTTPS 端口。
$ sudo ufw allow 80 $ sudo ufw allow 443
启用防火墙。
$ sudo ufw enable Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup
再次检查防火墙的状态。
$ sudo ufw status
您应该会看到类似的输出。
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 80 ALLOW Anywhere 443 ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 80 (v6) ALLOW Anywhere (v6) 443 (v6) ALLOW Anywhere (v6)
第 2 步 - 安装 Docker
我们需要使用其官方存储库安装 Docker。添加 Dockers 官方 GPG 密钥。
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
将 Docker 存储库添加到系统中。
$ echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
更新 APT 存储库列表并安装 Docker。
$ sudo apt update $ sudo apt install docker-ce
验证 Docker 引擎是否安装正确。
$ docker --version Docker version 20.10.14, build a224086
执行以下命令,这样您就不需要使用 sudo 来运行 Docker 命令。
$ sudo usermod -aG docker ${USER} $ su - ${USER}
第 3 步 - 安装 Docker Compose
运行以下命令来安装 Docker compose。 Docker Compose 最近更新到 v2.0,其中引入了许多重大更改。我们将使用其 Github 发布页面上提供的最新 1.x 版本。
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
将可执行权限应用于 Docker 组合二进制文件。
$ sudo chmod +x /usr/local/bin/docker-compose
验证 Docker Compose 是否安装正确。
$ docker-compose --version docker-compose version 1.29.2, build 5becea4c
为 Docker compose 安装命令补全。
$ sudo curl \ -L https://raw.githubusercontent.com/docker/compose/1.29.2/contrib/completion/bash/docker-compose \ -o /etc/bash_completion.d/docker-compose $ source ~/.bashrc
本教程的 Docker 和 Docker compose 安装部分到此结束。
第 4 步 - 为 Docker 创建环境文件
配置松弛身份验证
Outline 要求您配置身份验证提供程序。对于我们的教程,我们将配置基于 Slack 的登录。
使用您的 Slack 帐户登录并访问 Slacks API 应用页面。
单击“创建应用程序”按钮继续。单击 From Scratch 链接以创建应用程序。
为您的应用选择一个名称,然后选择您希望您的应用出现的工作区。如果您不想将您的应用程序与现有工作区相关联,您可以创建另一个并返回到此步骤。
完成后单击创建应用程序按钮。接下来,向下滚动到页面底部并为您的应用程序提供描述、图标和背景颜色。
完成后单击“保存更改”按钮。从左侧边栏中选择 OAuth 和权限选项。
在提供的框中添加重定向 URL
https://outline.example.com/auth/slack.callback
,然后单击“添加”按钮。单击“保存 URL”按钮继续。向下滚动到页面的用户令牌范围部分,然后从下拉菜单中选择以下范围。
identity.avatar
identity.basic
identity.email
identity.team
从左侧边栏返回基本信息页面。从 App Credentials 下的框中复制值 Client ID 和 Client Secret。
配置 Slack 集成
从左侧边栏访问 Slash Commands 选项。
单击结果页面上的“新建命令”按钮。输入
/outline
作为命令。输入https://outline.example.com/api/hooks.slack
作为请求 URL。输入您的命令的描述和一个词作为提示。完成后点击底部的保存按钮。从左侧边栏打开菜单功能>>交互性和快捷方式。通过切换切换按钮启用交互并粘贴
https://outline.example.com/api/hooks.interactive
作为请求 URL。单击保存更改按钮完成。从左侧边栏打开设置 >> 安装应用程序页面,然后单击安装到工作区按钮为您的 Slack 工作区安装应用程序。
从左侧边栏访问“基本信息”页面,并复制应用程序 ID 和验证令牌值以用于 slack 应用程序集成。
创建 S3 凭证
为您在 AWS 或任何 S3 兼容服务上安装的 Outline 创建一个 S3 存储桶。创建存储桶后,添加以下策略 JSON 以配置跨域资源共享 (CORS)。将
AllowedOrigins
的值替换为您的大纲 URL。[ { "AllowedHeaders": [ "*" ], "AllowedMethods": [ "PUT", "POST" ], "AllowedOrigins": [ "https://docs.mycompany.com" ], "ExposeHeaders": [] }, { "AllowedHeaders": [], "AllowedMethods": [ "GET" ], "AllowedOrigins": [ "*" ], "ExposeHeaders": [] } ]
使用以下策略创建 IAM 用户。将
my-bucket-name
替换为您的 Outline S3 存储桶的实际名称。{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor", "Effect": "Allow", "Action": [ "s3:GetObjectAcl", "s3:DeleteObject", "s3:PutObject", "s3:GetObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::my-bucket-name/*" } ] }
现在您已经创建了 IAM 用户,为您的存储桶用户生成一个访问密钥和秘密。
创建密钥
环境文件需要一个秘密密钥和一个实用程序秘密。运行以下命令两次以生成两个密钥。
$ openssl rand -hex 32
复制并保存这些值。
创建和编辑环境文件
为 Outline 的 docker 设置创建一个目录。
$ mkdir ~/outline
切换到目录。
$ cd ~/outline
创建
docker.env
文件并打开它进行编辑。该文件将存储安装所需的所有环境变量。$ nano docker.env
将以下代码粘贴到其中。输入之前创建的秘钥和utils secret。复制之前为身份验证和应用程序集成创建的 Slack 凭据。按照以下指定输入您的 Amazon S3 凭据。
如果您想使用 Google Analytics 跟踪您的 Outline 应用程序的统计信息,请在下面的字段中输入您的 Analytics ID。目前,Outline 不支持 GA4 标签,因此您必须输入旧的跟踪 ID。
对于
WEB_CONCURRENCY
变量,将系统内存除以 512,然后输入近似值。FORCE_HTTPS
变量设置为 false,因为我们使用 Nginx 作为代理服务器。# –––––––––––––––– REQUIRED –––––––––––––––– SECRET_KEY=generate_a_new_key UTILS_SECRET=generate_a_new_key POSTGRES_USER=outlinepg POSTGRES_PASSWORD=yourpassword POSTGRES_DB=outline DATABASE_URL=postgres://outlinepg::5432/outline DATABASE_URL_TEST=postgres://outlinepg::5432/outline-test PGSSLMODE=disable REDIS_URL=redis://localhost:6379 URL=https://docs.example.com PORT=3000 AWS_ACCESS_KEY_ID=get_a_key_from_aws AWS_SECRET_ACCESS_KEY=get_the_secret_of_above_key AWS_REGION=us-east-2 AWS_S3_UPLOAD_BUCKET_URL=https://my-bucket-name.s3.us-east-2.amazonaws.com AWS_S3_UPLOAD_BUCKET_NAME=my-bucket-name AWS_S3_UPLOAD_MAX_SIZE=26214400 AWS_S3_FORCE_PATH_STYLE=true # –––––––––––––– AUTHENTICATION –––––––––––––– SLACK_KEY=<slackclientid> SLACK_SECRET=<slackclientsecret> # –––––––––––––––– OPTIONAL –––––––––––––––– GOOGLE_ANALYTICS_ID=UA-XXXXXXX-1 SLACK_VERIFICATION_TOKEN=your_token SLACK_APP_ID=A0XXXXXXX SLACK_MESSAGE_ACTIONS=true FORCE_HTTPS=false ENABLE_UPDATES=true WEB_CONCURRENCY=2
以上文件基于 Outlines Github 存储库中的示例文件。如果您需要配置任何其他设置,您可以将它们从它复制到您的文件中。
通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
第 5 步 - 为大纲创建 Docker Compose 文件
创建
docker-compose.yml
文件并打开它进行编辑。$ nano docker-compose.yml
将以下代码粘贴到其中。
version: "3" services: outline: image: outlinewiki/outline:latest restart: always command: sh -c "yarn sequelize:migrate --env=production-ssl-disabled && yarn start --env=production-ssl-disabled" env_file: ./docker.env ports: - "3000:3000" depends_on: - postgres - redis redis: image: redis restart: always env_file: ./docker.env ports: - "6379:6379" volumes: - ./redis.conf:/redis.conf command: ["redis-server", "/redis.conf"] postgres: image: postgres restart: always env_file: ./docker.env ports: - "5432:5432" volumes: - database-data:/var/lib/postgresql/data volumes: database-data:
通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
第 6 步 - 安装大纲
通过启动容器来安装 Outline。
$ docker-compose up -d
检查容器的状态。
$ docker ps
第 7 步 - 安装 SSL
要使用 Lets Encrypt 安装 SSL 证书,我们需要下载 Certbot 工具。为此,我们将使用 Snapd 包安装程序。
安装快照安装程序。
$ sudo apt install snapd
确保您的 Snapd 版本是最新的。
$ sudo snap install core && sudo snap refresh core
安装 Certbot。
$ sudo snap install --classic certbot
使用以下命令通过创建指向
/usr/bin
目录的符号链接来确保可以运行 Certbot 命令。$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
生成 SSL 证书。
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m -d outline.example.com
上面的命令会将证书下载到服务器上的
/etc/letsencrypt/live/outline.example.com
目录。生成 Diffie-Hellman 组证书。
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
为 Lets Encrypt 自动更新创建一个挑战 webroot 目录。
$ sudo mkdir -p /var/lib/letsencrypt
创建 Cron 作业以更新 SSL。它将每天运行以检查证书并在需要时更新证书。为此,首先,创建文件
/etc/cron.daily/certbot-renew
并打开它进行编辑。$ sudo nano /etc/cron.daily/certbot-renew
粘贴以下代码。
#!/bin/sh certbot renew --cert-name outline.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
更改任务文件的权限以使其可执行。
$ sudo chmod +x /etc/cron.daily/certbot-renew
第 8 步 - 安装 Nginx
Ubuntu 附带旧版本的 Nginx。您需要下载官方 Nginx 存储库以安装最新版本。
导入 Nginx 签名密钥。
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \ | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
添加 Nginx 稳定版本的存储库。
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \ http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list
更新系统存储库。
$ sudo apt update
安装 Nginx。
$ sudo apt install nginx
验证安装。
$ nginx -v nginx version: nginx/1.20.2
启用 Nginx 服务。
$ sudo systemctl enable nginx
第 9 步 - 配置 Nginx
至此,Shlink一直通过8080端口运行在本地系统,我们将使用Nginx作为反向代理在其域上运行。
在
/etc/nginx/conf.d
目录中为 Shlink 服务器创建一个配置文件。$ sudo nano /etc/nginx/conf.d/outline.conf
将以下代码粘贴到其中。
server { server_name outline.example.com; listen 443 ssl http2; listen [::]:443 ssl http2; access_log /var/log/nginx/outline.access.log; error_log /var/log/nginx/outline.error.log; ssl_certificate /etc/letsencrypt/live/outline.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/outline.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/outline.example.com/chain.pem; ssl_session_timeout 1d; ssl_session_cache shared:MozSSL:10m; ssl_session_tickets off; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem; location / { proxy_pass http://localhost:3000; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Host $host; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; proxy_set_header X-Forwarded-Proto $scheme; proxy_redirect off; } } ## HTTPS Redirect server { listen 80; listen [::]:80; server_name outline.example.com; return 301 https://$host$request_uri; }
完成后,按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
打开文件
/etc/nginx/nginx.conf
进行编辑。$ sudo nano /etc/nginx/nginx.conf
在行
include /etc/nginx/conf.d/*.conf;
之前添加以下行。server_names_hash_bucket_size 64;
通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。再次验证 Nginx。
验证 Nginx 配置文件语法。
$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
启动 Nginx 服务器。
$ sudo systemctl start nginx
第 10 步 - 访问大纲
在浏览器中启动域
https://outline.example.com
,您将看到以下页面。单击继续使用 Slack 按钮以使用 Slack 登录并连接您的工作区。
登录后,Outline 主页将打开,您可以开始使用它。
Slack 的 Outline 应用程序允许您从工作区内搜索并粘贴指向任何文档的链接。为此,请打开您的松弛工作区并在消息中键入
/outline
并发布它们。它会自动找到与搜索词相关的文档并将其发布在您的消息中。
第 11 步 - 更新大纲
要更新 Outline wiki,请运行以下命令。第一个命令关闭并删除容器。第二个为 Outline 和其他工具拉取最新版本的 Docker 镜像。如果您需要在 Docker 组合文件或环境文件中进行任何更改,您可以运行相同的命令。
$ docker-compose down --remove-orphans $ docker-compose pull
运行以下命令升级数据库。
$ docker-compose run --rm outline yarn db:migrate --env=production-ssl-disabled
使用新图像启动新容器,同时保持数据完好无损。
$ docker-compose up -d
结论
我们关于使用 Docker 在 Ubuntu 20.04 服务器上安装 Outline Knowledgebase Wiki 的教程到此结束。如果想深入了解Outline,可以关注其官方文档。如果您有任何问题,请在下面的评论中发表。