[TUTO] Installation d’une solution de collaboration: Etherpad Lite

Publié le 09 mai 2012 par Timcruz

J’ai eu besoin récemment pour les associations pour lesquelles je suis un peu sysadmin, de mettre en place une solution de collaboration texte. Bien sur il existe les Google Docs et autres mais je voulais un outil simple et hebergé par mes serveurs. J’ai un peu cherché et je suis tombé sur Etherpad !

EtherPad est un éditeur de texte collaboratif en temps réel. Il permet par défaut à un maximum de seize personnes de partager un texte en cours d’élaboration. Les contributions de chacun apparaissent immédiatement sur l’écran de tous les participants et sont signalées par des couleurs différentes. Une fenêtre de messagerie instantanée est également disponible.

Le système ne requiert aucune installation, ni aucune inscription, il suffit d’avoir une connexion internet et un navigateur web. EtherPad est écrit en JavaScript.

Etherpad était un éditeur (de texte) en ligne permettant de travailler à plusieurs sur un document. Le code fut ouvert par Google quand ils en firent l’acquisition pour l’intégrer à Google Wave (il me semble, ou alors c’était dans Google Docs), dans la foulée une fondation fut créée pour continuer à le faire vivre, et des pads fleurirent un peu partout, malgré la gourmandise du logiciel (les mauvaises langues, dont je ne suis pas, attribueront cette lourdeur au fait que le logiciel ait été écrit en Scala, et donc dépende de Java). Mais il était hors de portée des serveurs dédiés virtuels (VPS) pas chers, et autres mini serveurs.

C’est là qu’entre en scène Etherpad Lite, nettement moins gourmand, il se base sur Node.js, a moins de dépendances ésotériques que son ancêtre, et d’après les développeurs, là où un Etherpad occupait 257 Mo de RAM juste après son démarrage, Etherpad Lite n’en occupe que 16 Mo. Il est disponible sous licence Apache 2.0. (source)

Etherpad vs Etherpad Lite

EtherpadEtherpad Lite

Size of the folder (without git history)30 MB1.5 MB

Languages used server sideJavascript (Rhino), Java, ScalaJavascript (node.js)

Lines of server side Javascript code~101k~9k

RAM Usage immediately after start257 MB (grows to ~1GB)16 MB (grows to ~30MB)

Plateforme Materielle :



Comme d’habitude, j’ai monté mon prototype sur ma plateforme de virtualisation:


Dedibox Pro HP

  • HP® Proliant DL120
  • CPU: 1x Intel® Xeon® E3-1220
  • RAM: 16 Go DDR3 ECC
  • HDD: 2 x 2 To SATA2 Raid 0 / Raid 1 HARD (P410)
  • LAN: 1 Gbit/sec

Plateforme logicielle hyperviseur:


  • Dom0 Opensuse 12.1 X86_64 Xen 4.1

Plateforme Virtuelle:


  • DomU Xen Ubuntu 10.04 X86_64 Paravirtualisé
  • 2 vcpus
  • 512 Mo de Ram
  • HDD 16GB

Installation:


Pour commencer j’ai mis à jour totalement mon DomU ubuntu 10.04; mon template avait quelques maj de retard

  • Mise à niveau du DomU
root@ubuntults:/# apt-get update; apt-get upgrade
root@ubuntults:/# apt-get install linux-headers-server linux-image-server linux-server
root@ubuntults:/# reboot
  • Installation des prérequis
root@antony-linux:/home/antony# apt-get install gzip git-core curl python libssl-dev pkg-config build-essential
  • Installation de node.js

On télécharge la dernière version de node.js et on la compile

root@antony-linux:/home/antony# wget http://nodejs.org/dist/v0.6.15/node-v0.6.15.tar.gz
root@antony-linux:/home/antony# tar xvfz node-v0.6.15.tar.gz
root@antony-linux:/home/antony/# cd node-v0.6.15
root@antony-linux:/home/antony/#./configure; make; make install
  • Installation de Etherpad lite

On utilse git pour récupérer la dernière version.

root@antony-linux:/home/antony# git clone 'git://github.com/Pita/etherpad-lite.git'

Initialized empty Git repository in /home/antony/etherpad-lite/.git/
remote: Counting objects: 8065, done.
remote: Compressing objects: 100% (2632/2632), done.
remote: Total 8065 (delta 5738), reused 7590 (delta 5318)
Receiving objects: 100% (8065/8065), 2.76 MiB | 626 KiB/s, done.
Resolving deltas: 100% (5738/5738), done.

