de Etherpad Collaborative Web Editor installeren op Rocky Linux 8

Etherpad is een open-source online editor die collaboratief bewerken in real-time in de browser mogelijk maakt. Het is geschreven in Node.js en kan zelf gehost worden om te werken met verschillende platforms zoals WordPress, Drupal, Odoo, Discourse, Joomla, enz.

In deze zelfstudie installeren we Etherpad op een Rocky Linux 8 server, en gebruiken we de MariaDB databank om onze gegevens op te slaan. We zullen ook Nginx gebruiken als reverse proxy voor de toepassing en een SSL certificaat installeren met Let’s Encrypt om HTTPS verbindingen naar onze Etherpad instantie mogelijk te maken.

Vereisten

  1. Een systeem met Rocky Linux 8.

  2. Een niet-root gebruiker met sudo rechten.

  3. Een domeinnaam die naar de server wijst.

  4. Nodejs geïnstalleerd. Volg onze gids over het installeren van Nodejs op de Rocky Linux 8 server. Gebruik een van de twee aangegeven methoden.

  5. Zorg ervoor dat alles bijgewerkt is.

    $ sudo dnf update
    

Stap 1 – Configureer Firewall

Rocky Linux gebruikt Firewalld firewall. Controleer de status van de firewall.

$ sudo firewall-cmd --state
running

Dit geeft aan dat hij met succes in werking is.

De firewall werkt met verschillende zones en de public zone is de standaard, die we zullen gebruiken. Maak een lijst van alle diensten en poorten die op de firewall actief zijn.

$ sudo firewall-cmd --permanent --list-services

Het zou de volgende uitvoer moeten geven.

cockpit dhcpv6-client ssh

Sta HTTP en HTTPS poorten toe.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Open de 9001 poort die gebruikt wordt door de Etherpad toepassing.

$ sudo firewall-cmd --permanent --add-port=9001/tcp

Controleer de status van de firewall opnieuw.

$ sudo firewall-cmd --permanent --list-services

Je zou een gelijkaardige uitvoer moeten zien.

cockpit dhcpv6-client http https ssh

Herlaad de firewall om de veranderingen in te schakelen.

$ sudo firewall-cmd --reload

Stap 2 – Git installeren

Voordat we Etherpad installeren, moeten we Git installeren. Voer het volgende commando uit om Git te installeren.

$ sudo dnf install git

Verifieer de installatie.

$ git --version
git version 2.27.0

Voeg initiële configuratie toe.

$ git config --global user.name "YourName"
$ git config --global user.email "[email protected]"

Maak een lijst van de zojuist ingestelde configuratie.

$ git config --list
user.name=YourName
[email protected]

Stap 3 – Installeer MariaDB

Omdat we de MariaDB databank zullen gebruiken om Etherpad’s gegevens op te slaan, moeten we die eerst installeren en configureren.

In de Rocky Linux AppStream repository wordt MariaDB meegeleverd. Om een lijst te krijgen van alle beschikbare versies van MariaDB die geïnstalleerd zijn, voer je het volgende commando uit.

$ 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

De standaard versie staat op 10.3. Je kunt echter de nieuwste versie installeren met het volgende commando.

$ sudo dnf module enable mariadb:10.5

Installeer MariaDB.

$ sudo dnf install mariadb-server

Schakel de MariaDB dienst in en start hem.

$ sudo systemctl enable mariadb --now

Controleer de status van de dienst.

$ sudo systemctl status mariadb

Beveilig de MariaDB server.

$ sudo mysql_secure_installation

Je krijgt te maken met verschillende prompts. Beantwoord ze als volgt.

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

Je kunt nu verbinding maken met de MariaDB server met het volgende commando.

$ sudo mysql 

Stap 4 – MariaDB configureren

Log in op de MariaDB shell.

$ sudo mysql

Maak een nieuwe database voor Etherpad.

$ create database `etherpad_lite_db`;

Maak een nieuwe database gebruiker aan.

$ CREATE USER 'etherpaduser'@'localhost' identified by 'password';

Gebruik een sterk wachtwoord.

Geef de gebruiker rechten op de database.

