Etherpad是Google Docs和Zoho Writer等服务的免费和开源的替代品。Etherpad是一个供你的团队使用的协作式实时文本编辑器,由于Etherpad是一个基于网络的文本编辑器,它可以在任何地方、任何时间访问。
Etherpad上的任何变化都是实时发生的,而且etherpad还支持版本管理和团队的内置格式。Etherpad是一个高度可定制的编辑器,支持各种插件。而且还支持现代文档格式,如doc、pdf、odt、markdown等。
本教程将向你展示如何在一台带有MariaDB数据库服务器和Nginx网络服务器的AlmaLinux 9服务器上安装Etherpad。你还将通过SSL证书来确保Etherpad的安全,以实现安全访问。
要完成本教程,请确保你有以下条件:
在安装Etherpad之前,你必须安装Etherpad所需要的一些依赖项,包括:
完成这些步骤来安装Etherpad的依赖项:
首先,你必须在你的AlmaLinux服务器上安装 "开发工具"。输入以下dnf命令来安装 "开发工具",输入y,然后按回车键继续。
sudo dnf group install "Development Tools"
接下来,运行下面的命令来安装一些额外的依赖项。当出现提示时,输入y确认并按下ENTER。
sudo dnf install gzip git curl python3-devel openssl-devel pkg-config
Etherpad是一个主要用Node.js编写的基于网络的协作和实时编辑器。要安装它,你必须安装 Node.js JavaScript 运行时和 NPM(Node Package Manager)。
在写这篇文章的时候,Etherpad至少需要Node.js v16,该版本在AlmaLinux的appstream仓库中默认可用,你可以通过DNF来安装它。
运行以下 dnf 命令来安装 Node.js 和 NPM。输入y来确认安装,然后按回车键。
sudo dnf install nodejs npm
一旦Node.js安装完毕,运行以下命令,将/usr/local/bin目录添加到PATH环境变量中。这将确保一些通过NPM安装的二进制文件可以在服务器上运行。
echo "export PATH=$PATH:/usr/local/bin" >> ~/.bashrc
source ~/.bashrc
接下来,运行以下命令来定位Node.js和NPM的两个二进制文件。
which node
which npm
然后,使用下面的命令验证Node.js和NPM的版本。
node --version
npm --version
显示的输出确认Node.js v16和NPM 8. x已经安装,并且两个二进制文件都位于/bin目录下。
默认情况下,安装的Etherpad使用SQLite作为数据库。你可以使用MariaDB/MySQL作为你Etherpad安装的大型部署的数据库。
运行下面的dnf命令来安装MariaDB服务器。当出现提示时,输入y确认并按下ENTER。
sudo dnf install mariadb-server
一旦MariaDB安装完毕,运行下面的命令来启动和启用MariaDB服务。
sudo systemctl start mariadb
sudo systemctl enable mariadb
然后,使用下面的命令验证MariaDB的服务状态。
sudo systemctl status mariadb
如果MariaDB服务器正在运行,输出应该显示如下:
在安装完MariaDB服务器后,你将安装Nginx网络服务器,它将作为Etherpad的反向代理使用。因此,在进一步操作之前,请确保你有一个指向服务器IP地址的域名,以及通过Letsencrypt和Certbot生成的SSL证书。
运行下面的dnf命令来安装Nginx网络服务器。当出现提示时,输入确认并按回车键。
sudo dnf install nginx
现在,运行下面的命令,启动并启用Nginx服务。
sudo systemctl start nginx
sudo systemctl enable nginx
之后,输入下面的命令来验证Nginx服务,确保服务正在运行。
sudo systemctl status nginx
如果Nginx服务正在运行,应该得到这样的输出:
接下来,运行以下命令,在服务器上打开HTTP和HTTPS端口。
sudo firewall-cmd --add-service={http,https} --permanent
sudo firewall-cmd --reload
使用以下命令验证开放的端口和服务列表。你应该看到HTTP和HTTPS都在firewalld上被启用。
sudo firewall-cmd --list-all
在本节中,你将使用mariadb-secure-installation工具来保护MariaDB服务器,然后创建一个新的数据库和用户,供Etherpad使用。
运行下面的命令,开始保护MariaDB服务器的安全。
sudo mariadb-secure-installation
命令执行后,你会被要求进行以下配置:
随着MariaDB服务器的安全,接下来你将创建一个新的MariaDB数据库和用户。
使用下面的mariadb命令登录到MariaDB服务器。
sudo mariadb -u root -p
运行下面的查询,为Etherpad创建一个新的MariaDB数据库和用户。在这个例子中,你将创建一个新的数据库 etherpad_lite_db 和用户 etherpaduser,密码为 StrongPasswordEtherpadDB。
CREATE DATABASE etherpad_lite_db CHARACTER SET utf8mb4;
CREATE USER etherpaduser@localhost IDENTIFIED BY 'StrongPasswordEtherpadDB';
GRANT CREATE,ALTER,SELECT,INSERT,UPDATE,DELETE on etherpad_lite_db.* to etherpaduser@localhost;
FLUSH PRIVILEGES;
现在,运行以下查询来验证MariaDB用户etherpaduser的权限。
SHOW GRANTS FOR etherpaduser@localhost;
quit
你将注意到MariaDB用户etherpaduser拥有访问数据库etherpad_lite_db的权限。
输入quit来退出MariaDB。
在本节中,你将通过创建系统用户、下载Etherpad源代码、安装Etherpad的依赖项、将Etherpad与MariaDB数据库集成,然后通过命令行运行来验证安装,开始Etherpad的安装。
首先,运行下面的命令来创建一个新的系统用户和组 "etherpad"。这个用户将被用来运行Etherpad服务。
sudo groupadd etherpad
sudo adduser -r -M -d /opt/etherpad-lite -g etherpad etherpad
通过git下载Etherpad的源代码到目标目录/opt/etherpad-lite。
git clone --branch master https://github.com/ether/etherpad-lite.git /opt/etherpad-lite
一旦下载了Etherpad的源代码,运行下面的命令,将目录/opt/etherpad-lite的所有权改为用户和组 "etherpad"。
sudo chown -R etherpad:etherpad /opt/etherpad-lite
接下来,将工作目录移动到/opt/etherpad-lite目录,并使用下面的命令安装Etherpad的依赖项。
cd /opt/etherpad-lite
sudo su -s /bin/bash -c "./bin/installDeps.sh" etherpad
执行该命令后,你应该得到这样的安装过程:
安装完成后,使用下面的nano编辑器命令打开Etherpad的配置settings.json。
nano settings.json
改变你的Etherpad安装的标题。
"title": "Etherpad AlmaLinux 9",
改变Etherpad运行的默认IP地址为localhost或127.0.0.1。
"ip": "127.0.0.1",
"port": 9001,
移除下面的默认数据库配置。
/*
*"dbType": "dirty",
*"dbSettings": {
* "filename": "var/dirty.db"
*},
*/
像这样改变细节数据库以使用MySQL/MariaDB服务器。并且一定要改变数据库的名称、用户和密码。
"dbType" : "mysql",
"dbSettings" : {
"user": "etherpaduser",
"host": "localhost",
"port": 3306,
"password": "StrongPasswordEtherpadDB",
"database": "etherpad_lite_db",
"charset": "utf8mb4"
},
保存该文件,完成后退出编辑器。
接下来,执行以下命令来验证和运行Etherpad。
/bin/node --experimental-worker /opt/etherpad-lite/node_modules/ep_etherpad-lite/node/server.js
如果数据库配置和Etherpad安装成功,将显示以下输出:
按Ctrl+c来终止该进程。
安装好Etherpad后,你现在要把Etherpad设置成一个systemd服务。这允许你在后台运行Etherpad,并通过systemctl命令行轻松管理Etherpad。
首先,使用以下nano编辑器命令创建一个新的systemd服务文件/lib/systemd/system/etherpad.service。
sudo nano /lib/systemd/system/etherpad.service
在该文件中插入以下配置:
[Unit]
Description=Etherpad-lite, the collaborative editor.
After=syslog.target network.target mariadb.service nginx.service
[Service]
Type=simple
User=etherpad
Group=etherpad
WorkingDirectory=/opt/etherpad-lite
Environment=NODE_ENV=production
ExecStart=/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
完成后保存并关闭该文件。
现在,运行下面的命令,重新加载 systemd 管理器,并将 Etherpad 服务文件应用到你的系统中。
sudo systemctl daemon-reload
然后,使用下面的命令启动并启用Etherpad服务。
sudo systemctl start etherpad
sudo systemctl enable etherpad
用下面的命令验证Etherpad服务。如果Etherpad服务正在运行,你应该得到一个诸如 "active (running) "的输出。
sudo systemctl status etherpad
你也可以用下面的命令来验证你系统上的开放端口列表。你应该看到Etherpad使用了该端口9001。
ss -tulpn | grep 9001
在这一点上,Etherpad已经启动并运行在9001端口。为了让终端用户能够访问它,你可以使用Nginx,它将被用作反向代理。在你开始之前,确保你有将用于Etherpad的域名,并确保你已经通过Letsencrypt和Certbot生成了SSL证书。
使用下面的nano编辑器命令创建一个新的Nginx服务器块配置/etc/nginx/conf.d/etherpad.conf。
sudo nano /etc/nginx/conf.d/etherpad.conf
插入以下配置,并确保修改域名和SSL证书的路径等细节。
# enforce HTTPS
server {
listen 80;
server_name etherpad.hwdomain.io;
return 301 https://$host$request_uri;
}
# we're in the http context here
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 443 ssl http2;
server_name etherpad.hwdomain.io;
access_log /var/log/nginx/eplite.access.log;
error_log /var/log/nginx/eplite.error.log;
ssl_certificate /etc/letsencrypt/live/etherpad.hwdomain.io/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/etherpad.hwdomain.io/privkey.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
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;
}
}
保存该文件,完成后关闭编辑器。
现在,运行下面的命令,以确保你有正确和适当的配置。如果成功的话,你应该得到一个消息,如 "Syntax is ok - test is successful"。
sudo nginx -t
接下来,输入下面的命令,重新启动Nginx服务,并应用这些变化。
sudo systemctl restart nginx
之后,启动你的网络浏览器,访问Etherpad的安装域名(即:https://etherpad.hwdomain.io/)。你应该看到你的Etherpad协作式编辑器的默认主页。
现在通过输入焊盘名称创建一个新的焊盘,并点击确定。
下面你可以看到现在开始使用Etherpad作为协作式编辑器。
恭喜你,你已经完成了在 AlmaLinux 9 服务器上安装带有 MariaDB 数据库和 Nginx 网络服务器的 Etherpad。在此基础上,你还用SSL证书保护了Etherpad。你现在可以开始使用Etherpad作为你的朋友/小组/团队的主要协作编辑器了。