Je déplace le tout ce /opt

root@antony-linux:/home/antony# mv etherpad-lite /opt/etherpad

On installe les dépendances

root@ubuntults:/opt/etherpad# /opt/etherpad/bin/installDeps.sh

A partir d’ici on peut déjà lancer Etherpad.

root@ubuntults:/opt/etherpad# /opt/etherpad/bin/run.sh
You shouldn't start Etherpad-Lite as root!
Please type 'Etherpad Lite rocks my socks' if you still want to start it as root
Etherpad Lite rocks my socks
Ensure that all dependencies are up to date...
Ensure jQuery is downloaded and up to date...
Ensure prefixfree is downloaded and up to date...
Clear minfified cache...
ensure custom css/js files are created...
start...
[2012-04-20 17:01:09.999] [INFO] console - Your Etherpad Lite git version is 309e3b0
[2012-04-20 17:01:10.002] [INFO] console - Report bugs at https://github.com/Pita/etherpad-lite/issues
[2012-04-20 17:01:10.124] [INFO] console - Server is listening at 0.0.0.0:9001
[2012-04-20 17:01:10.125] [INFO] console -   info  - 'socket.io started'

Accès à l’interface Web:


Si tout est bien installé démarré, on peut accéder à l’interface Web de Etherpard sur le port 9001



http://votre_ip:9001

Bon on à installer Etherpad Lite et on l’a lancé. C’est bien joli, mais déjà on le lance en root ce qui n’est pas jojo et on est obligé de lancer le script à la main. C’est pas très optimisé…

Optimisations :


Afin de pouvoir bénéficier des fonctions d’import il faut installer abiword

root@ubuntults:~# apt-get install abiword

Il faut modifier le settings.json dans le dossier etherpad pour que ce soit pris en compte

root@ubuntults:~# vi /opt/etherpad/settings.json
///////
   Abiword is needed to enable the import/export of pads*/
  "abiword" : "/usr/bin/abiword",
//////

Afin que se soit utilisable, nous allons créer un script qui permettra de lancer Etherpad en daemon et surtout pas en root.

On crée un user Etherpad et on donne les droits adéquats.

root@ubuntults:~# useradd etherpad
root@ubuntults:~# chown -R etherpad /opt/etherpad

On crée maintenant un script d’init afin de pouvoir lancer Etherpad en tant que daemon. Ce script nous permet de lancer Etherpad en tant que Etherpad et aussi de pouvoir la lancer au démarrage.

#!/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="/opt/etherpad"
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 le rend executable.

root@ubuntults:/var/log# chmod +x /etc/init.d/etherpad

On active le script au démmarage:

root@ubuntults:/var/log# update-rc.d etherpad defaults
 Adding system startup for /etc/init.d/etherpad ...
   /etc/rc0.d/K20etherpad -> ../init.d/etherpad
   /etc/rc1.d/K20etherpad -> ../init.d/etherpad
   /etc/rc6.d/K20etherpad -> ../init.d/etherpad
   /etc/rc2.d/S20etherpad -> ../init.d/etherpad
   /etc/rc3.d/S20etherpad -> ../init.d/etherpad
   /etc/rc4.d/S20etherpad -> ../init.d/etherpad
   /etc/rc5.d/S20etherpad -> ../init.d/etherpad
root@ubuntults:/var/log# /etc/init.d/etherpad start

Notre etherpad est bien lancé

root@ubuntults:/var/log# ps aux | grep etherpad
etherpad 15021  0.0  0.0   4096   628 ?   S   21:39   0:00 /bin/sh /opt/etherpad/bin/run.sh /var/log/etherpad.log
etherpad 15049  1.5  1.2 717752 25192 ?   Sl   21:39   0:09 node server.js /var/log/etherpad.log

L’interface:



La fonction Chat

Les options

La fonction d’import

La fonction partage avec QRcode !
La fonction replay

Etherpad est un outil simple installer, léger,  et agréable à utiliser. Bien sur il n’a pas toutes les fonctionnalités de Google Docs ou autres, mais il suffit bien pour la majorité des usages. Surtout le plus important c’est qu’il est installé sur vos serveurs.

Cet article a été publié par bartounet sur le blog info16. Si vous désirez comme bartounet publier en guest-blogging sur Geek de France, vous pouvez me contacter.