如何在Ubuntu20.04上安装Etherpad协作Web编辑器

来自菜鸟教程
跳转至:导航、​搜索

介绍

Etherpad 是一个 Web 应用程序,可在浏览器中实现实时协作文本编辑。 它是用 Node.js 编写的,可以在各种平台和操作系统上自托管。

在本教程中,我们将在 Ubuntu 20.04 服务器上安装 Etherpad,使用 SQLite 数据库引擎来存储我们的数据。 我们还将安装和配置 Nginx 以充当应用程序的反向代理,我们将从 Let's Encrypt 证书颁发机构获取并安装 SSL 证书,以启用与我们的 Etherpad 实例的安全 HTTPS 连接。

注意:如果您希望使用我们的App Platform服务来自托管Etherpad,请参阅我们的将Etherpad Collaborative Web Editor部署到App Platform教程,我们在其中创建了一个App用于运行 Etherpad Docker 容器并将其连接到托管 PostgreSQL 数据库的平台应用程序。


先决条件

在开始本教程之前,您将需要以下内容:

  • Ubuntu 20.04 服务器,具有未启用 rootsudo 的用户,并启用了 UFW 防火墙。 请阅读我们的 Initial Server Setup with Ubuntu 20.04 以了解有关设置这些要求的更多信息。
  • 已安装 Node.js,版本 14 或更高版本。 请参阅如何在 Ubuntu 20.04 上安装 Node.js 的 选项 2,了解如何使用 NodeSource 包安装最新版本的 Node.js。
  • 指向您服务器的公共 IP 地址的域名。 例如,这应该类似于 example.cometherpad.example.com

注意: 如果您使用的是 DigitalOcean,我们的 DNS 文档 可以帮助您在控制面板中设置您的域名。


满足先决条件后,继续执行第 1 步,我们将在其中下载和配置 Etherpad 应用程序。

第 1 步 — 下载和配置 Etherpad

要安装 Etherpad,您需要下载源代码、安装依赖项并配置 systemd 以运行服务器。

Etherpad 维护人员建议以自己的用户身份运行该软件,因此您的第一步是使用 adduser 命令创建一个新的 etherpad 用户:

sudo adduser --system --group --home /opt/etherpad etherpad

这将创建一个 --system 用户,这意味着它无法直接登录并且没有分配密码或 shell。 我们给它一个 /opt/etherpad 的主目录,我们将在这里下载和配置 Etherpad 软件。 我们还使用 --group 标志创建了一个 etherpad 组。

您现在需要以 etherpad 用户身份运行一些命令。 为此,您将使用 sudo 命令以 etherpad 用户 的身份打开 bash shell 。 然后将目录 (cd) 更改为 /opt/etherpad

sudo -u etherpad bash
cd /opt/etherpad

您的 shell 提示符将更新以显示您是 etherpad 用户。 它应该类似于 etherpad@host:~$

现在使用 Git 将 Etherpad 存储库克隆到 /opt/etherpad 中:

git clone --branch master https://github.com/ether/etherpad-lite.git .

这会将 Etherpad 源代码的 master 分支拉入当前目录 (.)。 完成后,运行 Etherpad 的 installDeps.sh 脚本来安装依赖项:

./bin/installDeps.sh

这可能需要一分钟。 完成后,您需要手动安装最后一个依赖项。 我们需要 cd 进入 Etherpad src 文件夹并安装 sqlite3 包以便使用 SQLite 作为我们的数据库。

首先,进入src目录:

cd src

然后使用 npm 安装 sqlite3 包:

npm install sqlite3

作为 etherpad 用户,您的最终任务是更新 Etherpad settings.json 文件以使用 SQLite 作为其数据库,并与 Nginx 一起工作。 上移到 /opt/etherpad 目录:

cd /opt/etherpad

然后使用您喜欢的文本编辑器打开设置文件:

nano settings.json

该文件被格式化为 JSON,但在解释每个设置的过程中都有大量注释。 您可以配置很多,但现在我们对更新数据库配置的两个值感兴趣:

