Il seguente articolo presuppone che tu abbia già familiarità con l'Etherpad. Se quello
non è il caso, allora l'articolo di wikipedia dovrebbe essere sufficiente per una rapida introduzione.
Anche se il progetto Etherpad è ben documentato, non è sempre facile
avere un senso dalla semplice documentazione. Questo articolo mira a condensare alcuni dei
tutorial disponibili sul wiki del progetto in modo facile da seguire.
Tratteremo quanto segue:
- Installazione di Etherpad come servizio
- Abilitazione di TLS con certificati autofirmati
- Utilizzo di
mysql
banca dati - Utilizzo di Nginx con Etherpad
Installazione di Etherpad
Al momento, Debian 11 non fornisce alcun etherpad
Pacchetti. Quindi, dovremo
installalo manualmente da GitHub. Per fortuna, i passaggi sono davvero semplici (il
#
denota radice):
- Crea un utente
etherpad
e assegnalo all'etherpad
gruppo:
# useradd --comment "Etherpad Service User"
--create-home --home-dir /usr/local/etherpad --user-group etherpad
- Scarica ed esegui lo script di installazione:
# curl -sL https://deb.nodesource.com/setup_14.x
|bash -
- Installa
nodejs
. Avremo anche bisogno digit
.
# apt install -y nodejs git
- Passa a
etherpad
utente e clonare il repository del progetto.
# su - etherpad
etherpad$ git clone --depth 1 --branch masterhttps://github.com/ether/etherpad-lite.git/usr/local/etherpad/src
- Installa le dipendenze richieste:
etherpad$ /usr/local/etherpad/src/bin/installDeps.sh
- Crea un file di unità systemd in
/etc/systemd/system/
directory.
/etc/systemd/system/etherpad.service
:
[Unit]
Description=Etherpad Service
After=syslog.target network.target
[Service]
Type=simple
User=etherpad
Group=etherpad
WorkingDirectory=/usr/local/etherpad/src
Environment=NODE_ENV=production
ExecStart=/usr/bin/node --experimental-worker /usr/local/etherpad/src/node_modules/ep_etherpad-lite/node/server.js
[Install]
WantedBy=multi-user.target
- Consenti firewall, ecc. per l'apertura della porta
9001
.Poi, finalmente possiamo iniziare
iletherpad
servizio:
# systemctl start etherpad

Abbiamo ancora molte configurazioni da fare. Tuttavia, ora possiamo visualizzare l'istanza etherpad sul nostro browser.

Abilitazione di TLS con certificati autofirmati
Se desideri che i tuoi certificati vengano firmati da un'autorità di certificazione (CA), puoi farlo. Tuttavia, qui sto solo autofirmando tutto. Mi riferisco all'articolo wiki che può essere trovato qui.
Apri settings.json
nel etherpad
directory e trova la sezione SSL
(dovrebbe essere intorno alla riga 174) e modificare di conseguenza:
"ssl" : {
"key" : "https://1118798822.rsc.cdn77.org/usr/local/etherpad/ssl/epl-server.key",
"cert" : "https://1118798822.rsc.cdn77.org/usr/local/etherpad/ssl/epl-server.crt"
}
Crea una directory /usr/local/etherpad/ssl
come etherpad
utente, cd
in quella directory ed eseguire i seguenti comandi.
Genera la chiave del server fornendo la passphrase richiesta:
openssl genrsa -des3 -out epl-server.key 4096
Ora genera i certificati:
openssl req -new -key epl-server.key -out epl-server.csr
openssl x509 -req -days 9000 -in epl-server.csr -signkey epl-server.key -out epl-server.crt

Ora useremo quel file per creare un'altra chiave. In questo modo non dovremo fornire una passphrase ogni volta che il nostro server si avvia.
Rinomina la chiave:
mv epl-server.key epl-server.key.secure
Quindi genera la nostra seconda chiave:
openssl rsa -in epl-server.key.secure -out epl-server.key
Ora dobbiamo autofirmare i nostri certificati. Per questo dobbiamo generare un'altra chiave che firmerà il nostro
epl-server.key
. I passaggi sono simili a quelli sopra.
openssl genrsa -des3 -out own-ca.key 4096
Crea un certificato di firma:
openssl req -new -x509 -days 9000 -key own-ca.key -out own-ca.crt
Questo ci chiederà alcune informazioni. Possono essere lasciati di default ma il Nome Comune (CN) deve essere diverso dal CN della nostra chiave. Quindi possiamo semplicemente aggiungere "(CA)" al CN.

Infine firmiamo il nostro epl-server.key
con il certificato della nostra CA.
openssl x509 -req -days 9000 -in epl-server.csr -CA own-ca.crt -CAkey own-ca.key -set_serial 001 -out epl-server.crt
Ciò risulterà in un epl-server.crt
autofirmato file.
Ora assicurati che i file dispongano di autorizzazioni sicure:
chmod 400 epl-server.key
chown etherpad epl-server.key
chmod 400 epl-server.crt
chown etherpad epl-server.crt

