本教程适用于以下操作系统版本

  • Debian 12 (Bookworm)
  • Debian 11 (Bullseye)

本页内容

  • 先决条件
  • 安装依赖项
  • 配置 UFW (Uncomplicated Firewall)
  • 配置 MariaDB 数据库服务器
  • 下载并配置 Etherpad
  • 以 Systemd 服务方式运行 Etherpad
  • 配置 Nginx 作为反向代理
  • 使用 SSL/TLS 证书保护 Etherpad
  • 结论

Etherpad 是 Google Docs 和 Zoho Writer 等服务的免费开源替代品。Etherpad 是一款面向团队的协同实时文本编辑器,由于它是基于 Web 的文本编辑器,因此你可以随时随地访问。

Etherpad 上的任何更改都是实时发生的,并且 Etherpad 支持版本控制和面向团队的内置格式功能。Etherpad 是一款高度可定制的编辑器,支持各种插件。它还支持 doc、pdf、odt、markdown 等现代文档格式。

本指南将向你展示如何在 Debian 12 服务器上安装 Etherpad 协同编辑器。我们将演示如何在 MariaDB 数据库服务器和 Nginx Web 服务器的环境下安装 Etherpad,并通过 UFW (Uncomplicated Firewall) 以及借助 Certbot 和 Letsencrypt 的 SSL 来保护 Etherpad。

先决条件

要完成本指南,请确保你具备以下条件:

  • 一台 Debian 12 服务器。
  • 一个具有管理员权限的非 root 用户。
  • 一个指向你服务器 IP 地址的域名。

安装依赖项

Etherpad 是一款用 JavaScript 编写的协同编辑器开源软件。要安装 Etherpad,你必须在 Debian 服务器上安装 JavaScript 运行时。

在第一步中,你将安装 Etherpad 所需的以下依赖项:

  • Node.js 18:用于运行 Etherpad 的 JavaScript 运行时,Etherpad 本身也是用 JavaScript 编写。
  • Npm:Node.js 的包管理器。
  • MariaDB Server:作为 Etherpad 的数据库。
  • Nginx web server:作为 Etherpad 的反向代理。

让我们继续。

运行以下 apt update 命令来更新并刷新你的 Debian 软件包索引。

sudo apt update

如何在 Debian 12 上安装 Etherpad

然后,通过下面的 apt install 命令安装软件包依赖项。输入 y 确认并按 ENTER 继续安装。

sudo apt install mariadb-server nginx ufw nodejs npm gzip git curl python3 libssl-dev

如何在 Debian 12 上安装 Etherpad

依赖项安装完成后,通过下面的 nodejs 命令验证 Node.js 版本。你应当看到已安装 Node.18。

nodejs --version

如何在 Debian 12 上安装 Etherpad

然后,使用下面的 systemctl 命令检查 mariadb 服务状态。你应当看到 mariadb 服务已启用,并将在系统启动时自动运行,且 mariadb 服务状态为运行中。

sudo systemctl is-enabled mariadb
sudo systemctl status mariadb

如何在 Debian 12 上安装 Etherpad

最后,使用以下命令检查 nginx 服务。确保 nginx 服务正在运行且已启用。启用后,该服务将在系统启动时自动启动。

sudo systemctl is-enabled nginx
sudo systemctl status nginx

如何在 Debian 12 上安装 Etherpad

配置 UFW (Uncomplicated Firewall)

安装依赖项后,现在你将配置 UFW (Uncomplicated Firewall) 来保护你的 Etherpad 安装。你之前已经安装了 UFE,继续配置 UFW。

首先,运行以下命令启用 OpenSSH 配置项并允许 SSH 连接。然后,启动并启用 UFW (Uncomplicated Firewall)。

sudo ufw allow OpenSSH
sudo ufw enable

当提示出现时,输入 y 以启动并启用 UFW。成功时,你应当看到类似以下的输出:

如何在 Debian 12 上安装 Etherpad

