Docpad & Dropbox

Docpad: Artikel mit Dropbox veröffentlichen

Vorwort

Durch mein neuerliches Interesse an Node.js wollte ich auch meinen Blog bzw. meine Landing Page mittels eines Static Site Generators betreiben, der auf Node Basis läuft.
Auf meiner Suche nach einem passenden System bin ich ziemlich schnell auf Docpad gestoßen. Docpad selbst beschreibt sich folgendermaßen:

DocPad is a next generation web framework; allowing for content management via the file system, rendering via plugins, and static site generation for deployment anywhere. It’s built with Node and Express.js, making it naturally fast and easily extendable.

Für mich waren vor allem die Markdown Unterstützung, das integrierte Scaffolding mittels Bootstrap und Jade wichtig.
Da ich es noch von meinem alten Blog auf Second Crack Basis kannte wollte ich auch die Möglichkeit haben, Blogposts mit Dropbox zu veröffentlichen. Da ich keine vernünftige Anleitung im Netz gefunden habe, wie man so etwas mit Docpad umsetzt, habe ich mich kurzer Hand selbst ans Werk gemacht.

Da ich auf meinem Server Ubuntu laufen habe, werden sich alle nachfolgenden Schritte auf diese Distribution beziehen.

1. Docpad einrichten

Als erstes installieren wir Node.js, und zwar die aktuelle Version und nicht die veraltete aus den Repositories:

wget <a href="http://nodejs.org/dist/v0.8.22/node-v0.8.22.tar.gz">http://nodejs.org/dist/v0.8.22/node-v0.8.22.tar.gz</a>  
tar -xzf node-v0.8.22.tar.gz  
cd node-v0.8.22  
./configure
make  
sudo make install  

Dann überprüfen wir, ob npm auch auf dem neuesten Stand ist und installieren Docpad damit.

npm install -g npm  
npm install -g docpad@6.33  

2. Dropbox installieren

Jetzt geht es an die Dropbox. Ich habe mir dafür einen extra Account angelegt, da ich keine Lust hatte meine komplette Dropbox auf den Server zu spiegeln.

Um den Linux Client zu installieren braucht man nur nach der Anleitung von Dropbox zu gehen.

CLI-Script und Autostart richtet man dann so ein:

cd ~ &amp;&amp; wget -O - "https://www.dropbox.com/download?dl=packages/dropbox.py"  
chmod +x dropbox.py  
./dropbox.py autostart y
./dropbox.py start

Nach der Einrichtung habe ich einen Ordner names “Blog” in der Dropbox angelegt und diesen meinem Haupt-Account freigegeben. Somit habe ich auf dem Server nur den Blog Ordner liegen und kann trotzdem von meinen Devices aus über den Haupt-Account darauf zugreifen.

3. Blog erstellen

Auf dem Server begeben wir uns in den gerade angelegten Blog Ordner, legen ein paar Unterordner an und erstellen ein neues Docpad, in etwa so:

cd ~/Dropbox/Blog/  
mkdir drafts  
mkdir scripts  
mkdir site  
cd site  
docpad run  

Nachdem ihr alle Fragen nach dem letzten Schritt beantwortet habt sollte sich das Grundgerüst eurer neuen Seite in ~/Dropbox/Blog/site befinden.
Bevor es weiter geht überprüfen wir, ob auch alles funktioniert hat. Wenn sich nach einem

docpad generate --env static  

brauchbare Dateien im Ordner ~/Dropbox/Blog/site/out befinden kann es weiter gehen.

4. Dropbox und Docpad verheiraten

Nun zum eigentlichen Ziel: eine Seite die sich aktualisiert, sobald sich etwas an den zugrundeliegenden Markdown Dateien ändert. Damit das funktionert legen wir uns ertmal ein passendes Shellscript an

cd ~/Dropbox/Blog/scripts  
nano publish.sh  

und befüllen es mit folgendem Inhalt (muss natürlich an die genaue Konfiguration angepasst werden)

!/bin/bash

cd /home/<user>/Dropbox/Blog/site  
rm /home/<user>/Dropbox/Blog/site/src/documents/posts/*  
cp /home/<user>/Dropbox/Blog/publish/*.md /home/<user>/Dropbox/Blog/site/src/documents/posts/  
chmod 0755 /home/<user>/Dropbox/Blog/site/out  
echo generating site  
docpad generate &ndash;env static  
echo setting rights  
cd /home/<user>/Dropbox/Blog/site/out  
chmod 0755 $(find . -type d)  
echo all done  

Nach dem Speichern noch die passenden Rechte verpassen und ausprobieren

chmod +x publish.sh  
./publish.sh

Damit werden alle Dateien unter ~/Dropbox/Blog/publish in das passende Verzeichnis geschoben und die Seite neu gebaut.

Nun benutzen wir incron, damit das alles auch schön automatisch passiert.

sudo apt-get update  
sudo apt-get install incron  
sudo service incron start  
incrontab -e  

Was ihr nun seht ist die incrontab welche ähnlich wie die crontab zu verstehen ist, nur das die Tasks hier nicht zu einer bestimmten Zeit ausgeführt werden, sondern sobald Ereignisse im Filesystem auftreten.

Die Einträge haben das Format

<path> <mask> <command>  

<path> gibt dabei den zu überwachenden Pfad und <command> das Kommando an, welches ausgeführt wird sobald das bei <mask> festgelegte Ereignis eintritt. Damit auf Änderungen reagiert wird, tragen wir folgendes ein:

/home/<user>/Dropbox/Blog/publish/ IN_MODIFY,IN_DELETE,IN_CLOSE_WRITE,IN_MOVE /home/<user>/Dropbox/Blog/scripts/publish.sh

Damit sollte bei jeder Änderung im publish Verzeichnis die Seite neu generiert werden und unsere Arbeit getan sein.

Was natürlich noch fehlt, ist das Anpassen der Konfiguration des Webservers. Da ich stark davon ausgehe, dass das jeder hin bekommt (es gibt unzählige Tutorials zu dem Thema) werde ich das hier nicht im einzelnen erklären. Ihr müsst auch eigentlich nur das Verzeichnis ~/Dropbox/Blog/site/out per Webserver bereitstellen.

Ich habe jetzt noch meinen publish Ordner mit Git versioniert (zu finden bei meinen public repositories) aber das ist natürlich keine Pflicht.