Etherpad Lite – ein kollaborativer Editor

https://www.flickr.com/photos/jenlen/4087508548/ CC BY-NC-ND 2.0

https://www.flickr.com/photos/jenlen/4087508548/ CC BY-NC-ND 2.0

Haben Sie schon mal gemeinsam an einem Dokument gearbeitet?

Der „klassische“ Workflow ist dabei oft folgender: Jemand erstellt eine Datei, beispielsweise ein Microsoft Word oder OpenOffice/LibreOffice Dokument. Diese Datei wird dann per E-Mail verschickt oder in einem gemeinsamen Ordner (auf den alle Mitarbeiter zugreifen können) gespeichert. Innerhalb der lokalen Textverarbeitungen (MS Word) gibt es einen Überarbeitungsmodus der die Änderungen in der Datei dokumentiert. Das funktioniert prinzipiell, wird aber komplizierter, wenn die Kollegen nicht alle in einem Gebäude sitzen, bzw. am Abteilungsnetz angeschlossen sind. Auswärtige Kollegen könnten per VPN von einem anderen Standort angebunden werden aber die Zugriffsregelung kann schnell komplex werden.

Benutzerfreundlicher ist eine browserbasierte Dokumentenverwaltung, die die Zugriffsrechte über Benutzerkonten steuert und/oder eine Speicherung der MS Word/OpenOffice/LibreOffice Dateien in einer Cloud oder eine Kombination aus beidem (siehe auch OwnCloud – Installation und Clients).

Für browserbasierte Echtzeit Dokumentenbearbeitung ist Google Docs wohl der bekannteste Service. Die Textverarbeitungskomponente basiert auf Writely.com, das 2006 von Google gekauft wurde. Ausserdem kaufte Google im Jahr 2009 die Firma AppJet, den Betreiber des Dienstes EtherPad.com. Beide Dienste wurden kurz nach dem Kauf eingestellt. Der Quellcode von Etherpad wurde jedoch nach Protesten aus der OpenSource Gemeinde nach dem Kauf von Google unter die Apache Lizenz gestellt und veröffentlicht. Ebenfalls im Jahr 2009 startete Microsoft Online-Office, 2011 gefolgt von Microsoft Office 365. In den letzten Jahren sind dutzende Anbieter solcher Services hinzugekommen. Im Falle EtherPad arbeiteten die Entwickler nach der Übernahme an Googles neuem Kommunikationsdienst Wave. Das Wave Projekt wurde allerdings im Jahr 2012 wieder eingestellt.

Bei Services dieser Art werden die Dokumente auf den Servern von Google, Microsoft und anderen Anbietern zentral auf deren Servern gespeichert. Die Unternehmen sind daher im Besitz aller Inhalte, aller Dokumente, aller Änderungen, aller Mitarbeiterinformationen und jeder Zugriffszeit, bis zum einzelnen Tastendruck.

Im Normalfall haben die Betreiber sicher kein Interesse an diesen Informationen, aber sie sollten sich den letzten Satz nochmal langsam durchlesen und überlegen, was das für ein privatwirtschaftliches Unternehmen bedeuten kann.

Wollen Sie wirklich Schriftverkehr unter diesen Umständen auf Festplatten Dritter speichern? Auf den ersten Blick sicherlich nicht, weil Sie nicht kontrollieren können, wer die Dokumente liest. Auf den zweiten Blick sind dieses Services allerdings verführerisch komfortabel und so kommt es, wie so oft, auf den Einzelfall an.

Wenn Ihr Bedarf beim gemeinsamen Schreiben in Echtzeit liegt und Sie einen selbstgehosteten Dienst wie Google Docs suchen, dann sind Sie mit Etherpad gut bedient.

Auf einem Etherpadserver kann ohne Zugangsbeschränkung von jedem Nutzer ein neues Textdokument erstellt werden. Das Dokument erhält einen Kryptolink (URL und eine zufällige Zeichenfolge). Jeder, den den Link hat, kann das Dokument einsehen, editieren und über den dazu gehörigen Chat kommunizieren. Der Text wird in kurzen Zeitabständen serverseitig abgespeichert, darüber hinaus kann jeder Autor jederzeit einen bestimmten Bearbeitungsstand speichern. Über eine Zeitleiste kann jeder Bearbeitungsstand für jeden Zeitpunkt verzögerungsfrei angesehen werden!