接下来,运行以下 ufw 命令以查看可用的防火墙配置项,并启用 "Nginx Full" 配置项以同时开放 HTTP 和 HTTPS 端口。

sudo ufw app list
sudo ufw allow "Nginx Full"

最后,重新加载 UFW 以应用更改,并验证 UFW 上已启用的规则和配置项。

sudo ufw reload
sudo ufw status

你应当看到 UFW 处于活动状态,且 OpenSSH 和 Nginx Full 配置项已启用。

如何在 Debian 12 上安装 Etherpad

配置 MariaDB 数据库服务器

在接下来的部分中,你将通过 mariadb-secure-installation 工具来保护你的 MariaDB 服务器,并为 Etherpad 创建一个新的数据库和用户。

运行下面的 mariadb-secure-installation 命令来保护 MariaDB 服务器。mariadb-secure-installation 允许你为 MariaDB 设置 root 密码,并对你的 MariaDB 服务器应用一些基本的安全设置。

sudo mariadb-secure-installation

在此过程中,会询问你是否更改某些 MariaDB 配置。输入 Y 应用配置,或输入 n 表示否。

  • 当询问 MariaDB root 密码时,按 ENTER。当询问 unix_socket 认证方式时,输入 n。输入 Y 为 MariaDB root 用户设置新密码。然后,输入新密码并重复。输入 Y 移除 MariaDB 中默认的匿名用户。然后,再次输入 Y 以禁用 MariaDB root 用户的远程登录。输入 Y 移除 MariaDB 中默认的 test 数据库。最后,再次输入 Y 以重新加载表权限并应用更改。

在 MariaDB 服务器保护完成后,你将创建一个 Etherpad 将使用的新数据库和用户。

执行下面的 mariadb 客户端命令以登录到 MariaDB 服务器。输入你的 MariaDB root 用户密码。

sudo mariadb -u root -p

登录后,运行以下查询以创建新数据库 etherpad_lite_db 和用户 etherpaduser。请务必将密码 StrongPasswordEtherpadDB 替换为你的新数据库密码。

CREATE DATABASE etherpad_lite_db;
CREATE USER etherpaduser@localhost IDENTIFIED BY 'StrongPasswordEtherpadDB';
GRANT CREATE,ALTER,SELECT,INSERT,UPDATE,DELETE on etherpad_lite_db.* to etherpaduser@localhost;
FLUSH PRIVILEGES;

如何在 Debian 12 上安装 Etherpad

现在通过以下查询验证 MariaDB 用户 etherpaduser,以确保该用户 etherpaduser 可以访问数据库 etherpad_lite_db。

SHOW GRANTS FOR etherpaduser@localhost;

确保你得到类似以下的输出,这确认了用户 etherpaduser 可以访问数据库 etherpad_lite_db。

如何在 Debian 12 上安装 Etherpad

输入 quit 退出 MariaDB 服务器,完成本步骤。

下载并配置 Etherpad

在本节中,你将下载 Etherpad 源代码并安装其依赖项。然后,你还将配置 Etherpad 仅在本地主机(localhost)运行,并将 Etherpad 与 MariaDB 服务器进行配置。

执行以下命令以添加一个新系统用户 etherpad,其默认主目录为 /opt/etherpad-lite。

sudo adduser --system --no-create-home --home=/opt/etherpad-lite --group etherpad

现在通过 git 将 Etherpad 源代码下载到 /opt/etherpad-lite 目录,并将 /opt/etherpad-lite 目录的所有权更改为 etherpad 用户和组。这样 etherpad 用户就可以访问源代码。

cd /opt && git clone --branch master https://github.com/ether/etherpad-lite.git 
sudo chown -R etherpad:etherpad /opt/etherpad-lite

如何在 Debian 12 上安装 Etherpad

接下来,进入 /opt/etherpad-lite 目录并运行脚本 ./bin/run.sh 来为 Etherpad 安装准备系统环境。这将安装 Etherpad 所需的依赖项,并使用默认配置运行 Etherpad。

