Nachdem ich einige Typo3-Installationen hinter mich gebracht hatte, bat mich eine Freundin, für sie Wordpress auf einem Server zu installieren. Damit es mir später auch noch ein zweites Mal gelingt, will ich meine Arbeitsschritte hier dokumentieren.
Voraussetzungen
LAMP vorbereiten
WordPress benötigt einen Webserver, eine Datenbank und PHP. Für Linux nehme ich Ubuntu 18.04, als Server Apache, als Datenbank MySQL und schließlich noch PHP 7.2 als Serversprache. Die Domain herdomain.de ist registriert und ich habe die A-Records der Domain auf die IP des Servers umgeleitet. Gemäß dieser Anleitung lege ich für die Domain die Apache-conf-Datei herdomain.conf unter /etc/apache2/sites-available/herdomain.conf an. (In der Anleitung geht es zwar um zwei Domains, aber man kann sich die zweite wegdenken.) Die Document root lautet /var/www/herdomain/. Jetzt kann ich die Domain mit einem Sicherheitszertifikat versehen, das ich nach dieser Anleitung vergebe: Let’s-Encrypt-Anleitung.
MySQL-Datenbank erzeugen
Für Wordpress benötigt man eine MySQL-Datenbank. MySQL sollte bereits installiert sein mit einem User root und einem vergebenen Passwort. Ich wähle mich in MySQL ein:
mysql -u root -p
und bestätige mit dem vergebenen MySQL-Passwort. Ich erzeuge eine Datenbank mit einem beliebingen Name. Ich setze gerne ein „_db“ zu meiner Orientierung hinter den Datenbanknamen:
CREATE DATABASE herdomain_db DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Der Utf8-Zusatz stellt sicher, dass später Umlaute korrekt dargestellt werden. Abschließendes Semincolon nicht vergessen! Mit
show databases;
überprüfe ich, ob die Datenbank angelegt wurde und verlasse anschließend MySQL:
exit;
PHP Extensions installieren
Wordpress benötigt einige PHP Extensions. Hier eine kleine Zusammestellung:
sudo apt install php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip
Ein Wordpress-Plugin kann zusätzliche PHP-Pakete benötigen. Dazu sieht man am besten in der Wordpress-Plugin-Dokumentation nach. Abschließend muss Apache neu gestartet werden:
sudo systemctl restart apache2
.htaccess Overrides erlauben
Um .htaccess-Dateien zuzulassen, setze ich eine AllowOverride-Anweisung in der herdomain.conf-Datei (s.o.), die auf die Document Root zeigt. Ich öffne die Datei
sudo vim /etc/apache2/sites-available/herdomain.conf
und trage folgende Zeilen ein:
<Directory /var/www/herdomain/> AllowOverride All </Directory>
Als nächstes aktiviere ich mod_rewrite, damit die WordPress Permalink-Funktion genutzt werden kann:
sudo a2enmod rewrite
Ich überprüfe die Syntax mit
sudo apache2ctl configtest
und hoffe, als Ergebnis
Syntax OK
zu erhalten. Ich starte Apache neu, um die Änderungen zu implementieren:
sudo systemctl restart apache2
Wordpress herunterladen
Die Serversoftware ist konfiguriert, und ich kann Wordpress herunterladen und einrichten. Insbesondere aus Sicherheitsgründen ist es immer empfehlenswert, die neueste Version von der Wordpress-Website herunterzuladen. Ich wechsele in ein beschreibbares Verzeichnis und lade mir die komprimierte Version herunter:
cd /tmp curl -O wordpress.org/latest.tar.gz
Ich entpacke die komprimierte Datei, um die Wordpress-Verzeichnisstruktur zu erstellen:
tar xzvf latest.tar.gz
Ich werde diese Dateien später in die Document Root verschieben. Zuvor füge ich eine .htaccess-Datei hinzu, die Wordpress später verwenden kann.
touch /tmp/wordpress/.htaccess
Die Beispiel-Konfigurationsdatei wp-config-sample.php kopiere ich in den Dateinamen, den Wordpress tatsächlich liest:
cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php
Ich erstelle schon ein Upgrade-Verzeichnis, sodass Wordpress nach einem Update der Software nicht mit Berechtigungsproblemen konfrontiert wird:
mkdir /tmp/wordpress/wp-content/upgrade
Im Document Root lege ich ein Verzeichnis an, in das ich die Wordpress-Dateien verschieben will:
sudo mkdir /var/www/herdomain
Jetzt kopiere ich den gesamten Inhalt des wordpress-Verzeichnisses in die Document Root. Der Punkt am Ende des Quellverzeichnisses zeigt an, dass alles innerhalb des Verzeichnisses kopiert werden soll, einschließlich versteckter Dateien (wie z.B die erstellte .htaccess-Datei):
sudo cp -a /tmp/wordpress/. /var/www/herdomain
Wordpress-Verzeichnis konfigurieren
Bevor ich das webbasierte Wordpress-Setup durchführe, passe ich einige Einträge im Wordpress-Verzeichnis an. www-data ist der Benutzer, unter dem der Apache-Webserver läuft. Apache muss Wordpress-Dateien lesen und schreiben können, um die Website zu anzuzeigen und automatische Updates durchzuführen. Ich übertrage dem Apache-User www-data die Rechte an den Dateien:
sudo chown -R www-data:www-data /var/www/herdomain
Mit dem find-Kommando schränke ich die Berechtigungen von Verzeichnissen und Dateien ein:
sudo find /var/www/herdomain/ -type d -exec chmod 750 {} \; sudo find /var/www/herdomain/ -type f -exec chmod 640 {} \;
Falls Wordpress mal meckern sollte, dass ihm Berechtigungen fehlen und man ein Plug-in nicht installieren kann oder ein Theme sich nicht aktualisieren lässt, kann man die Berechtigungen auch ausweiten:
sudo find /var/www/jungle-tools/ -type d -exec chmod 755 {} \; sudo find /var/www/jungle-tools/ -type f -exec chmod 664 {} \;
Konfigurationsdatei mit Sicherheitsschlüssel versehen
Wordpress bietet Sicherheitsschlüssel, die unbedingt eingesetzt werden sollten. Mit folgendem Befehl lässt sich eine Sicherheitsschlüssel erzeugen:
curl -s api.wordpress.org/secret-key/1.1/salt/
Die Schlüssel sehen ungefähr so aus:
define('AUTH_KEY', 'It]Oz{V-Cesj!h.2|:}Akdx}+ER:JhWbXI&Td7sCPNlery@8?nX]):dmF0O1h&'); define('SECURE_AUTH_KEY', '7A|Su/P0+^;[UFNaPy]FeQxu4]teC5|n+LtAVBj^xo&+2?+n!;+5V?D6ECq!;bgA'); define('LOGGED_IN_KEY', 'hC#B(-F4IjO.IIJA[V=Khg2dp 7U0U#9+k+<3{$.Fc *8N4Ywb.%G.LbLRk!-YPs'); define('NONCE_KEY', '{XCbHO~{KMb7d,q#yb!~{SF0(;w,wH|RLZ!s l@8SyAO<B(r:u5ig9d ?Z,Rv?AR'); define('AUTH_SALT', 'lsj<pE0*^ Gpqi%;*~sOgup.MmW|o7a:-& cLrxqS|r6 ?fF}D_z6-+w56sO6>8S'); define('SECURE_AUTH_SALT', '6JX59@o~guOB%H_IB!*Zdcz[}WKN9Z*&A93=}9H0e*ysQQ[;-K2hp*>H8TxoXF_S'); define('LOGGED_IN_SALT', 'eI_+HiP{;BPZ)x5g{r!2giIv9#Hs#Y|$fd7cxPozL%1}rCF|-hy oOxaH>Kv,'); define('NONCE_SALT', '4-}XMu$4,ytFd|_[QFkm-f-0p^Vxx-zY#_m+1n;.^<!S#v_6j)*TJ');
Ich kopieren meinen eigenen individuell erzeugte Schlüssel und öffne die Konfigurationsdatei:
sudo vim /var/www/herdomain/wp-config.php
In der Konfigurationsdatei sind entsprechende Dummy-Zeilen vorbereitet, die ich durch meinen Schlüssel ersetze.
Oben in der Konfigurationsdatei passe ich folgende Zeilen an:
/** The name of the database for WordPress */ define('DB_NAME', 'herdomain_db); /** MySQL database username */ define('DB_USER', 'root'); /** MySQL database password */ define('DB_PASSWORD', 'password');
Die letzte Änderung, die ich vornehme, betrifft die Methode, wie Wordpress in das Dateisystem schreiben soll. Da ich dem Webserver die Erlaubnis erteilt habe, dort zu schreiben, wo er schreiben muss, setze ich die Dateisystemmethode explizit auf "direct". Wenn ich dies nicht mit meinen aktuellen Einstellungen festlege, wird Wordpress bei einigen Aktionen zur Eingabe von FTP-Anmeldeinformationen aufgefordert. Diese Zeile kann an eine beliebigen Stelle in der Konfigurationsdatei stehen:
define('FS_METHOD', 'direct');
Wenn alles richtig konfiguriert wurde, kann meine Freundin nun ihre Seite herdomain.de aufrufen und im Webbrowser ihre Wordpress-Installation abschließen.
Bemerkungen :