Das Dokument kann jederzeit in vielen Formaten Formaten exportiert und auf dem eigenen Rechner gespeichert werden.

EtherPad Lite ist in JavaScript implementiert.

Es auch gibt öffentliche Etherpadserver, auf denen man das Prinzip ausprobieren kann, beispielsweise den Etherpadserver der Wikimedia Foundation https://etherpad.wikimedia.org oder den, den ich hier gerade einrichte (http://pad.serverblogger.ch)

Installation von Etherpad Lite unter Ubuntu 14.04.

Etherpad Lite benötigt als Basis node.js, dessen Installation ich bereits in den Artikeln Ein Blog mit Ghost und Node.js und Konzentrieren Sie sich auf das Wesentliche – Hoodie beschrieben haben. Ausser node.js werden die folgenden Pakete benötigt.

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

Der Etherpadserver sollte unter einem eigenen User eingerichtet werden. Legen Sie den User etherpad an und unterbinden Sie ein Login von aussen.

adduser etherpad --disabled-login --disabled-password

Loggen Sie sich als etherpad user ein und laden das Etherpad Paket in ihr home Verzeichnis (/home/etherpad)

sudo -u etherpad -i
git clone git://github.com/ether/etherpad-lite.git

Konfiguration

Wechseln Sie in das Verzeichnis etherpad-lite und erstellen sich eine Konfigurationsdatei (settings.json).

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

Rufen Sie settings.json in einem Editor auf.

Die Konfigurationsdatei ist sehr gut dokumentiert. Probieren Sie die entsprechenden Einstellungen einfach aus. Die zunächst einzigen wichtigen Einstellungen sind die IP-Adresse Ihres Servers und ein geheimer Sessionstring. Dieser Sessionstring ermöglicht es Ihren Benutzern nach einem Neustart des Servers an der gleichen Stelle weiter zu arbeiten.

//IP and port which etherpad should bind at
  "ip": "46.232.178.78",
  "port" : 9001,

// Session Key, used for reconnecting user sessions
  // Set this to a secure string at least 10 characters long.  Do not share this value.
  "sessionKey" : "geheimerstring",

Für einen ersten Test können Sie nun den Etherpad Server mit dem Befehl bin/run.sh im etherpad-lite Verzeichnis starten.

etherpad@server1:~/etherpad-lite$ bin/run.sh

mit CTRL-C können Sie die Ausführung beenden.

In Ihrem Browser können Sie jetzt gemeinsam mit anderen Autoren Texte editieren. Rufen Sie den Server zunächst mit Ihrer IP-Adresse mit Portnummer auf. In meinem Fall http://46.232.178.78:9002.
Ein Pad ist ein Dokument. Geben Sie den Namen für Ihr Dokument ein und klicken auf OK.

Startseite
Startseite
Der Etherpadserver erstellt ein neues Dokument/Pad und schreibt den von Ihnen in der settings.json Datei konfigurierten Text als Standard hinein. Sie können nun den Text bearbeiten.
Standardtext im Editorfenster
Standardtext im Editorfenster
Durch einen Klick auf das Sternchen können Sie eine Version explizit speichern. Die Versions-Zeitliste erhalten Sie durch einen Klick auf das Uhrensymbol. Sie erhalten eine neue Sicht und können die Versionen Ihres Dokuments durchblättern oder automatisiert abspielen lassen.
Versionen
Versionen
Durch einen Klick auf das Zahnrad erhalten Sie die individuellen Pad Einstellungen. Hier können Sie beispielsweise festlegen, dass die Chatleiste immer angezeigt wird und dass die Sprache Deutsch ist.
Einstellungen
Einstellungen
Durch einen Klick auf das </> Symbol sehen sie den Dialog zum Teilen des Pads
Pad teilen
Pad teilen
Hier sehen Sie das in einem iframe eingebettete „Orignaldokument“.

Datenbank