Altri file possono essere spostati in un luogo diverso o semplicemente eliminati. Li lascerò così com'è per ora. Tuttavia, possiamo riavviare l'etherpad
servizio ora e otterremo https
funzionante anche se i browser genereranno avvisi e si rifiuteranno persino di connettersi poiché i nostri certificati non sono stati forniti con le informazioni corrette.

Utilizzo di MySQL con Etherpad
Finora, la nostra istanza Etherpad ha utilizzato dirtyDB
database che non è adatto solo a scopi di test/sviluppo. Per rendere la nostra istanza completamente adatta alla produzione, ora passeremo a mysql
. Ancora una volta, tutti i crediti per le istruzioni di installazione vanno al wiki del progetto. Ho appena deciso – per riassumere tutto in un unico posto – di non farti saltare a link diversi.
Quindi, installiamo i pacchetti richiesti (sto usando mariadb
ma le cose sono sostanzialmente le stesse):
# apt install -y mariadb-server
Ora esegui mysql_secure_installation
come root fornendo i parametri richiesti.
Fatto ciò, possiamo procedere alla configurazione del database:
1. Connettiti a mysql con il seguente comando:
# mysql -u root -p
2. Una volta dentro, creare un database:
CREATE DATABASE `etherpad_lite_db`;
Sì, quelli sono backtick attorno al nome del db. E non dimenticare il punto e virgola 😉
3. Crea un utente del database fornendo il tuo nome utente e password:
CREATE USER '<username>'@'localhost' identified by '<pass>';
4. Modifica le autorizzazioni per il nuovo utente:
GRANT CREATE,ALTER,SELECT,INSERT,UPDATE,DELETE on `etherpad_lite_db`.* to 'etherpad'@'localhost';
Qui, etherpad
era l'utente che ho creato in precedenza.
Il nostro database è stato creato, quindi ora possiamo exit
dal prompt e procedi con l'etherpad
servizio conoscere i risultati che abbiamo ottenuto, ad esempio modificando il settings.json
file.
Cerca il dbtype
con il tuo editor di testo, dovrebbe essere intorno alla riga 196 e cambiarlo in modo che assomigli a qualcosa di simile al seguente:
"dbType": "mysql",
"dbSettings": {
"user" : "etherpad",
"port" : "https://1118798822.rsc.cdn77.org/var/run/mysqld/mysqld.sock",
"password": "<pass>",
"database": "etherpad_lite_db",
"charset" : "utf8mb4"
}
Ovviamente, non rivelerò la password qui. Sarebbe pericoloso dato che uso lo stesso per tutti i miei account (no, non proprio; non riutilizzare le password).
Ora possiamo riavviare i servizi:
# systemctl restart mysqld etherpad
Utilizzo di Nginx con Etherpad
Ora configuriamo nginx
per inoltrare il traffico http/s standard all'etherpad
servizio.
Assicuriamoci di avere nginx
installato:
# apt install nginx
Crea un file in /etc/nginx/sites-available/etherpad
e il suo contenuto sia:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name localhost; # CHANGE THIS!
access_log /var/log/nginx/eplite.access.log;
error_log /var/log/nginx/eplite.error.log;
ssl on;
ssl_certificate /etc/nginx/ssl/epl-server.crt;
ssl_certificate_key /etc/nginx/ssl/epl-server.key;
location / {
proxy_pass https://127.0.0.1:9001;
proxy_buffering off;
proxy_set_header Host $host;
proxy_pass_header Server;
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; # apparently 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;
}
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
# enforce HTTPS
server {
listen 80;
listen [::]:80;
server_name localhost; # CHANGE THIS!
return 301 https://127.0.0.1:9001/;
}
Ora esegui i seguenti comandi:
doas mkdir /etc/nginx/ssl
doas cp /usr/local/etherpad/ssl/epl-server.crt /etc/nginx/ssl/
doas cp /usr/local/etherpad/ssl/epl-server.key /etc/nginx/ssl/
Come puoi vedere, stiamo semplicemente copiando i certificati SSL e le chiavi su nginx.
Nginx viene fornito con un file di configurazione predefinito abilitato. Risolviamolo.
# rm /etc/nginx/sites-enabled/default
E abilitiamo il nostro etherpad
file di configurazione per nginx.
# ln -s /etc/nginx/sites-available/etherpad /etc/nginx/sites-enabled/etherpad
Assicurati di non aver commesso errori nella configurazione:
# nginx -t
Ora riavviamo i nostri servizi un'ultima volta:
# systemctl restart etherpad mysqld nginx
La nostra configurazione è praticamente finita. Certo, possiamo fare di più, ma penso che abbiamo fatto abbastanza (oltre a cambiare cose ovvie come il fatto che abbiamo impostato la nostra CA) per renderlo utilizzabile. Lascio al lettore un'esplorazione più approfondita
le varie risorse che ho collegato in tutto l'articolo. Per ora è tutto. Grazie per aver letto fino in fondo. Non dimenticare di controllare i miei altri articoli su unixcop.com.