Logo Etherpad

[Debian/Ubuntu] Installer Etherpad Lite

Etherpad Lite est un formidable outil collaboratif permettant de travailler à plusieurs sur un document texte, que vous connaissez peut-être déjà sous le nom de Framapad, qui est une installation d’Etherpad Lite gérée par l’association Framasoft. Dans la continuité de notre démarche d’auto-hébergement, nous avons voulu héberger une instance d’Etherpad Lite sur un de nos serveurs.

Il existe deux versions d’Etherpad : une « Lite » et une non-« Lite ». La version non-« Lite », plus ancienne, était écrite en Scala, et la version « Lite » est la réécriture d’Etherpad en JavaScript (avec Node.js), plus légère que la version originale. Nous allons donc dans ce tutoriel aborder l’installation de la version « Lite » d’Etherpad.

1. Installation de Node.js

Logo Node.js

Node.js est un environnement javascript plutôt bien adapté à des applications web. Etherpad Lite requiert une version particulière : la v0.11.16, que nous allons nous empresser (!) de compiler.

On va commencer à installer quelques dépendances qui nous serviront tout au long de ce tutoriel :

sudo apt-get install gzip git curl python libssl-dev pkg-config build-essential

Puis on va télécharger les sources :

cd /tmp
 wget http://nodejs.org/dist/v0.11.16/node-v0.11.16.tar.gz
 tar -xzvf node-v0.11.16.tar.gz
 cd node-v0.11.16

Et on va enfin compiler Node :

./configure
 make
 sudo make install

2. Installation de MySQL

Logo MySQL

 

On va aller plus loin dans la configuration de notre Etherpad Lite, et nous allons faire en sorte qu’il utilise une base de donnée MySQL pour stocker ses données.

On commence par installer leur serveur MySQL :

sudo apt-get install mysql-server

Lors de l’installation, vous allez devoir renseigner un mot de passe root pour votre base de donnée. Gardez-le précieusement de côté, on va en avoir besoin tout de suite pour se connecter à la base de donnée :

mysql -u root -p

Il faut taper son mot de passe pour arriver à un invite de commande MySQL. On va ensuite créer une base de donnée dédiée à Etherpad Lite, et attribuer les privilèges de cette base de donnée à notre utilisateur etherpad :

create database `etherpad-lite`;
 grant all privileges on `etherpad-lite`.* to 'etherpad'@'localhost' identified by '*MOT DE PASSE SQL ETHERPAD*';

Remplacez bien entendu *MOT DE PASSE SQL ETHERPAD* par un mot de passe de votre choix, si possible différent du mot de passe root pour des raisons de sécurité.

3. Installation d’Etherpad Lite

On va commencer par créer un utilisateur séparé pour Etherpad Lite. Vous noterez l’option « –disabled-login », qui permet de désactiver toute connexion directe à cette session pour des raisons de sécurités

sudo adduser --disabled-login --gecos 'Etherpad' etherpad

On va s’y connecter :

cd /home/etherpad
sudo su - etherpad -s /bin/bash

On télécharge les sources via Git :

git clone git://github.com/ether/etherpad-lite.git

On va ensuite changer quelques réglages :

cd etherpad-lite
cp settings.json.template settings.json
nano settings.json

Il faut changer l’IP de l’hôte :

"ip": "0.0.0.0",

par

"ip": "127.0.0.1",

Et aussi supprimer les paramètres de base de donnée actuels :

"dbType" : "dirty",
//the database specific settings
"dbSettings" : {
  "filename" : "var/dirty.db"
},

pour les remplacer par :

"dbType" : "mysql",
"dbSettings" : {
  "user" : "etherpad",
  "host" : "localhost",
  "password": "*VOTRE MOT DE PASSE MYSQL*",
  "database": "etherpad-lite"
},

4. Création des scripts de démarrage

Nous allons créer le script de démarrage qui vous permettera de lancer etherpad à l’allumage du serveur, mais aussi de l’arrêter et de le redémarrer facilement.

On fait un sudo nano /etc/init.d/etherpad, et on y insère le code suivant :

#!/bin/sh

### BEGIN INIT INFO
# Provides: etherpad-lite
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts etherpad lite
# Description: starts etherpad lite using start-stop-daemon
### END INIT INFO

PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/node/bin"
LOGFILE="/var/log/etherpad.log"
EPLITE_DIR="/home/etherpad/etherpad-lite"
EPLITE_BIN="bin/run.sh"
USER="etherpad"
GROUP="etherpad"
DESC="Etherpad"
NAME="etherpad"

set -e

. /lib/lsb/init-functions

start() {
 echo "Starting $DESC... "

 start-stop-daemon --start --chuid "$USER:$GROUP" --background --make-pidfile --pidfile /var/run/$NAME.pid --exec $EPLITE_DIR/$EPLITE_BIN -- $LOGFILE || true
 echo "done"
}

#We need this function to ensure the whole process tree will be killed
killtree() {
 local _pid=$1
 local _sig=${2-TERM}
 for _child in $(ps -o pid --no-headers --ppid ${_pid}); do
 killtree ${_child} ${_sig}
 done
 kill -${_sig} ${_pid}
}

stop() {
 echo "Stopping $DESC... "
 while test -d /proc/$(cat /var/run/$NAME.pid); do
 killtree $(cat /var/run/$NAME.pid) 15
 sleep 0.5
 done
 rm /var/run/$NAME.pid
 echo "done"
}

status() {
 status_of_proc -p /var/run/$NAME.pid "" "etherpad" && exit 0 || exit $?
}

case "$1" in
 start)
 start
 ;;
 stop)
 stop
 ;;
 restart)
 stop
 start
 ;;
 status)
 status
 ;;
 *)
 echo "Usage: $NAME {start|stop|restart|status}" >&2
 exit 1
 ;;
esac

exit 0

On met les bonnes permissions et on met le script en démarrage automatique :

chmod +x /etc/init.d/etherpad
update-rc.d etherpad defaults

5. Installation de Nginx, et configuration en reverse proxy

Logo nginx

J’utiliserai Nginx et non Apache dans ce tutoriel en raison de sa plus grande simplicité. Nginx va nous servir de reverse proxy, ce qui nous permettera d’associer plusieurs noms de domaines à notre adresse IP et d’avoir des logs d’accès.

On commence par installer le paquet de Nginx :

sudo apt-get install nginx

On crée un certificat SSL, pour permettre une utilisation de HTTPS :

sudo mkdir /etc/nginx/ssl
cd /etc/nginx/ssl
sudo openssl genrsa -des3 -out etherpad.key 2048
sudo openssl req -new -key etherpad.key -out etherpad.csr
sudo cp etherpad.key etherpad.key.org
sudo openssl rsa -in etherpad.key.org -out etherpad.key
sudo openssl x509 -req -days 365 -in etherpad.csr -signkey etherpad.key -out etherpad.crt

Et enfin on crée le fichier de description de l’hôte virtuelle pour Etherpad Lite, en faisant un sudo nano /etc/nginx/sites-enabled/etherpad, en y tapant les lignes de configurations suivantes :

server {
  listen 443 ssl;
  server_name *NOM DE DOMAINE*;

  access_log /var/log/nginx/etherpad.access.log;
  error_log /var/log/nginx/etherpad.error.log;

  ssl_certificate /etc/nginx/ssl/etherpad.crt;
  ssl_certificate_key /etc/nginx/ssl/etherpad.key;

  location / {
    proxy_pass http://localhost:9001/;
    proxy_set_header Host $host;
    proxy_buffering off;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
  }
}

server {
  listen 80;
  server_name *NOM DE DOMAINE*;

  access_log /var/log/nginx/etherpad.access.log;
  error_log /var/log/nginx/etherpad.error.log;

  location / {
    proxy_pass http://localhost:9001;
    proxy_set_header Host $host;
    proxy_buffering off;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
  }
}

map $http_upgrade $connection_upgrade {
  default upgrade;
  '' close;
}

N’oubliez pas d’inscrire au bon endroit le nom de domaine que vous souhaitez associer à votre installation d’Etherpad.

Et pour finir, nous pouvons recharger la configuration de Nginx :

sudo service nginx reload

Conclusion

L’installation d’Etherpad Lite est un processus long et un peu difficile pour un initié, mais permet une installation solide : notre installation est en route depuis plus de 2 mois, sans nécessiter beaucoup de maintenance.

En cas de soucis, le canal IRC #etherpad-lite-dev sur Freenode est disponible pour répondre à toutes vos questions.