Standardmässig benutzt Etherpad die Datenbank dirty.db. Wie der Name schon vermuten lässt, ist diese Datenbank nicht wirklich für einen produktiven Betrieb geeignet 🙂 Für einen produktiven Betrieb sollten Sie sich eine MySQL Datenbank und einen User Account erstellen und hier in der Konfigurationsdatei eintragen.

mysqladmin -u root -p create etherpad
mysql -u root -p
mysql> GRANT ALL PRIVILEGES ON etherpad.* TO etherpad@localhost IDENTIFIED BY '******';
mysql> flush privileges;
mysql> exit

Vergessen Sie nicht, die dirty.db auszukommentieren.

//The Type of the database. You can choose between dirty, postgres, sqlite and mys$
//You shouldn't use "dirty" for for anything else than testing or development
//"dbType" : "dirty",
//the database specific settings
/*"dbSettings" : {
  "filename" : "var/dirty.db"
                 },*/

//An Example of MySQL Configuration
   "dbType" : "mysql",
   "dbSettings" : {
                    "user"    : "etherpad",
                    "host"    : "localhost",
                    "password": "******",
                    "database": "etherpad"
                  },

Service

Um das Starten zu vereinfachen wäre es schön einen Service zu haben mit dem der Ethernetserver gestartet und gestoppt werden kann. Erstellen Sie sich einen!

sudo mkdir /var/log/etherpad-lite
sudo chown etherpad /var/log/etherpad-lite
sudo chown -R etherpad /var/log/etherpad-lite
sudo nano /etc/init.d/etherpad-lite

Das ist der Inhalt der Datei

#!/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-lite/etherpad-lite.log"
EPLITE_DIR="/home/etherpad/etherpad-lite"
EPLITE_BIN="bin/run.sh"
USER="etherpad"
GROUP="etherpad"
DESC="Etherpad Lite"
NAME="etherpad-lite"

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... "
  if test -f /var/run/$NAME.pid; then
    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
  fi
  echo "done"
}

status() {
  status_of_proc -p /var/run/$NAME.pid "" "etherpad-lite" && 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

Die Datei muss nun noch ausführbar sein.

chmod +x /etc/init.d/etherpad-lite

Und nun kann der Server gestartet und gestoppt werden.

Eine URL für den Etherpadserver

Jetzt ist alles schon recht rund, aber schön wäre natürlich noch eine eigene URL (http://pad.serverblogger.ch beispielsweise).

Ich benutzer hier die Apache2 Standard Virtualhost Konfigurationsdatei

sudo nano /etc/apache2/sites-available/000-default.conf

Fügen Sie diese Zeilen hinzu und kommentieren Sie das DocumentRoot aus

#DocumentRoot /var/www/html
ServerName pad.serverblogger.ch
ProxyPreserveHost On
ProxyRequests Off
ProxyVia Off
ProxyPass / http://46.232.178.78:9002/
ProxyPassReverse / http://46.232.178.78:9002/

Hinweis: Da ich auf einem Testserver arbeite, nutze ich den default Virtual Host für dieses Beispiel. Ich habe das schon einmal im Artikel Ein Blog mit Ghost und Node.js gemacht. Wenn Sie Etherpad und Ghost auf Ihrem Server haben wollen, müssen Sie einfach einen neuen vhost anlegen (Viele virtuelle Server auf einem Root-Server)

Laden Sie das Apache Proxy Modul

sudo a2enmod proxy_http
sudo a2enmod proxy

und starten den Apache2 Server neu

sudo service apache2 restart

Nun können Sie auf Ihrem (oder meinem) Server arbeiten -> http://pad.serverblogger.ch

Updates

Schauen Sie hin und wieder nach, ob es Updates gibt.

sudo -u etherpad -i
cd etherpad-lite
git pull origin
exit
service etherpad restart

tl;dr: Es muss nicht immer Google Docs sein. Mit Etherpad kann man wunderbar gemeinsame Dokumente entwickeln.

Autor: Hagen Graf

consultant, author, trainer, solution finder, web architect, developer, open source lover, visionary, orator, the good old webmaster. Able to simplify!

Kommentar verfassen