03_ Webserver Lighttpd, PHP, WordPress CMS mit Raspi Pi3

Kommen wir zum Kern dieses Projekts. Wie sollte WordPress angelegt werden, mit denen die Schüler arbeiten? Meine Erfahrung: WordPress ist resour­cen­hungrig. Arbeiten mehr als 10 Schülerteams zugleich auf einem Raspi Pi 2, wird es ›eng‹ mit der Raspberry­installation. Das bedeutet Warte­zeiten, weisse Seiten und Frust beim Clienten. Mit diesem Setup sowie einem schnellem Pi3 am Start sollte es besser gehen (ich werde berichten).

WordPress Installation

Didaktische Taktische Vorüberlegungen

Am besten installieren die Schüler WP selbst, damit sie Datenbank-Handling, Passwortschutz und User­einrichtung kennenlernen. Download und Arbeiten per (S)FTP wären klasse, belasten aber den Server sehr (es reicht schon an Problemen, wenn die Schüler ihr Password richtig eintippen & behalten). Deswegen übernimmt der Lehrer Vor­ar­beiten, damit das Projekt schneller gestartet werden kann (Einwand: WP kann hervorragend Multi­site-Installation. Das wäre mir aber zuviel Service und zuwenig Lernen).

Download & Ausführung

WordPress hat die berühmte 5-Minuten-Installation. Davor stehen aber eine Menge serverseitige Arbeiten, hier in Übersicht:

  1. Download & Entpacken von WordPress.
  2. Einrichtung von Userverzeichnissen; Kopieren von WordPress.
  3. Aufbau von leeren Datenbanken inkl. User/Password.

Download von WordPress: Zur Originalseite gehen und den Downloadlink kopieren. Das ZIP auf den Raspi z.B. downloaden und entpacken.
cd /var/www/html
sudo mkdir wordpress
cd wordpress
sudo wget https://de.wordpress.org/wordpress-4.7.2-de_DE.zip
sudo unzip wordpress-4.7.2-de_DE.zip
cd ..
sudo cp -R wordpress test
WP wurde nun im Ordner names ›wordpress‹ entpackt. Dieser Ordner wurde kopiert (›test‹). Den Ordner ›wordpress‹ aufbewahren. Man kopiert ihn später jeweils für die Schülerinstallationen.

Datenbank einrichten.

Webbrowser auf und deine Adminer-Installation besuchen, einloggen als Root.

Dort eine neue leere Datenbank erstellen, z.B. ›test‹. Achtung, die Collation vorher einstellen, zum Beispiel utf8_unicode_ci.

Berechtigungen

Vor der Konfiguration von WordPress müssen noch die Berechtigungen des Document Roots angepasst werden. sudo chown -R www-data:www-data /var/www/html

WordPress-Installationsvorgang

Nun mit der WordPress-Installation beginnen. Im Webbrowser die IP des Raspi aufrufen und dann die von WordPress abgefragten Daten (Username (z.B. ›root‹) und Passwort, DB-Name) eintragen usw. Den Installationsvorgang kann man auch gerne vor Schülern ›live‹ zelebrieren, aber vorher ausprobieren ist auch wichtig, um zu erkennen, ob der Webserver richtig eingerichtet ist, welche Plugins man einsetzt, welches Theme präsentabel ist, Beispielcontent ….


WordPress in Schülerhand

Ich lasse Schülerteams bilden, ideal: »immer zu zweit sie sind«. Für jedes Team (9. Klasse) richte ich einen Ordner im Webroot ein: »inf09-01, inf09-02, inf09-03 usw.« Ein paar in Reserve, falls eine Installation von WordPress zerschossen wird, Passwörter verloren wurden. Mittels Adminer werden Datenbanken und User/Password erzeugt mit gleichen Namen. Achtung: den Usern keine Serverrechte einräumen!


Mod-Rewrite / Permalinks

