如何在 Rocky Linux 8 上安装 Etherpad Collaborative Web Editor
在此页
- 先决条件
- 第 1 步 - 配置防火墙
- 第 2 步 - 安装 Git
- 第 3 步 - 安装 MariaDB
- 第 4 步 - 配置 MariaDB
- 第 5 步 - 下载并安装 Etherpad
- 第 6 步 - 配置 Etherpad
- 第 7 步 - 创建 Etherpad 服务
- 第 8 步 - 使用 Lets Encrypt 安装 SSL
- 第 9 步 - 安装和配置 Nginx
- 更新 Etherpad
- 结论
Etherpad 是一种开源在线编辑器,可在浏览器中提供实时协作编辑。它是用 Node.js 编写的,可以自托管以与 WordPress、Drupal、Odoo、Discourse、Joomla 等各种平台一起使用。
在本教程中,我们将在 Rocky Linux 8 服务器上安装 Etherpad,使用 MariaDB 数据库来存储我们的数据。我们还将使用 Nginx 作为应用程序的反向代理,并使用 Lets Encrypt 安装 SSL 证书以启用与 Etherpad 实例的 HTTPS 连接。
先决条件
-
A system running Rocky Linux 8.
-
A non-root user with sudo privileges.
-
A domain name pointed to the server.
-
Nodejs installed. Follow our guide on installing Nodejs on Rocky Linux 8 server. Use any of the two methods specified.
-
Make sure everything is updated.
$ sudo dnf update
第 1 步 - 配置防火墙
Rocky Linux 使用 Firewalld 防火墙。检查防火墙状态。
$ sudo firewall-cmd --state
running
这表明它已成功启动并运行。
防火墙适用于不同的区域,公共区域是我们将使用的默认区域。列出防火墙上所有活动的服务和端口。
$ sudo firewall-cmd --permanent --list-services
它应该显示以下输出。
cockpit dhcpv6-client ssh
允许 HTTP 和 HTTPS 端口。
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
打开 Etherpad 应用程序使用的 9001
端口。
$ sudo firewall-cmd --permanent --add-port=9001/tcp
重新检查防火墙的状态。
$ sudo firewall-cmd --permanent --list-services
您应该会看到类似的输出。
cockpit dhcpv6-client http https ssh
重新加载防火墙以启用更改。
$ sudo firewall-cmd --reload
第 2 步 - 安装 Git
在安装 Etherpad 之前,我们需要安装 Git。运行以下命令来安装 Git。
$ sudo dnf install git
验证安装。
$ git --version
git version 2.27.0
添加初始配置。
$ git config --global user.name "YourName"
$ git config --global user.email ""
列出刚刚设置的配置。
$ git config --list
user.name=YourName
第 3 步 - 安装 MariaDB
由于我们将使用 MariaDB 数据库来存储 Etherpads 数据,因此我们需要先安装和配置它。
Rocky Linux AppStream 存储库随 MariaDB 一起提供。要列出已安装的所有可用版本的 MariaDB,请运行以下命令。
$ sudo dnf module list mariadb
Last metadata expiration check: 1:15:26 ago on Thu 21 Oct 2021 10:20:01 AM UTC.
Rocky Linux 8 - AppStream
Name Stream Profiles Summary
mariadb 10.3 [d] client, galera, server [d] MariaDB Module
mariadb 10.5 client, galera, server [d] MariaDB Module
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
默认版本设置为 10.3。但是,您可以使用以下命令安装最新版本。
$ sudo dnf module enable mariadb:10.5
安装 MariaDB。
$ sudo dnf install mariadb-server
启用并启动 MariaDB 服务。
$ sudo systemctl enable mariadb --now
检查服务的状态。
$ sudo systemctl status mariadb
保护 MariaDB 服务器。
$ sudo mysql_secure_installation
您将面临各种提示。回答如下。
Enter current password for root (enter for none): Press Enter
Switch to unix_socket authentication [Y/n] Type y
Change the root password? [Y/n] Type n
Remove anonymous users? [Y/n] Type y
Disallow root login remotely? [Y/n] Type y
Remove test database and access to it? [Y/n] Type y
Reload privilege tables now? [Y/n] Type y
您现在可以使用以下命令连接到 MariaDB 服务器。
$ sudo mysql
第 4 步 - 配置 MariaDB
登录到 MariaDB shell。
$ sudo mysql
为 Etherpad 创建一个新的数据库。
$ create database `etherpad_lite_db`;
创建一个新的数据库用户。
$ CREATE USER 'etherpaduser'@'localhost' identified by 'password';
使用强密码。
授予用户对数据库的权限。
$ grant CREATE,ALTER,SELECT,INSERT,UPDATE,DELETE on `etherpad_lite_db`.* to '<etherpaduser>'@'localhost';
退出 MySQL 外壳。
$ exit
第 5 步 - 下载并安装 Etherpad
要安装 Etherpad,我们将下载它的源代码并构建它。
第一步是使用以下命令创建一个新的 etherpad
用户。
$ sudo adduser --system --home /opt/etherpad --create-home --user-group etherpad
此命令创建一个--system
用户,这意味着它无法登录并且没有密码。我们还给它一个主目录 /opt/etherpad
,这是我们下载 Etherpad 的地方。 --create-home
标志创建具有正确权限的主目录。 --user-group
标志创建一个与用户名同名的组。
切换到 etherpad
用户下载并安装应用程序。
$ sudo -u etherpad bash
切换到 /opt/etherpad
目录。
[ user] cd /opt/etherpad
将 Etherpad 存储库克隆到 /opt/etherpad
目录中。
[ ~]$ git clone --branch master git://github.com/ether/etherpad-lite.git
切换到新下载的目录。
[ ~]$ cd etherpad-lite
运行 Etherpads run.sh
脚本来设置和安装依赖项。
[ etherpad-lite]$ src/bin/run.sh
您可以在浏览器中启动 URL http://YOURSERVERIP:9001
以启动 Etherpad。您将看到以下屏幕。

