Drupal
Willemers Informatik-Ecke
Drupal ist ein Contents Management System. Drupal setzt auf einer LAMP-Architektur auf.

Wenn man mit einer nicht ganz aktuellen Drupal-Version zufrieden ist, die vom Linux-Distributor aktualisiert wird, dann installiert man klugerweise Drupal aus dem Repository seines Linux-Anbieters.

apt-get install drupal7

Für alle anderen, die immer das neueste Modell haben wollen und das Abenteuer lieben, ist hier eine Beschreibung, wie man die aktuellste Version direkt aus dem Internet installiert.

Grundinstallation der LAMP-Komponenten


apt-get update
apt-get install apache2 libapache2-mod-php php-xml php-gd libphp-adodb
a2enmod rewrite
systemctl restart apache2
Drupal legt großen Wert auf das Modul rewrite.

Clean URLs

Auch die Clean URLs werden später wichtig. Während des Installationsprozess wird lediglich eine Warnung ausgegeben, wenn Clean URLs nicht gesetzt werden. Allerdings führt ein Ignorieren dazu, dass nur die Hauptseite funktioniert und jedes Anlicken irgendeines Links sofort zu einem Fehler 404 - Seite nicht gefunden führt.

Die hier ausgeführte Anpassung basiert auf einem AllowOverride für das Drupal-Verzeichnis. Das ist möglich, wenn Drupal auf einem System läuft, dass frei konfiguriert werden kann.

Auf meinem System läuft Drupal als einziges System. Hier wurde die Änderung in der einzigen Site eingetragen, die enabled ist.

vi /etc/apache2/sites-enabled/000-default.conf
In dieser Datei wird ein spezieller Eintrag für das Verzeichnis drupal eingefügt, der AllowOverride für alle erlaubt. Das Folgen eines symbolischen Links wurde daraufhin auch genehmigt.

<VirtualHost *:80>
    # ...
    <Directory /var/www/html/drupal>
        Options FollowSymLinks
        AllowOverride All
    </Directory>
</VirtualHost>
Auch nach dieser Änderung empfielt sich der Neustart des Apachen.
systemctl restart apache2

Vorbereitung der Datenbank

Für Drupal muss eine Datenbank eingerichtet werden. Dazu wird die Datenbank MySQL bzw. ihr Nachfolger MariaDB eingerichtet.
apt-get install mariadb-server
Anschließend wird für Drupal eine eigene Datenbank und ein Datenbankbenutzer angelegt. Hier wird als Beispiel die Datenbank drupaldb für den Benutzer drupaluser mit dem Passwort geheim angelegt:
mysql -u root -p (Passwort eingeben)
create user drupaluser identified by 'geheim';
create database drupaldb;
grant all on drupaldb.* to drupaluser;
select user,host,password from mysql.user;
exit

Download und Einrichtung von Drupal

Auf der Download-Seite von Drupal wird das Drupal-Paket wird als tar.gz angeboten. Dieses wird heruntergeladen und landet beispielsweise im Download-Verzeichnis des Benutzers linux. Als root wird das Paket im Datenverzeichnis des Apache entpackt.
cd /var/www/html
tar xfz /home/linux/Download/drupal-x.yy.tar.gz
mv drupal-x.yy drupal
chown -R :www-data drupal
Die Settings werden aus den Defaults erstellt. Werden diese später gelöscht und eine frische Datenbank aufgesetzt, kann die Installation wiederholt werden.
cd drupal/sites/default
chmod 777 .
cp default.settings.php settings.php
cp default.services.yml services.yml
chmod 664 settings.php services.yml
chown :www-data se*

Weitere Installation per Browser

systemctl restart apache2
Dann wird auf dem lokalen Rechner ein Browser eröffnet und als Adresszeile wird localhost/drupal eingegeben.

Daraufhin startet die Installation mit folgendem Dialog:

Wird nun als Adresszeile locahlhost/drupal eingegeben, erscheint der Hauptbildschirm von Drupal.

Nacharbeiten