Für cleane URLs der Unterseiten von WordPress (›Permalinks‹) braucht es eine .htaccess-Datei, die unter Lighttpd nicht vorgesehen ist.

  1. In der /etc/lighttpd/lighttpd.conf Mod-Rewrite enablen, indem die Raute (#) vor dem Eintrag gelöscht wird. server.modules = (
    "mod_access",
    "mod_alias",
    "mod_compress",
    "mod_redirect",
    # "mod_rewrite",
    )
  2. Dann unten in der Datei ergänzen.$HTTP["host"] =~ "(^|\.)domain\.com$" {
    url.rewrite-once = (
    # Exclude additional specific directories from rewrites
    "^/(files)/?(.*)" => "$0",
    "^/(wp-.+).*/?" => "$0",
    "^/(sitemap.xml)" => "$0",
    "^/(xmlrpc.php)" => "$0",
    "^/keyword/([A-Za-z_0-9-])/?$" => "index.php?keyword=$1",
    "^/(.+)/?$" => "index.php/$1"
    )
    }

  3. Speichern, dann Lighttpd neustarten.sudo service lighttpd restart

Extras

Plugins ohne FTP-Server

Da sich die Schüler dieses Projekts nicht auf dem Server bewegen sollen, muss eine Installation von Plugins im Backend von WordPress ggfls. ohne FTP-Server ermöglicht werden. Dafür muss (vom Lehrer) jeweils die WP-Config-Datei geändert werden. Öffnen (sie befindet sich auf oberster Ebene der WP-Dateien), herunterscrollen unter die Zeile: define(‘DB_COLLATE’, ”); und dann vermerken:
define('FS_METHOD', 'direct');

Pflicht-Plugins in WP

  • Wenig Traffic und Datenbankabfragen erleichtern dem Raspi seine Arbeit. Schrauben z.B. ein Dutzend Schülerteams gleichzeitig an ihrer WordPress Seite herum, dann kommt viel Arbeit auf den Raspi zu. Deswegen gilt für die Schüler, ein Cache-Plugin zu installieren. Was hilft zum Beispiel ›Cachify‹? Ein Blick in den Quelltext einer Site, in der HTML/Javascript gecached wurden:
    <!--
    Cachify | http://cachify.de
    Ohne Plugin: 35 DB-Anfragen, 0,85 Sekunden, 4,11 MB
    Mit Plugin: 8 DB-Anfragen, 0,49 Sekunden, 3,73 MB
    Generiert: 1 Minute zuvor
    -->
  • Kontaktformulare gehören heute auf Websites dazu (ausser auf dieser…). Deswegen wäre die Anwendung und Einbau auch ein Muster für Formularnutzung (PHP in Sicht!). Da bietet sich Contact Form 7 an (am besten mit ReCaptcha; allerdings wird es sich schlecht auf einem Raspi ohne Domain realisieren lassen).

ZLib-Kompression in PHP

zlib.output_compression = on
zlib.output_compression_level = 6


Fazit und erster Eindruck

Die erste Test-Installation läuft ›schnell‹ und ›snappy‹. Interessanter­weise schneller als mit Nginx als Webserver inklusive PHP7 (dessen Installation mein Raspi zerschossen hat) und MySQL-DB. Kurze Erinnerung, mein jetziges Setup ist Lighttpd, PHP5 und MariaDB. Der Begriff ›schnell‹ ist subjektiv. Dennoch gibt es einen merklichen Unter­schied, ob sich eine Site in 1 Sekunde aufbaut oder darunter liegt.

To2-List für die Wissenschaft

  • Abwarten, was passiert, wenn 10 Teams gleichzeitig den Server belasten.
  • Htop anschmeissen und die Serverlast beobachten.
  • Spielen mit Compression, RAM-Zuteilung usw.

Auswertung & Erfahrung

Soo, nach ein paar Monaten im Gebrauch habe ich ein paar Erfahrungen gesammelt. Vorweg: der Raspberri schlägt sich tapfer, hat aber auch Grenzen der Belastbarkeit.