设置.json

  "dbType": "dirty",
  "dbSettings": {
    "filename": "var/dirty.db"
  },

向下滚动并查找 dbTypedbSettings 部分,如图所示。 将设置更新为 sqlite 和您选择的文件名,如下所示:

设置.json

  "dbType": "sqlite",
  "dbSettings": {
    "filename": "var/sqlite.db"
  },

最后,向下滚动一些,找到 trustProxy 设置,并将其更新为 true

设置.json

"trustProxy": true,

保存并关闭设置文件。 在 nano 中,您可以通过键入 CTRL+O 然后键入 ENTER 保存并退出 CTRL+X 来保存和关闭。

完成后,一定要退出etherpad用户的shell

exit

您将返回到普通用户的 shell。

Etherpad 已安装和配置。 接下来我们将创建一个 systemd 服务来启动和管理 Etherpad 进程。

第 2 步 — 为 Etherpad 创建 Systemd 服务

为了在启动时启动 Etherpad 并使用 systemctl 管理进程,我们需要创建一个 systemd 服务文件。 在您喜欢的文本编辑器中打开新文件:

sudo nano /etc/systemd/system/etherpad.service

我们将根据 Etherpad 文档 wiki 中的信息创建服务定义。 如何将 Etherpad Lite 部署为服务 页面提供了一个示例配置,只需进行一些更改即可使其适用于我们。

将以下内容添加到文本编辑器中,然后保存并关闭文件:

/etc/systemd/system/etherpad.service

[Unit]
Description=Etherpad, a collaborative web editor.
After=syslog.target network.target

[Service]
Type=simple
User=etherpad
Group=etherpad
WorkingDirectory=/opt/etherpad
Environment=NODE_ENV=production
ExecStart=/usr/bin/node --experimental-worker /opt/etherpad/node_modules/ep_etherpad-lite/node/server.js
Restart=always

[Install]
WantedBy=multi-user.target

该文件为 systemd 提供了运行 Etherpad 所需的信息,包括运行它的用户和组,以及用于启动进程的命令 (ExecStart=...)。

关闭文件后,重新加载 systemd 守护进程以引入新配置:

sudo systemctl daemon-reload

接下来,启用 etherpad 服务。 这意味着服务将在您的服务器重新启动时启动:

sudo systemctl enable etherpad

最后,我们可以启动服务:

sudo systemctl start etherpad

使用 systemctl status 检查服务是否正常启动:

sudo systemctl status etherpad
Output● etherpad.service - Etherpad, a collaborative web editor.
     Loaded: loaded (/etc/systemd/system/etherpad.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2021-09-09 14:12:43 UTC; 18min ago
   Main PID: 698 (node)
      Tasks: 13 (limit: 1136)
     Memory: 152.0M
     CGroup: /system.slice/etherpad.service
             └─698 /usr/bin/node --experimental-worker /opt/etherpad/node_modules/ep_etherpad-lite/node/server.js

输出应指示服务为 active (running)

Etherpad 现在正在运行,但它对公众不可用,因为端口 9001 被您的防火墙阻止。 在下一步中,我们将通过在 Etherpad 进程之前将 Nginx 设置为反向代理来公开 Etherpad。

第 3 步 — 安装和配置 Nginx

将 Nginx 等 Web 服务器放在 Node.js 服务器前面可以通过将缓存、压缩和静态文件服务卸载到更高效的进程来提高性能。 我们将安装 Nginx 并将其配置为对 Etherpad 的 proxy 请求,这意味着它将负责将用户的请求传递给 Etherpad 并再次返回。

首先,刷新你的包列表,然后使用 apt 安装 Nginx:

sudo apt update
sudo apt install nginx

使用“Nginx Full”UFW 应用程序配置文件允许到端口 80443(HTTP 和 HTTPS)的流量:

sudo ufw allow "Nginx Full"
OutputRule added
Rule added (v6)

接下来,在/etc/nginx/sites-available目录下打开一个新的Nginx配置文件。 我们将调用我们的 etherpad.conf 但您可以使用不同的名称:

sudo nano /etc/nginx/sites-available/etherpad.conf

将以下内容粘贴到新的配置文件中,确保将 your_domain_here 替换为指向您的 Etherpad 服务器的域。 例如,这将类似于 etherpad.example.com

/etc/nginx/sites-available/etherpad.conf

server {
    listen       80;
    listen       [::]:80;
    server_name  your_domain_here;

    access_log  /var/log/nginx/etherpad.access.log;
    error_log   /var/log/nginx/etherpad.error.log;

    location / {
        proxy_pass         http://127.0.0.1:9001;
        proxy_buffering    off;
        proxy_set_header   Host $host;
        proxy_pass_header  Server;

        # proxy headers
        proxy_set_header    X-Real-IP $remote_addr;
        proxy_set_header    X-Forwarded-For $remote_addr;
        proxy_set_header    X-Forwarded-Proto $scheme;
        proxy_http_version  1.1;

        # websocket proxying
        proxy_set_header  Upgrade $http_upgrade;
        proxy_set_header  Connection "upgrade";
    }
}

此配置大致基于 Etherpad wiki 上提供的配置 。 它目前仅支持 HTTP,因为我们将让 Certbot 在下一步中负责配置 SSL。 配置的其余部分设置日志记录位置,然后将所有流量传递到 http://127.0.0.1:9001,即我们在上一步中启动的 Etherpad 实例。 我们还设置了表现良好的代理和 websockets(启用实时双向通信的持久 HTTP 连接)通过代理工作所需的各种标头。

保存并关闭文件,然后通过将其链接到 /etc/nginx/sites-enabled/ 来启用配置:

sudo ln -s /etc/nginx/sites-available/etherpad.conf /etc/nginx/sites-enabled/

使用 nginx -t 验证配置文件语法是否正确:

sudo nginx -t
[secondary_lable Output]
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

最后,重新加载 nginx 服务以获取新配置:

sudo systemctl reload nginx

您的 Etherpad 站点现在应该可以在纯 HTTP 上使用,它看起来像这样:

现在我们的站点已经启动并通过 HTTP 运行,是时候使用 Certbot 和 Let's Encrypt 证书来保护连接了。

第 4 步 — 安装 Certbot 并设置 SSL 证书

感谢 Certbot 和 Let's Encrypt 免费证书颁发机构,将 SSL 加密添加到我们的 Etherpad 应用程序只需要两个命令。

首先,安装 Certbot 及其 Nginx 插件:

sudo apt install certbot python3-certbot-nginx

接下来,在 --nginx 模式下运行 certbot,并指定您在 Nginx server_name 配置中使用的相同域:

sudo certbot --nginx -d your_domain_here

系统将提示您同意 Let's Encrypt 服务条款,并输入电子邮件地址。

之后,系统会询问您是否要将所有 HTTP 流量重定向到 HTTPS。 这取决于您,但通常建议这样做并且安全。

之后,Let's Encrypt 将确认您的请求,Certbot 将下载您的证书:

OutputCongratulations! You have successfully enabled https://etherpad.example.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=etherpad.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/etherpad.example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/etherpad.example.com/privkey.pem
   Your cert will expire on 2021-12-06. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Certbot 将自动重新加载 Nginx 以获取新的配置和证书。 重新加载您的网站,如果您选择重定向选项,它应该会自动将您切换到 HTTPS。

你完成了! 试用您的新 Etherpad 编辑器并邀请一些合作者。

结论

在本教程中,我们使用 Nginx 和 Let's Encrypt SSL 证书设置 Etherpad。 您的 Etherpad 现在可以使用了,但您可能还需要进行更多配置,包括添加经过身份验证的用户、添加插件以及通过 skins 自定义用户界面。

您的 SQLite 支持的 Etherpad 实例将能够处理中等数量的活动用户,但如果您预计流量会非常高,您可能需要考虑配置 MySQL 或 PostgreSQL 数据库。

所有这些配置选项都记录在 官方 Etherpad wiki 上。