上面的安装有问题。它要求您在前台运行 Node 的情况下保持当前 shell 打开。要使其成为持久安装,我们需要将 Etherpad 作为服务运行。在终端上按 Ctrl + C 以停止运行 Etherpad。
第 6 步 - 配置 Etherpad
在继续之前,我们需要设置一些设置并根据我们的需要配置我们的安装。 Etherpad 将其设置存储在安装目录的 settings.json
文件中。
打开文件进行编辑。
[ etherpad-lite]$ nano settings.json
设置文件的格式为 JSON。您需要配置的第一件事是数据库设置。
找到下面的代码,在前面加上//
注释掉。
// "dbType": "dirty",
// "dbSettings": {
// "filename": "var/dirty.db"
// },
然后,找到以下代码并按如下方式更改其值。确保删除开头和结尾的 /*
和 */
。
"dbType" : "mysql",
"dbSettings" : {
"user": "etherpaduser",
"host": "localhost",
"port": 3306,
"password": "password",
"database": "etherpad_lite_db",
"charset": "utf8mb4"
},
最后,稍微向下滚动以找到 trustProxy
设置并将其值从 false
更改为 true
。
"trustProxy": true,
需要此设置才能使 Etherpad 与 Nginx 一起工作。
完成后按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
退出 Etherpad 用户 shell。
[ etherpad-lite]$ exit
第 7 步 - 创建 Etherpad 服务
要在引导时启动 Etherpad 并使用 systemctl
管理进程,我们需要创建一个服务文件。
创建并打开服务文件。
$ sudo nano /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/etherpad-lite/node_modules/ep_etherpad-lite/node/server.js
Restart=always
[Install]
WantedBy=multi-user.target
完成后按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
重新加载服务守护进程以引入新配置。
$ sudo systemctl daemon-reload
启用启动 Etherpad 服务。
$ sudo systemctl enable etherpad --now
检查服务的状态。
$ sudo systemctl status etherpad
? etherpad.service - Etherpad, a collaborative web editor.
Loaded: loaded (/etc/systemd/system/etherpad.service; disabled; vendor preset: disabled)
Active: active (running) since Thu 2021-10-21 15:06:53 UTC; 6s ago
Main PID: 47228 (node)
Tasks: 13 (limit: 11411)
Memory: 102.8M
CGroup: /system.slice/etherpad.service
??47228 /usr/bin/node --experimental-worker /opt/etherpad/etherpad-lite/node_modules/ep_etherpad-lite/node/server.js
.......
第 8 步 - 使用 Lets Encrypt 安装 SSL
要使用 Lets Encrypt 安装 SSL 证书,我们需要安装 Certbot 工具。
首先,您需要下载并安装 EPEL 存储库。
$ sudo dnf install epel-release
运行以下命令来安装 Certbot。
$ sudo dnf install certbot
生成 SSL 证书。
$ sudo certbot certonly --standalone --agree-tos --preferred-challenges http -m -d example.com
上面的命令会将证书下载到服务器上的 /etc/letsencrypt/live/etherpad.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 etherpad.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
更改任务文件的权限以使其可执行。
$ sudo chmod +x /etc/cron.daily/certbot-renew
第 9 步 - 安装和配置 Nginx
Rocky Linux 附带旧版本的 Nginx。要安装最新版本,您需要添加 Nginx 存储库。
创建并打开文件 /etc/yum.repos.d/nginx.repo
进行编辑。
$ sudo nano /etc/yum.repos.d/nginx.repo
将以下代码粘贴到其中。
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
完成后按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
安装 Nginx。
$ sudo dnf install nginx
启用 Nginx 服务。
$ sudo systemctl enable nginx
接下来,创建并打开 /etc/nginx/conf.d/etherpad.conf
进行编辑。
$ sudo nano /etc/nginx/conf.d/etherpad.conf
将以下代码粘贴到其中。
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name etherpad.example.com;
access_log /var/log/nginx/etherpad.access.log;
error_log /var/log/nginx/etherpad.error.log;
ssl_certificate /etc/letsencrypt/live/etherpad.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/etherpad.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/etherpad.example.com/chain.pem;
ssl_session_timeout 5m;
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
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_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
location / {
rewrite ^/$ / break;
rewrite ^/locales/(.*) /locales/$1 break;
rewrite ^/locales.json /locales.json break;
rewrite ^/admin(.*) /admin/$1 break;
rewrite ^/p/(.*) /p/$1 break;
rewrite ^/static/(.*) /static/$1 break;
rewrite ^/pluginfw/(.*) /pluginfw/$1 break;
rewrite ^/javascripts/(.*) /javascripts/$1 break;
rewrite ^/socket.io/(.*) /socket.io/$1 break;
rewrite ^/ep/(.*) /ep/$1 break;
rewrite ^/minified/(.*) /minified/$1 break;
rewrite ^/api/(.*) /api/$1 break;
rewrite ^/ro/(.*) /ro/$1 break;
rewrite ^/error/(.*) /error/$1 break;
rewrite ^/jserror(.*) /jserror$1 break;
rewrite ^/redirect(.*) /redirect$1 break;
rewrite /favicon.ico /favicon.ico break;
rewrite /robots.txt /robots.txt break;
rewrite /(.*) /p/$1;
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 $connection_upgrade;
}
}
# we're in the http context here
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
# enforce HTTPS
server {
listen 80;
listen [::]:80;
server_name etherpad.example.com;
return 301 https://$host$request_uri;
}
完成后按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
验证 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
如果出现以下错误,则需要编辑文件 /etc/nginx/nginx.conf
以添加/调整变量的大小 server_names_hash_bucket_size
。
nginx: [emerg] could not build the server_names_hash, you should increase server_names_hash_bucket_size
打开文件 /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 systemctl start nginx
在浏览器中启动 URL https://etherpad.example.com
,Etherpad 主页将打开。您现在可以使用它来编辑文档和邀请协作者。
更新 Etherpad
更新 Etherpad 很容易。第一步是切换到 Etherpad 用户 shell。
$ sudo -u etherpad bash
切换到 /opt/etherpad/etherpad-lite
目录。
[ user] cd /opt/etherpad/etherpad-lite
将最新的 Etherpad 存储库拉入 /opt/etherpad/etherpad-lite
目录。
[ ~]$ git pull origin
运行 Etherpads run.sh
脚本以设置最新版本的 Etherpad。
[ etherpad-lite]$ src/bin/run.sh
结论
在本教程中,我们使用 Nginx 服务器设置 Etherpad 协作编辑器,并使用 Lets Encrypt SSL 证书进行保护。您的 Etherpad 安装已准备就绪,可以使用它来扩展更多功能,包括经过身份验证的用户、插件和用户界面自定义。
如果您有任何问题,请在下面的评论中发表。