Performance
  • 8 Installationen WordPress laufen gleichzeitig. Wenn alle Schüler an Inhalten, Plugins usw. arbeiten, dann verlängert sich die Ladezeit bei Refresh von WordPress auf bis zu 10 Sekunden. Die Schüler kommen damit zurecht, da sie zum Beispiel Inhalte redigieren, für effektives Arbeiten ist das natürlich zu hoch.
  • der durchschnittliche Topload beträgt laut htop 1.5 , hauptsächliche CPU-Last erzeugen die Prozesse um php-fpm.
  • Plugins machen die meisten Probleme. Da ich in einer Aufgabenstellung deren Installation vorgesehen habe (Kontaktform, Gallery usw.) bin ich mitschuldig für manchen Engpass gewesen.
  • möglicherweise hilft die Erhöhung des Memory-Limits (hier auf 256MB):
    sudo nano /etc/php5/fpm/php.ini hier
    ; Maximum amount of memory a script may consume (128MB)
    ; http://php.net/memory-limit
    memory_limit = 256M
    . Danach Neustart PHP: sudo service php5-fpm restart. Leider konnte ich die (positiven?) Auswirkungen nicht beobachten, da das Projekt endete…
  • Manche Plugins sind schwieriger als andere: z.B. Jetpack, Woo-Commerce haben explizit Probleme verursacht mit einer Server-Fehlermeldung: 500 und Whitescreen. Es hilft nur die serverseitige Um­ben­ne­nung/Löschung der problematischen Plugin-Ordner innerhalb von:
    /var/www/html/ordner-wp-installation/wp-content/plugins

Extra

– Artikel zu Personal Webserver aufbauen mit Raspi Pi3.

9 Responses to “03_ Webserver Lighttpd, PHP, WordPress CMS mit Raspi Pi3”

  1. Es ergibt keinen Sinn, WordPress per sudo herunterzuladen und zu entpacken. Warum „darf“ das der eingeschränkte Benutzer nicht machen? Je weniger Rechte, desto besser – dachte, du willst den Schülern auch was über Sicherheit beibringen.

    Ebenso gehören Admins, die WordPress über das root-Datenbankkonto installieren, m.E. standrechtlich erschossen. Aber gut, unsereins hat ja Freude an unsicheren Websites.

    Antworten
    • a) Die Schüler erhalten kein Benutzerkonto auf dem Raspi. Sie greifen alle auf den Document Root zu, in dem jeweils ihre Ordner mit ihrer eigenen WordPress-Installation liegen.
      Das ist meine Art von Sicherheit, denn ich garantiere, wenn die Schüler eine Shell zur Hand hätten, würden sie experimentell anfangen zu cracken …

      b) Der Admin, der als Root sein WordPress installiert, tut es als Lehrer zu Demonstrationszwecken. Warum lange einen speziellen User konstruieren? Die Schüler nutzen ihre Datenbank selbstverständlich nur mit stark eingeschränkten Rechten (ich hoffe, genau die richtige Menge davon zu vergeben; bisher war es passend).

      Antworten
      • sudo = erhöhte Benutzerrechte – und zwar ohne einen wirklich triftigen Grund. Du meinst, alle Schüler greifen auf die Ordner aller anderen Schüler zu? Das klingt, mit Verlaub, alles andere als sicher.

        Apropos: Ich kann hier den Großteil der Zeit nicht antworten, weil dein Blog behauptet, ich sei als C.L. oder als Writa angemeldet. Was hast du denn da wieder kaputtgemacht?

        Antworten
      • Dann hast Du bestimmt gute Ratschläge, wie die ganze Konstruktion sicherer wäre? Bedenke, hier geht es um ein lokales Übungsgerät, welches nicht im WWW steht. Ausserdem hat keiner der Schüler eine Shell zur Verfügung, nur den Zugriff per Browser auf seinen eigenen Ordner/WordPress-Installation.

        Antworten
  2. Writa, lass dich nicht ins Boxhorn jagen. Ich empfinde deine herangehensweise an die Situation als angemessen. Selbst wenn ein Schüler so ein Ding owned, sind die Raspis nicht genau dafür gebaut worden? Auch wenn ich es für sehr unrealistisch halte, dass ein 9. Klässer das Dingen auseinander nehmen kann, und wenn, dann hat er es verdient. Da das Dingen autonom läuft, ist auch kein relevanter Schaden entstanden. Mit „zunageln“ bis zur Unbenutzbarkeit ist den Schülern auch nicht geholfen.

    Antworten
    • Jo & danke, sehe ich auch so. Es geht um eine Übeungsituation. Ein wenig Vertrauen sollte man schon in die Motivation der Schüler haben, einfach mal eine geile Website herzustellen, und dabei die Funktionsweise eines OpenSource CMS kennenzulernen.

      Antworten

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>