Es werden noch Installationsfehler gemeldet, die für die Installation freigeschaltete Rechte betrifft:
cd /var/www/html/drupal
cd sites/default
chmod 444 se*
chmod 755 .

Drupal per Browser verwalten

Die Installation kann man prüfen, indem man auf dem lokalen PC die Adresse localhost/Drupal aufruft. Von einem anderen PC aus, kann man localhost durch den Namen oder die IP-Adresse des Hosts ersetzen.

Nach der Anmeldung als admin mit dem bei der Installation vergebenen Passwort ergibt sich folgendes Bild, wenn der Menüpunkt Verwalten aktiv ist:

Verwalten - Erweitern

Unter Extend stehen mehrere Erweiterungen zur Verfügung. Viele sind angewählt. Beispielsweise kann ein Forum, Syslog oder Statisitiken freigeschaltet werden.

Hier wurde der Update Manager angeklickt und unten der Button Installieren angeklickt.

Über die Statusberichte meldet das System, dass es eine neue Version 8.4.4 gibt. Ein Update ist direkt aber nicht möglich.

Inhalt hinzufügen

Auf der linken Seite findet man unter Werkzeuge den Punkt Inhalt hinzufügen. Darunter die Wahl zwischen Artikel und Einfache Seite. Wir wählen die einfache Seite und erhalten ein Eingabeseite mit Titel und Textkörper.

Benutzer anlegen

Als admin anlegen. Dort aus der Menüleiste Benutzer auswählen. Dort auf den Button Benutzer hinzufügen klicken. Benutzer erhält folgende Informationen: Damit wurde der Benutzer erzeugt. Der kann allerdings keine Seite anlegen.

Backup

Das Backup von Drupal besteht einerseits aus dem Datenbankinhalt sowie dem Inhalt in den Dateien /var/www/html/drupal/site (oder wo immer die Drupal-Dateien hingelegt wurden).

Als Datensicherungsverzeichnis wird hier /var/backup verwendet. Dieses Verzeichnis könnte man per automount auf ein NAS oder einen anderen Server legen.

mkdir /var/backup

Datenbanksicherung

Wenn der Befehl drush zur Verfügung steht, kann die Datenbank darüber gesichert werden. Das hat den Charme, dass es datenbankunabhängig funktioniert und keine Passwörter hinterlegt werden müssen.
drush sql-dump > /var/backup/drupaldb20180222.sql
Steht drush nicht zur Verfügung, muss man den Dump-Befehl der Datenbank verwenden. MySQL (bzw. MariaDB) verwenden den Aufruf mysqldump, um den Datenbankinhalt in eine SQL-Kommandodatei zu schreiben.
mysqldump -u drupaluser -pgeheim drupaldb > /var/backup/drupaldb20180222.sql
Es ist allerdings nie eine gute Idee, ein Passwort in einem Kommando im Klartext abzugeben, weil ein einfaches ps jedem Anwender der Maschine die Kommandozeile komplett anzeigen kann und damit auch das Passwort.

Besser ist es darum, auf -p ein Leerzeichen folgen zu lassen, dann fordert der Befehl das Passwort von der Konsole an.

Dateisicherung

Alle Dateien unter dem Verzeichnis sites gehören ebenfalls zum Sicherungsumfang. Das kann auf drei Versionen erfolgen:
cd /var/www/html/drupal
tar czf /var/backup/drupal20180222.tgz /var/www/html/drupal/sites

Rücksicherung

Zur Rücksicherung muss zunächst die Datenbank restauriert werden. Dazu wird die SQL-Datei als Batch-Datei durch das Datenbanksystem ausgeführt. Alle erforderlichen Befehle stehen darin. Allerdings muss die Datenbank drupaldb und der Benutzer drupaluser zuvor angelegt worden sein.

mariadb -u drupaluser -p drupaldb < /var/backup/drupaldb20180222.sql
Es wird um die Eingabe des Passworts gebeten.

Anschließend muss die Sites-Datei wiederhergestellt werden:

cd /var/www/html/drupal
tar xzf /var/backup/drupal20180222.tgz

Weitere Informationen: Sicherung der Drupal-Datenbank

Update

Als Update wird ein Wechsel zur nächsten Minor-Version genannt, also beispielsweise von 8.3 zu 8.4. Ein Wechsel von 8.x zu 9.x wird als Upgrade bezeichnet.

Der folgende Abschnitt beschreibt den Update von Drupal 8.3 nach 8.4, der auf diese Weise beinahe gelang. Auf der Konsole erhielt ich zu guter Letzt eine Meldung über einen erfolgreichen Update, in der Administrationsbereich im Browser blieb es aber bei der Meldung, dass die alte Version noch aktiv sei. Auch ein Neustart des Apachen führte nicht weiter. Ein erneuter Updateversuch meldete, dass alles auf aktuellem Stand sei. Falls jemand einen Tipp hat...

Die Beschreibungen für einen Drupal-Update sind gefühlte zwei Tonnen schwer. Leider setzen sie die Tools drush und composer voraus, die in Debian nicht und in Ubuntu nur in einer veralteten Version vorliegen. Hinzu kommt, dass nicht alles, was im Internet steht, auch wirklich funktioniert.

Drupal hat durchaus heftige Sicherheitslücken aufgewiesen. Um so bedauerlicher ist es, dass der Update von Drupal derart umständlich ist.

Installation von drush

Für den Update wird das PHP-Programm drush verwendet. Das ist unter Debian 8/9 nicht vorhanden und liegt unter Ubuntu nur in einer alten Version 5 vor. Also wird die aktuelle Version von github geholt.

  1. Unter der URL https://github.com/drush-ops/drush/releases befindet sich das Paket drush.phar. Dieses wird heruntergeladen.
  2. cd ~/Downloads
  3. php drush.phar core-status
    Testet, ob das Paket brauchbar ist.
  4. chmod +x drush.phar
  5. sudo mv drush.phar /usr/local/bin/drush
    Schiebt das Programm an eine im PATH liegende Stelle unter dem Namen drush.
Quelle:
http://docs.drush.org/en/8.x/install

Installation von composer

  1. apt-get update
  2. apt-get install curl php5-cli git
    Installiere notwendige Programme, insbesondere das Programm git.
  3. php -r "copy('https://getcomposer.org/installer', '/tmp/composer-setup.php');"
    Hole die Installationsumgebung und schiebe sie nach /tmp
  4. php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer
    Starte die Installation und schiebe composer nach /usr/local/bin
  5. composer --version
    Prüfe, ob ein ausführbarer composer vorliegt
  6. rm /tmp/composer-setup.php
    Beseitige die Installationsreste
Quelle:
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-composer-on-debian-8

Update Drupal

Für den Update wird später das PHP-Paket mbstring benötigt. Der folgende Befehl installiert es.

apt-get install php-mbstring

In das Verzeichnis /var/www/html/drupal wechseln und den folgenden Befehl eingeben:

composer update drupal
Der Befehl wertet die dort liegende Datei composer.json aus, lädt Dateien herunter und aktualisiert sie. Trotz allen Fleißes wird der Update aber nicht durchgeführt, wie localhost/drupal/admin/reports/updates/update belegt. Dort wird immer noch beklagt, dass die installierte Version die alte ist.

Im nächsten Versuch habe ich den folgenden Weg verwendet:

composer require drupal/core drush/drush
Die Idee kam mir, nachdem ich den Update, wie er auf der Website Hilfestellung beschrieben wird, nicht gelingen wollte. Der dort vorgeschlagene Befehl
composer update "drupal/core" "drush/drush"
führte nicht zu einem Update. Da auch show nicht funktionierte, versuchte ich es schließlich mit require.

Nun installierte und aktualisierte der composer und schließlich stand eine Drupal-Version zur Verfügung, mit der auch die Berichte im admin-Umfeld zufrieden waren. Drush wurde auf die Version 9.1.0 hochgezogen.