$ grant CREATE,ALTER,SELECT,INSERT,UPDATE,DELETE on `etherpad_lite_db`.* to '<etherpaduser>'@'localhost';

Sluit de MySQL shell af.

$ exit

Stap 5 – Download en installeer Etherpad

Om Etherpad te installeren, zullen we de broncode ervan downloaden en het bouwen.

De eerste stap is het aanmaken van een nieuwe etherpad gebruiker met het volgende commando.

$ sudo adduser --system --home /opt/etherpad --create-home --user-group etherpad

Dit commando maakt een --system gebruiker aan, wat betekent dat hij niet kan inloggen en geen wachtwoord heeft. We geven het ook een thuismap /opt/etherpad, waar we Etherpad zullen downloaden. De --create-home vlag maakt de thuismap aan met de juiste rechten. De --user-group vlag maakt een groep aan met dezelfde naam als de gebruikersnaam.

Schakel over naar de etherpad gebruiker om het programma te downloaden en te installeren.

$ sudo -u etherpad bash

Ga naar de /opt/etherpad directory.

[[email protected] user] cd /opt/etherpad

Kloon de Etherpad repository naar de /opt/etherpad directory.

[[email protected] ~]$ git clone --branch master git://github.com/ether/etherpad-lite.git

Schakel over naar de nieuw gedownloade directory.

[[email protected] ~]$ cd etherpad-lite

Voer het Etherpad’s run.sh script uit om afhankelijkheden in te stellen en te installeren.

[[email protected] etherpad-lite]$ src/bin/run.sh

Je kunt de URL http://YOURSERVERIP:9001 in de browser starten om Etherpad te starten. Je krijgt het volgende scherm.

Etherpad Home

Er is een probleem met de bovenstaande installatie. Het vereist dat je de huidige shell open houdt met Node draaiend op de voorgrond. Om er een blijvende installatie van te maken, moeten we Etherpad als een service draaien. Druk op Ctrl + C op je terminal om Etherpad te stoppen met draaien.

Stap 6 – Etherpad configureren

Voor we verder gaan, moeten we enkele instellingen maken en onze installatie naar onze behoeften instellen. Etherpad slaat zijn instellingen op in het settings.json bestand in de installatiedirectory.

Open het bestand om het te bewerken.

[[email protected] etherpad-lite]$ nano settings.json

Het instellingenbestand is opgemaakt als JSON. Het eerste dat je moet configureren zijn de databank instellingen.

Zoek de volgende code en maak er commentaar van door er // voor te zetten.

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

Zoek dan de volgende code en verander de waarden als volgt. Zorg ervoor dat je /* en */ aan het begin en het eind verwijdert.

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

Scroll tenslotte iets naar beneden om de instelling trustProxy te vinden en verander de waarde ervan van false in true.

  "trustProxy": true,

Deze instelling is nodig om Etherpad samen met Nginx te laten werken.

Bewaar het bestand door op Ctrl + X te drukken en Y in te voeren als daarom gevraagd wordt als je klaar bent.

Verlaat de Etherpad gebruikersshell.

[[email protected] etherpad-lite]$ exit

Stap 7 – Etherpad dienst aanmaken

Om Etherpad bij het opstarten te starten en het proces te beheren met systemctl, moeten we een service bestand maken.

Maak en open het service bestand.

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

Plak er de volgende code in.

