Mein neues Blog mit Nikola

Mein Blog ist nun endlich auf meinen eigenen Server umgezogen und wird jetzt von Nikola generiert. Nikola ist ein in Python geschriebener Static Site Generator von Roberto Alsina, Static heißt: kein PHP, keine Datenbank, kein krudes CMS, nur schlichtes HTML, CSS und Javascript, was natürlich einige Vorteile mit sich bringt:

  • geringe Ladezeiten der Seiten
  • mehr Sicherheit
  • Kompatibilität mit so ziemlich jedem Webhoster
  • Wartungsaufwand hält sich in Grenzen
  • Posts lassen sich in den gängigen Markup-Sprachen schreiben

Dann erzähl' ich mal wie der Umzug abgelaufen ist, wer zudem genauer wissen will wie Nikola bedient wird, kann das im Nikola Handbook nachlesen oder auch im IRC-Channel #nikola auf irc.freenode.net direkt mit den Entwicklern sprechen. Die Beschreibungen sollten unter Mac OSX und Linux funktionieren, wie es mit Windows aussieht, kann ich leider nicht beurteilen.

Installation

Nikola lässt sich relativ einfach via pip installieren, am Besten in ein virtual environment. Dazu wird das Python Package virtualenv benötigt.

pip install virtualenv

Jetzt einfach einen Ordner für das Blog anlegen

mkdir -p website/blog

und ein virtualenv direkt im Projektordner erstellen

cd website/blog
virtualenv --no-site-packages venv
. venv/bin/activate     # aktiviert das virtualenv

Nun kann Nikola (und für später, jinja2 und feedparser) installiert werden, ohne dass dessen Abhängigkeiten in der Python-Umgebung des Systems landen.

pip install nikola jinja2 feedparser

Blogger-Import

Damit sind die Voraussetzungen geschaffen, die bereits geschriebenen Zeilen von Blogspot zu importieren. Nikola bietet hierfür einen Blogger- bzw. Wordpress-Import. Zunächst benötigt man Posts und deren Metadaten von Google. Dafür meldet man sich mit seinem Account auf www.blogger.com an, wählt sein Blog aus, geht in dessen Einstellungen und klickt unter Sonstiges auf Blog exportieren.

Anschließend wird das Blog im zuvor erstellten Projektverzeichnis initialisiert, um die exportierten Blogspot-Daten importieren zu können.

nikola init .
nikola import_blogger -o . pfad/zum/blogspot_export.xml
mv conf.py.import_blogger-date conf.py

Die einzelnen Blogposts befinden sich jetzt im Ordner posts als html-Dateien. Leider ist bei meinem Import ein Post verschütt gegangen, also am besten noch mal kontrollieren, ob auch wirklich alles da ist.

Nun geht's an die Konfigurationsdatei conf.py. Für den Anfang reicht es aus, folgende Einträge zu editieren:

Auszug aus meiner conf.py:

# Data about this site
BLOG_AUTHOR = "Name"
BLOG_TITLE = "Keyboard Interrupt"
# This is the main URL for your site. It will be used
# in a prominent link
SITE_URL = "http://keyboard-interrupt.de"
# This is the URL where nikola's output will be deployed.
# If not set, defaults to SITE_URL
BASE_URL = "http://keyboard-interrupt.de/"
BLOG_EMAIL = "email@adresse.tld"
BLOG_DESCRIPTION = "Im Zweifel Control-C"

# What is the default language?
DEFAULT_LANG = "de"

Mit diesen Einstellungen ist es an der Zeit, sich das Blog zum ersten Mal anzusehen. Dafür wird kein eigenständiger Webserver benötigt, denn Nikola stellt selbst einen für die Entwicklung zur Verfügung, der unter http://localhost:8000 erreichbar ist.

nikola build  # generiert alle notwendigen Dateien in output/
nikola serve  # startet den Webserver

Sieht alles schön aus, könnten die Dateien aus dem output-Ordner einfach auf den Webspace kopiert werden und fertig ist die Laube.

Theme

Vielleicht hat man aber auch noch Lust auf ein anderes Theme. Unter http://themes.getnikola.com finden sich einige Themes, die in Nikola zur Verfügung stehen. Mit den folgenden Befehlen lassen sich die Themes auflisten, bzw. installieren (vorausgesetzt das requests Package ist installiert).

nikola install_theme --list     # listet Themes des Repositories
nikola install_theme theme-name # installiert das Theme

Zum Aktivieren trägt man das Theme in die conf.py ein.

# Name of the theme to use.
THEME = "controlc"

Anfangs wollte ich das Theme bootstrap3-jinja verwenden, musste aber leider feststellen, dass der Text der Sites auf mobilen Geräten links und rechts abgeschnitten wird. Somit habe ich das Theme dieser Seite selbst erstellt, bzw. von diesem Bootstrap-Template by Mark Otto abgeschaut und Teile des Nikola-Bootstrap-Themes verwendet. Dazu wirds ggf. einen eigenen Post geben. Infos zum Theming gibt's in diesem Tutorial oder dort: NIKOLA: THE STATIC BLOG ENGINE A.K.A. HOW I BUILD SHISAA.JP

Deployment

Hier fehlt mir leider noch ein geeigneter Workflow. Momentan baue ich das Blog, Lösche den Inhalt aus dem Document Root des Webservers und kopiere die neu erzeugten Dateien via scp aus dem output-Ordner auf den Server. Etwas umständlich wie ich finde, steht aber auf der TODO-Liste.

TODO

Das wären dann die Dinge, die noch zu erledigen sind:

  • Überarbeitung einiger HTML-Elemente
  • einfacheres Deployment des Blogs (wahrscheinlich via fabfile)
  • Einfügen des fehlenden Blogposts
  • Veröffentlichung der Dateien auf Github (da bin ich mir noch nicht sicher)
  • Ändern der E-Mail-Adresse des Blogs

Soweit so gut. Für Anregungen, Fragen oder sonstige Bemerkungen gibt's mich auf Google+ oder App.net (siehe rechts, bzw. ganz unten, je nach Gerät).