Kategorien
API Automatisierung Wunschthema

Bots in space! Heute schon getootet?

Manchmal muss man etwas tun, was man sonst nicht so oft tut. Ich meine so etwas wie Kekse backen oder ein alternatives Smartphone Betriebssystem ausprobieren. Beides macht Spass, die Kekse kann man nach dem Backen sogar aufessen. Wenn man gerade keinen Backofen oder kein alternatives Smartphone zur Hand hat, kann man auch immer gut mit API’s „spielen“. Einer der seit fünf Jahren am meisten aufgerufenen Artikel hier im Blog handelt von

Kategorien
Frameworks Webdesign Webserver

Node.js

Node.js gibt es seit mittlerweile 8 Jahren. Das .js steht für JavaScript und diese Sprache wird immer beliebter. Mit Node.js können Entwickler JavaScript auf dem Client und auf dem Server verwenden. Es läuft unter Windows, macOS, Linux und gilt heute als ausgereifte Technologie.

In diesem Blogeintrag wollen wir ein paar erste Schritte wagen.

Installation

Zur Installation musst du dir das gewünschte Paket aus dem Download Bereich des Node.js Projekts laden und installieren. Die neuesten Features finden sich in der Version 8.x..  Unter macOS gibt es die Möglichkeit, Node.js über Homebrew zu installieren.

$ brew install node

Nach der Installation kannst du im Terminal Fenster mit dem Befehl node –version überprüfen, ob alles korrekt installiert wurde. Wenn dir die Versionsnummer angezeigt wird, war die Installation erfolgreich.

$ node --version
v8.1.2

Node Konsole

Mit dem Befehl node startest du die Node.js Konsole. Mit dem Befehl console.log(‚Hallo Welt!‘); können wir auch gleich ein „Hallo Welt“ ausprobieren.

$ node
> console.log('Hallo Welt!');
Hallo Welt!
undefined
>

Mit dem Befehl .exit verlässt du die Konsole wieder.

Node Server Prozess

Mit Node.js lassen sich Server Prozesse starten. Hier ein Beispiel für einen einfachen Webserver:

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hallo Welt!\n');
}).listen(8124, '127.0.0.1');
console.log('Server running at http://127.0.0.1:8124');

Wie beim ersten vorherigen Programm gibt es auch hier einen console.log() Befehl, der die Nachricht ausgibt. Darüber wird allerdings mit dem Befehl http.createServer()… ein Webserver erzeugt und mit … listen() zum „lauschen“ auf der IP Adresse 127.0.0.1, Port 8124 gebracht. Deswegen endet dieses Programm auch nicht einfach nach dem Aufruf, sondern läuft solange, bis du es wieder abbrichst.
Schreibe die Befehle in eine Datei (server.js) und rufe sie mit dem Befehl node server.js auf.

$ node server.js
Server running at http://127.0.0.1:8124

Du hast jetzt einen lokalen Webserver auf Port 8184 laufen. Wenn du im Browser den URL aufrufst, siehst du die „Hallo Welt!“ Ausgabe.

Hallo Welt
Hallo Welt

Dieser Server läuft, solange du das Terminalfenster nicht schließt. Mit CTRL-C kannst du den Server Prozess stoppen.

Paket Manager NPM

Node.js bringt einen Paketmanager mit (NPM) um die vorhandenen Module wie http zu ergänzen. Mittlerweile gibt es mehrere hunderttausend Module! NPM vereinfacht den Download und die Nutzung von Zusatzmodulen. Module werden im aktuellen Verzeichnis in /node_modules gespeichert (npm install [Modulname]). Sie können auch mit dem -g Flag global installiert werden. Bei einer globalen Installation landen sie im globalen /node_modules Verzeichnis und können aus jedem anderen Verzeichnis ebenfalls aufgerufen werden.

Wenn ich beispielsweise

$ sudo npm install -g hexy

aufrufe

$ sudo npm install -g hexy
/usr/local/bin/hexy -> /usr/local/lib/node_modules/hexy/bin/hexy_cmd.js
+ hexy@0.2.9
added 1 package in 0.732s

