Wordpress, adé!
Nach dem vor kurzem schon wieder eine Wordpress-Sicherheitslücke ausgenutzt wurde habe ich angefangen mich mal nach Alternativen umzusehen. Ich hatte einfach keine Lust mehr auf PHP und den ganzen Update-Wahnsinn den Wordpress ebenso mit sich bringt. Seit dem ich auch nicht mehr als Webentwickler nebenbei arbeite, hat sich das auch mit dem Interesse an Wordpress stark zurückentwickelt.
Die Wahl des neuen Blog-Systems ist bei mir auf Jekyll gefallen. Ich mag Markdown, ich mag Git und es ist kein PHP mehr dabei. Passte also. Jekyll ist ein Static-Site Generator: Ich schreibe mein Posts in Markdown, führe dann jekyll build
aus und heraus fallen einige HTML-Dateien. Ja, genau, wie früher. Ohne dynamischen Kram und ohne Caching. Einfach statische HTML-Dateien.
Das hat natürlich nicht nur Vorteile. So gibt es zum Beispiel keine Suche mehr. Die versuche ich noch nachzubauen, aber die Lösungen die ich bisher gefunden habe, fand ich noch nicht besonders zufriedenstellend. Außerdem gibt es keine Kommentare mehr. Ob das jetzt ein Vor- oder Nachteil ist kommt ganz drauf an: In diesem Blog spielt es keine Rolle denn es wurde kaum Kommentiert und ich muss mich nicht mehr um den ganzen Spam kümmern. Wer sich trotzdem bei mir melden will, darf mir gern eine Email schreiben oder mich antwittern.
Mit Jekyll gibt es keinen Admin-Bereich wie mit Wordpress in dem neue Artikel geschrieben werden, sondern ich habe ein Git-Repository auf meinem Rechner in dem ich für jeden neuen Post eine Markdown-Datei anlege. Die committe ich dann. Damit ich jetzt nicht alles alleine machen muss hilft mir Gitlab mit Gitlab-CI. Immer wenn ich in den Branch production
pushe wird automatisch die Seite neu gebaut und in den Webroot kopiert. Wenn alles glatt gelaufen ist bekomme ich eine E-Mail und alles ist live. Ganz einfach.
Dafür habe ich mir einfach eine kleine .gitlab-ci.yml
gebaut:
before_script:
- bundle install
stages:
- test
- deploy
test:
stage: test
script:
- bundle exec jekyll doctor
deploy_staging:
stage: deploy
variables:
STAGING_PATH: /path/to/staging/web/root/
script:
- bundle exec jekyll build -d $STAGING_PATH
environment:
name: staging
url: https://staging.tld
only:
- staging
deploy_production:
stage: deploy
variables:
PRODUCTION_PATH: /path/to/production/web/root/
script:
- JEKYLL_ENV=production bundle exec jekyll build -d $PRODUCTION_PATH
environment:
name: production
url: https://blog.kanedo.net
only:
- production
Durch die Umstellung liegen allerdings auch alle alten Posts jetzt an einem anderen Ort. Meine vorige URL-Struktur war /:post_id,:title.html
und ist jetzt /:year/:month/:day/:title.html
. Die Posts habe ich übrigens mit dem jekyll-import
Plugin direkt aus der Datenbank geholt. Das habe ich allerdings noch angepasst, damit es mit meinen Wordpress-Anpassungen umgehen kann. Die werde ich vielleicht auch noch in einem separaten Post veröffentlichen. Dabei legt der jekyll-import
jeweils ein wordpress_id
Feld an. Das benutze ich in einer .htaccess
Datei für die Weiterleitungen (der Dateiname selbst htaccess
ohne .
):
---
permalink: .htaccess
---
RewriteEngine On
RewriteBase /
Redirect 301 /feed /feed.xml
# Wordpress Redirects{% for post in site.posts reversed %}
{% if post.wordpress_id != "" and post.wordpress_id != nil %}
RewriteRule ^{{ post.wordpress_id }},(.*)\.html https://%{HTTP_HOST}{{ post.url}} [R=301,L]
{% endif %}
{% endfor %}
# End Wordpress Redirects
Einziges Problem: jedes Statement erzeugt eine Zeile in der htaccess-Datei: Etwas unschön aber jekyll
unterstützt den {%- -%}
-Syntax (noch?) nicht.
Mobiles Bloggen funktioniert mit der neuen Lösung zwar nicht so einfach, ich denke aber das ich mit der Gitlab-Api durchaus etwas basteln kann. Mal sehen. So oft benutze ich es sowieso nicht.
Apropos Gitlab: Ich habe auf Version 9 aktualisiert und musste einiges anpassen, damit es wieder rund läuft. Das werde ich die Tage auch mal zusammenschreiben.
Wenn euch also noch was auffällt, dann gebt mir Bescheid. Bei so einer Umstellung vergisst man doch häufiger was.