cd /opt/etherpad-lite
sudo su -s /bin/bash -c "./bin/run.sh" etherpad

Node.js 依赖项的安装。

如何在 Debian 12 上安装 Etherpad

依赖项安装完成后,Etherpad 应当已经以默认配置运行,下面是你会看到的输出。

如何在 Debian 12 上安装 Etherpad

按 Ctrl+c 终止 Etherpad 进程。你将修改 Etherpad 的配置文件 settings.json 来配置你的安装。

使用以下 nano 编辑器命令打开 settings.json 文件。

nano settings.json

更改你的 Etherpad 安装的默认标题。

  "title": "Etherpad Debian 12",

将 ip 更改为 localhost 或 127.0.0.1,以使 Etherpad 仅在本地主机上运行。

  "ip": "127.0.0.1",
  "port": 9001, 

注释掉 dbType 部分以禁用默认数据库配置。你也可以删除以下几行。

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

添加一个新的 dbType 配置,使用 mysql 作为你的 Etherpad 安装的默认数据库。请务必在以下配置中更改数据库名称、用户和密码的详细信息。

  "dbType" : "mysql",
  "dbSettings" : {
    "user":     "etherpaduser",
    "host":     "127.0.0.1",
    "port":     3306,
    "password": "StrongPasswordEtherpadDB",
    "database": "etherpad_lite_db",
    "charset":  "utf8mb4"
  },

完成后保存更改并关闭编辑器。

以 Systemd 服务方式运行 Etherpad

安装并配置 Etherpad 后,你将为其创建一个新的 systemd 服务文件。这让你能在后台运行 Etherpad,并通过 systemctl 工具轻松管理 Etherpad。

使用 nano 编辑器创建一个新 systemd 服务文件 /etc/systemd/system/etherpad.service。

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

插入以下配置,以 systemd 服务方式在后台运行 Etherpad。

[Unit]
Description=Etherpad-lite, the collaborative editor.
After=syslog.target network.target mariadb.service
[Service]
Type=simple
User=etherpad
Group=etherpad
WorkingDirectory=/opt/etherpad-lite
Environment=NODE_ENV=production
ExecStart=/usr/bin/node --experimental-worker /opt/etherpad-lite/node_modules/ep_etherpad-lite/node/server.js
# use mysql plus a complete settings.json to avoid Service hold-off time over, scheduling restart.
Restart=always
[Install]
WantedBy=multi-user.target

完成后,保存文件并退出编辑器。

接下来,运行以下 systemctl 命令以重新加载 systemd 管理器并应用新的 systemd 服务。

sudo systemctl daemon-reload

现在通过下面的 systemctl 命令启动并启用 etherpad 服务。Etherpad 应当作为 systemd 服务在后台运行,并将在系统启动时自动启动。

sudo systemctl start etherpad
sudo systemctl enable etherpad

如何在 Debian 12 上安装 Etherpad

最后,通过运行以下命令验证 etherpad 服务,以确保 etherpad 正在运行。

sudo systemctl status etherpad

下面的输出确认 etherpad 服务正在运行,并且它在本地主机上以 9001 端口运行。

如何在 Debian 12 上安装 Etherpad

输入以下 ss 命令,以确保 9001 端口正被 Node.js 应用程序(即 Etherpad)使用。

ss -tulpn | grep 9001

至此,Etherpad 已经安装完成,但为了充分利用它,你将把 Nginx 配置为反向代理,并通过 SSL/TLS 证书来保护 Etherpad。

如何在 Debian 12 上安装 Etherpad

配置 Nginx 作为反向代理

在本节中,你将创建一个新 Nginx server block,用作 Etherpad 的反向代理。因此,在开始之前,请确保你的域名已指向你的 Debian 服务器 IP 地址。

使用 nano 命令创建一个新 Nginx server block 配置文件 /etc/nginx/sites-available/etherpad.conf。

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