[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

Sla het bestand op door op Ctrl + X te drukken en Y in te voeren als daarom gevraagd wordt als je klaar bent.

Herlaad de servicedaemon om de nieuwe configuratie binnen te halen.

$ sudo systemctl daemon-reload

Schakel de Etherpad dienst in.

$ sudo systemctl enable etherpad --now

Controleer de status van de dienst.

$ 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
.......

Stap 8 – Installeer SSL met Let’s Encrypt

Om een SSL certificaat te installeren met Let’s Encrypt, moeten we het Certbot gereedschap installeren.

Eerst moet je de EPEL repository downloaden en installeren.

$ sudo dnf install epel-release

Voer de volgende commando’s uit om Certbot te installeren.

$ sudo dnf install certbot

Genereer het SSL certificaat.

$ sudo certbot certonly --standalone --agree-tos --preferred-challenges http -m [email protected] -d example.com

Het bovenstaande commando downloadt een certificaat naar de /etc/letsencrypt/live/etherpad.example.com directory op je server.

Genereer een Diffie-Hellman groepscertificaat.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Maak een uitdaging webroot directory voor Let’s Encrypt auto-renewal.

$ sudo mkdir -p /var/lib/letsencrypt

Maak een Cron Job om de SSL te vernieuwen. Deze zal elke dag lopen om het certificaat te controleren en zo nodig te vernieuwen. Maak daarvoor eerst het bestand /etc/cron.daily/certbot-renew en open het om te bewerken.

$ sudo nano /etc/cron.daily/certbot-renew

Plak er de volgende code in.

#!/bin/sh
certbot renew --cert-name etherpad.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Sla het bestand op door op Ctrl + X te drukken en Y in te voeren als daarom gevraagd wordt.

Verander de permissies op het taakbestand om het uitvoerbaar te maken.

$ sudo chmod +x /etc/cron.daily/certbot-renew

Stap 9 – Installeer en configureer Nginx

Rocky Linux wordt geleverd met een oudere versie van Nginx. Om de nieuwste versie te installeren, moet je de Nginx repository toevoegen.

Maak het bestand /etc/yum.repos.d/nginx.repo aan en open het om te bewerken.

$ sudo nano /etc/yum.repos.d/nginx.repo

Plak er de volgende code in.

[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

Sla het bestand op door op Ctrl + X te drukken en Y in te voeren als daarom gevraagd wordt als je klaar bent.

Installeer Nginx.

$ sudo dnf install nginx

Schakel de Nginx dienst in.

$ sudo systemctl enable nginx

Maak vervolgens het /etc/nginx/conf.d/etherpad.conf aan en open het om te bewerken.

$ sudo nano /etc/nginx/conf.d/etherpad.conf

Plak er de volgende code in.

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;
}

Sla het bestand op door op Ctrl + X te drukken en Y in te voeren als daarom gevraagd wordt als je klaar bent.

Controleer de syntaxis van het Nginx configuratiebestand.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Als je de volgende foutmelding krijgt, moet je het bestand /etc/nginx/nginx.conf bewerken om de grootte van de variabele server_names_hash_bucket_size toe te voegen/aan te passen.

nginx: [emerg] could not build the server_names_hash, you should increase server_names_hash_bucket_size

Open het bestand /etc/nginx/nginx.conf om het te bewerken.

$ sudo nano /etc/nginx/nginx.conf

Voeg de volgende regel toe vóór de regel include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Sla het bestand op door op Ctrl + X te drukken en Y in te voeren als daarom gevraagd wordt. Valideer Nginx opnieuw.

Start tenslotte de Nginx dienst om de nieuwe configuratie in te schakelen.

$ sudo systemctl start nginx

Start de URL https://etherpad.example.com in je browser en Etherpad home wordt geopend. Je kunt het nu gebruiken om documenten te bewerken en medewerkers uit te nodigen.

Etherpad bijwerken

Etherpad bijwerken is eenvoudig. De eerste stap is over te schakelen naar de Etherpad gebruikers-shell.

$ sudo -u etherpad bash

Ga naar de /opt/etherpad/etherpad-lite map.

[[email protected] user] cd /opt/etherpad/etherpad-lite

Trek de nieuwste Etherpad repository naar de /opt/etherpad/etherpad-lite directory.

[[email protected] ~]$ git pull origin

Voer het Etherpad's run.sh script uit om de nieuwste versie van Etherpad in te stellen.

[[email protected] etherpad-lite]$ src/bin/run.sh

Conclusie

In deze handleiding hebben we Etherpad Collaborative Editor opgezet met Nginx server en beveiligd met Let's Encrypt SSL certificaten. Je Etherpad installatie is klaar voor gebruik, die je kunt uitbreiden met meer functies, waaronder geauthenticeerde gebruikers, plugins en aanpassingen aan de gebruikersinterface.

Als je vragen hebt, stel ze dan in de commentaar hieronder.