wird der Hex-Dumper hexy installiert.

Das Kommando

$ hexy --width 12 server.js

zeigt mir dann die Datei server.js im Hexadezimalformat

00000000: 7661 7220 6874 7470 203d 2072 var.http.=.r
0000000c: 6571 7569 7265 2827 6874 7470 equire('http
00000018: 2729 3b0a 6874 7470 2e63 7265 ');.http.cre
00000024: 6174 6553 6572 7665 7228 6675 ateServer(fu
00000030: 6e63 7469 6f6e 2028 7265 712c nction.(req,
0000003c: 2072 6573 2920 7b0a 2020 7265 .res).{...re
00000048: 732e 7772 6974 6548 6561 6428 s.writeHead(
00000054: 3230 302c 207b 2743 6f6e 7465 200,.{'Conte
00000060: 6e74 2d54 7970 6527 3a20 2774 nt-Type':.'t
0000006c: 6578 742f 706c 6169 6e27 7d29 ext/plain'}

Mit dem Befehl

$ sudo npm uninstall -g hexy

lässt sich das Modul wieder entfernen.

Zugriff auf das Dateisystem

Mit Node.js lässt sich problemlos auf das Dateisystem zugreifen. Der folgende Code (ls.js) zeigt die Dateien im aktuellen Verzeichnis an:

var fs = require('fs');
var dir = '.';
if (process.argv[2]) dir = process.argv[2];
var files = fs.readdirSync(dir);
for (fn in files) {
  console.log(files[fn]);
}
$ node ls.js
ls.js
server.js

Fazit

Der Einstieg in Node.js ist, wie bei PHP auch, sehr einfach. Die Möglichkeiten, die sich mit Node.js auftun sind endlos. In den Bereichen Web-APIs und Single-Page-Apps eignet sich Node.js hervorragend und es macht Spaß damit zu arbeiten.

Links


tl;dr: Node.js ermöglicht JavaScript Programmierung auf dem Client und auf dem Server.

Save

Kategorien
Streaming Server

Open Source Musikstreaming mit Koel

Ihre Famile würde auch gern Musik aus Ihrer MP3 Sammlung hören?

  • Auf dem Laptop kein Platz?
  • Auf dem Telefon nur 16 GB?
  • Aber auf Ihrer externen Festplatte mehr als 40GB Musik im MP3 Format?

Genau dieses Problem hatte Phan An, fand keine Lösung und startete das Projekt Koel, einen Streaming Server auf der Basis des PHP Frameworks Laravel und einem Client, basierend auf vue.js, der in jedem Browser läuft.

Laden Sie die 40 GB Musik einfach auf Ihren Server, installieren Sie Koel, richten Sie Benutzerkonten ein und alle können Musik hören!

Vorausetzungen

Auf dem Server müssen Laravel 5.1, MySQL oder MariaDB, PHP ab Version 5.6, sowie Node.js ab 0.10.40 installiert sein. Der Client läuft in jedem Browser.

Installation

Legen Sie sich zunächst eine MySQL Datenbank an

mysql -u root -p
Enter password:
mysql> CREATE DATABASE koel DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
mysql> CREATE USER 'koel'@'localhost' IDENTIFIED BY 'koel-passwort';
mysql> GRANT ALL PRIVILEGES ON koel.* TO 'koel'@'localhost' WITH GRANT OPTION;
mysql> exit;

Welchseln Sie in das Home Verzeichnis Ihres Users, in meinem Fall novatrend.

cd /home/novatrend

Laden Sie den Koel Quellcode von GitHub.

sudo git clone https://github.com/phanan/koel.git

Wechseln Sie in das koel Verzeichnis.

cd koel

und rufen Sie den Node Paketmanager npm auf.

npm install

Danach rufen Sie den PHP Paketmanager composer auf.

composer install

Anschliessend müssen Sie noch in die Konfiguurationsdatei .env die Datenbank Parameter, sowie E-Mail, Name und Passwort für den Administrator Account eintragen.

nano .env

Danach müssen Sie die Datenbank einmalig initialisieren.

php artisan init

Den Laravel Development Server starten Sie mit

php artisan serve --host=music.serverblogger.ch --port=8080

wobei die Werte für Host und die Portnummer natürlich von Ihrer individuellen Konfiguration abhängen.

Wenn Sie im Browser Ihren URL aufrufen, sehen Sie die Login Maske von Koel und können sich mit Ihren Admin Daten einloggen.

Koel - Login
Koel – Login

Nun müssen Sie noch Ihre MP3 Sammlung in ein Verzeichnis laden. Ich habe ein Verzeichnis music innerhalb des koel Verzeichnisses, aber ausserhalb des public Verzeichnisses angelegt (/home/novatrend/koel/music).

In den Settings von Koel müssen Sie diesen Pfad eintragen und auf den Button Scan klicken.

Koel - Musikverzeichnis
Koel – Musikverzeichnis

Das war es!

Nun können Sie im Bereich User Ihre Familie mit Benutzeraccounts versorgen.

Koel - Benutzer
Koel – Benutzer

Sie können Playlists erstellen und Herzchen vergeben. Auf dem Telefon läuft das Programm stabil und gut bedienbar, hier ein Beispiel unter iOS mit dem Safari Browser.

Koel - In Safari unter iOS
Koel – In Safari unter iOS

Na und nun kann die Party losgehen 🙂

Links:


tl;dr: Nutzen Sie Koel um Ihre MP3 Dateien von Ihrem Server zu streamen und zu hören!

Kategorien
Messenger Server Soziale Netze

pump.io – die Basis für dezentrale soziale Netzwerke?

Nach meinen bisherigen Erlebnissen mit den alternativen sozialen Netzwerken Friendica und GNU social zeigte sich schnell die Hauptproblematik. Es fehlt bis heute ein gemeinsamer Standard für die Speicherung und Verwaltung der eigenen Daten und Beziehungen zu anderen Benutzern. Alle proprietären sozialen Netzwerke wie Facebook, Twitter, und Google+ lösen das auf die klassische Art. Sie nutzen Ihren eigenen Standard und versuchen, Ihre Nutzerzahlen, auch durch Zukäufe von anderen Netzwerken, zu erhöhen. Das hilft diesen Unternehmen, nicht aber den beteiligten Menschen, wie Ihnen und mir, die die Hoheit über Ihre Daten und Berechtigungen haben wollen.

Pump.io geht genau dieses Problem an

I post something and my followers see it. That’s the rough idea behind the pump.

Pump.io besitzt eine API, nutzt activitystrea.ms und JSON ist das Hauptdaten- und Kommandoformat. Man kann also beispielsweise kurzen und langen Text, Lesezeichen, Bilder, Video, Audio, Events und ortsbasierte Checkins posten. Man kann anderen Nutzern folgen und Listen von Nutzern anlegen und darüber wieder deren Inhalt, abhängig von deren Berechtigungen sehen und/oder downloaden. Pump.io wird unter der Apache-2.0-Lizenz veröffentlicht, die jedem die Nutzung des Quellcodes erlaubt, aber fordert, dass Änderungen an der Software weitergegeben werden müssen. Anders als bei der GPL fordert die AGPL dies auch dann, wenn man die Software selbst nur nutzt und nicht weiterverbreitet. Code unter der Apache-2.0-Lizenz kann auch in proprietären Projekten verwendet werden.

Durch die offene Struktur kann man selbst einen pump.io Server betreiben oder sich auf einem vertrauenswürdigem externen Server registrieren. Um diese Struktur herum können dann Anwendungen entstehen, die auf Telefonen, im Web oder von Maschine zu Maschine laufen.

Ein Projekt, daß momentan pump.io einbaut ist MediaGoblin. MediaGoblin ist ein dezentrales Netzwerk für Medien, also die dezentrale Alternative zu Flickr, YouTube und SoundCloud.

Eine stabile Version, die Sie auch nutzen können, finden Sie beispielsweise hier (https://goblinrefuge.com/).

Die proprietären sozialen Netzwerke könnten also einfach pump.io als Basis nehmen, sich gegenüber Ihren Nutzer vertauenswürdig verhalten und die Welt wäre ok? Im Prinzip ja. Das ebenfalls proprietäre Netzwerk Identi.ca, ist genau diesen Weg gegangen (Umbau bei Identi.ca – Golem 4.5.2013). Dazu muß man allerdings auch wissen, daß der Gründer von Identi.ca und pump.io derselbe ist, nämlich Evan Prodromou. Evan ist seit 2013 in der W3C Federated Social Web Incubator Group engagiert und steckt auch im GNU social Projekt, das ebenfalls pump.io als Standard nutzt.

Hier eine Präsentation von ihm, die einen detaillierteren Überblick über pump.io gibt.

Um der Sache etwas mehr auf den Grund zu gehen, wollte ich pump.io einfach mal installieren und schauen was man damit tun kann. Nach der Installation war ich überrascht, einen vollständigen Twitterersatz gefunden haben.

Installation

Zur Installation habe ich die folgenden Anleitungen genutzt.

http://pump.io/
https://github.com/e14n/pump.io/wiki/Ubuntu-Installation#install-basic-build-essential-packages

pump.io ist momentan in der Version 0.3 verfügbar. Es arbeitet nicht wirklich gut mit dem Apache Proxy Modul zusammen und es wird empfohlen einen Root-Server exclusiv für pump.io zu nutzen. Mit dem Nginx Proxy harmoniert pump.io besser (http://sjoberg.fi/blog/pumpio.html). Da ich es für diesen Artikel nur ausprobieren wollte, gibt es dieses mal nur eine kurze Installationbeschreibung aber – eine Testversion auf http://pump.serverblogger.ch:31337.

Aber zurück zum Installieren.

Installationsvoraussetzung sind node.js 0.8.0 oder größer, npm 1.1.0 oder größer, eine Datenbank und das graphicsmagick Paket.

Ich habe ein Installationsscript genutzt, das wirklich gut funktioniert.

wget https://gist.githubusercontent.com/debanjum/3c3e92de34d290a8bc68/raw/f2d86de263980e744a7ac1079c2863f49fe1c9d6/Pump.sh
chmod +x Pump.sh        # Make script exectuable
sudo ./Pump.sh "local"  # For local testing
# OR #
sudo ./Pump.sh "server" # For server testing, with external ip and hostname

Danach habe ich in der /etc/pump.io.json Konfigurationsdatei noch die Werte für site, hostname, owner, ownerURL, address und serverUser angepasst.

{
    "driver":  "redis",
    "params":  {"host":"localhost","port":6379},
    "secret":  "my dog has fleas",
    "noweb":  false,
    "site":  "Serverblogger",
    "owner":  "NOVATREND Serverblogger",
    "ownerURL":  "http://blog.novatrend.ch/",
    "port":  31337,
    "hostname":  "pump.serverblogger.ch",
    "address":  "pump.serverblogger.ch",
    "nologger":  false,
    "serverUser":  "novatrend",
    "uploaddir": "/srv/pump.io/uploads",
    "debugClient": false,
    "firehose": "ofirehose.example"
}

In Screen läst es sich so starten

screen -S pumpserver -L -dm bash -c "cd /srv/pump.io; npm start"

Danach lief der Server … schauen Sie mal vorbei http://pump.serverblogger.ch:31337. Sie und ich können sich User anlegen, Bilder hochladen, Nutzern folgen und den Account auf anderen pump.io Plattformen nutzen. Denken Sie aber daran, dass es nur eine Testinstallation ist und wieder von unserem Server verschwinden wird.



Links


tl;dr: Pump.io stellt eine API aller notwendigen Funktionen für soziale Software unter einer auf kommerziell nutzbaren Lizenz zur Verfügung.

Kategorien
Editoren Server

Etherpad Lite – ein kollaborativer Editor

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.