插入以下配置,并务必将域名替换为你的 etherpad 域名。

server {
    listen       80;
    server_name  etherpad.howtoforge.local;
    access_log  /var/log/nginx/eplite.access.log;
    error_log   /var/log/nginx/eplite.error.log;
    location / {
        proxy_pass         http://127.0.0.1:9001;
        proxy_buffering    off; # be careful, this line doesn't override any proxy_buffering on set in a conf.d/file.conf
        proxy_set_header   Host $host;
        proxy_pass_header  Server;
        # Note you might want to pass these headers etc too.
        proxy_set_header    X-Real-IP $remote_addr; # https://nginx.org/en/docs/http/ngx_http_proxy_module.html
        proxy_set_header    X-Forwarded-For $remote_addr; # EP logs to show the actual remote IP
        proxy_set_header    X-Forwarded-Proto $scheme; # for EP to set secure cookie flag when https is used
        proxy_http_version  1.1; # recommended with keepalive connections
        # WebSocket proxying - from https://nginx.org/en/docs/http/websocket.html
        proxy_set_header  Upgrade $http_upgrade;
        proxy_set_header  Connection $connection_upgrade;
    }
}

完成后保存文件并退出编辑器。

接下来,运行以下命令以启用 server block 文件 etherpad.conf 并验证整体 Nginx 配置。

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

如果你的 Nginx 配置正确无误,你应当得到类似 syntax is ok - test is successful 的输出。

如何在 Debian 12 上安装 Etherpad

现在运行以下 systemctl 命令以重启 Nginx 并应用更改。

sudo systemctl restart nginx

最后,为了确保你的 Nginx 配置成功,请使用你常用的 Web 浏览器访问你的 Etherpad 域名(例如:http://etherpad.howtoforge.local/)。如果成功,你应当看到 Etherpad 界面。

使用 SSL/TLS 证书保护 Etherpad

在将 Nginx 配置为反向代理之后,现在你将使用通过 Certbot 和 Letsencrypt 生成的 SSL/TLS 证书来保护 Etherpad。你还将通过 Certbot Nginx 插件在 Etherpad 中配置 HTTP 到 HTTPS 的自动重定向。

运行下面的 apt install 命令以安装 Cetbot 和 Cetbot Nginx 插件。输入 y 确认并按 ENTER 继续安装。

sudo apt install certbot python3-certbot-nginx

如何在 Debian 12 上安装 Etherpad

Certbot 安装完成后,运行下面的 certbot 命令为你的 Etherpad 域名生成 SSL/TLS Letsencrypt 证书。请务必在以下命令中更改域名和电子邮件地址。

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email 
[email protected]
 -d etherpad.howtoforge.local

过程完成后,新的 SSL 证书位于 /etc/letsencrypt/live/domain.com 目录中。并且 Etherpad 的 Nginx server block 配置将自动配置为使用 HTTPS。

打开你的 Web 浏览器并访问你的 Etherpad 域名(例如:http://etherpad.howtoforge.local/)。你将自动被重定向到安全的 HTTPS 连接,这是通过 Certbot Nginx 插件配置的。

现在输入新的 pad 名称,以确保你可以创建一个新的 pad 或文档。点击 OK 确认。

如何在 Debian 12 上安装 Etherpad

pad 创建完成后,尽情享受通过 Etherpad 实现的自托管文档协作吧。

如何在 Debian 12 上安装 Etherpad

结论

就是这样!你已经在 Debian 12 机器上完成了 Etherpad 的安装。你已经使用 MariaDB 数据库服务器和 Nginx Web 服务器安装了 Etherpad。你还通过来自 Letsencrypt 的 SSL/TLS 证书以及 UFW (Uncomplicated Firewall) 保护了你的 Etherpad。

从这里开始,你现在可以将 Etherpad 作为协同编辑器与朋友一起使用。或者,你也可以安装 Etherpad 插件/附加组件,以利用适合你需求的功能。