Wordpress mit Lighttpd, MariaDB und PHP
Lighttpd
Nachdem ich meinen neuen vServer abgesichert habe, geht es nun ans Eingemachte: die Übertragung meines Weblogs von meinem alten Webspace an seine neue Heimat. Dazu braucht man lediglich einen Webserver, eine Datenbank (in der Regel MySQL) und PHP. Wenn es darum geht, einen Webserver unter Linux zu betreiben, dann stößt man im Internet fast überall auf den Apache Webserver oder nginx. Daneben gibt es aber noch eine Reihe anderer, z.T. weniger bekannte Alternativen, die vor allem in Sachen Ressourcensparsamkeit besonders punkten können. Ein solcher Kandidat ist Lighttpd oder kurz: lighty Ich setze lighty schon seit geraumer Zeit auf meinem BananaPi ein um dort Dienste wie etwa owncloud oder tiny tiny rss nutzen zu können. Gerade in einer Umgebung mit eingeschränkten Ressourcen bei nicht allzu hohen Anforderungen (etwa viele gleichzeitige Anfragen an den Webserver) hat lighty bisher eine exellente Figur gemacht. Klar, dass er deshalb auch prädestiniert für mein vServer-Projekt ist :-)
Konfiguration
Das schöne an lighty ist die recht simple Konfiguration. Zentraler
Anlaufpunkt für die Konfiguration ist die Datei
/etc/lighttpd/lighttpd.conf. Für meine Konfiguration nutze ich
folgende Module:
Die eigentliche Konfiguration für meine Domain packe ich in den
folgenden Abschnitt. Darin definiere ich zunächst das Rootverzeichnis wo
die eigentliche Wordpressinstallation liegt und die Speicherorte für das
access.log und das error.log; zudem schalte ich das 'directory
listing' aus. Da Lighttpd keine Unterstützung für eine .htaccess Datei
bietet muss der Zugriffsschutz auf bestimmte Dateien auf anderem Wege
eingerichtet werden. Mittels url.access-deny kann man den Zugriff auf
diese Dateien verbieten. Zum Schluss noch eine rewrite-Regel, die ich
hier
gefunden habe, damit die Wordpress Permalinks sauber aufrufbar sind. Der
letzte Abschnitt verhindert, dass mein Weblog über die IP-Adresse
aufgerufen werden kann.
$HTTP["host"] =~ "(www.)?thinkretro.de" {
server.document-root = "/var/www/thinkretro.de"
accesslog.filename = "/var/log/lighttpd/thinkretro.de/access.log"
server.errorlog = "/var/log/lighttpd/thinkretro.de/error.log"
dir-listing.activate = "disable"
url.access-deny = ("wp-config.php", "wp-cron.php", "wp-login.php", "wp-trackback.php", "xmlrpc.php")
url.rewrite = (
"^/(.*)\.(.+)$" => "$0",
"^/(.+)/?$" => "/index.php/$1"
)
}
$HTTP["host"] =~ "138.201.159.234" {
url.access-deny = ( "" )
}
Damit die neue Konfiguration geladen wird muss der Webserver neu gestartet werden:
#: systemctl restart lighttpd
Wenn auf dem System noch eine Firewall läuft, sollte man zudem den Port 80 freigeben. Sonst sollte man sich nicht wundern, warum man einfach keine Verbindung zum Webserver von außen herstellen kann. ;-)
Installation von MariaDB und Import des SQL-Dumps
Statt MySQL nutze ich die völlig freie und zu MySQL kompatible Datenbank MariaDB. Die Installation ist auch schnell erledigt:
#: sudo apt-get install mariadb-server mariadb-client
#: sudo mysql_secure_installation
Standardmäßig wird bei der Installation u. a. eine Testdatenbank und ein Benutzeraccount "anonymous" angelegt, der jedem den Login ohne Passwort erlaubt, daher empfiehlt es sich für eine Produktivumgebung erst einmal aufzuräumen. Der letzte Befehl sorgt u. a. dafür, dass diese Testdatenbank entfernt wird und sich nur autorisierte Benutzer anmelden dürfen.
Neuen Benutzer anlegen und leere Datenbank erstellen:
Nun gilt es eine neue Datenbank und einen neuen Benutzer zu erstellen. Anmelden an der Datenbank als root:
$: mysql -u root -p
MariaDB [(none)]> create database if not exists wordpress_db;
MariaDB [(none)]> create user 'wordpress'@'localhost' identified by 'password';
MariaDB [(none)]> grant all on wordpress_db.* to 'wordpress';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit;
Als erstes wird eine leere Datenbank 'wordpress_db' erstellt. Danach ein neuer Benutzer 'wordpress' mit dem Passwort 'password'. Als nächstes werden diesem Benutzer alle Rechte an der Datenbank 'wordpress_db' zugeteilt und zum Schluss die Privilegien aktualisiert und die Datenbank verlassen. Nun kann man den SQL-Dump in die neue Datenbank importieren:
$: mysql -u wordpress -p wordpress_db < sql_dump.sql
PHP
Die Installation von PHP gestaltet sich hier wesentlich simpler und einfacher. Installation der benötigten Pakete:
sudo apt-get install php5-cgi php5 php5-mysql
Wenn man nicht den Apache als Webserver einsetzen will, muss man hier
auf die richtige Installationsreihenfolge der Pakete
achten.
Damit der Fast-CGI Prozess vom Webserver gestartet werden kann, muss
noch die entsprechende Konfigurationsdatei /etc/lighttpd/lighttpd.conf
angepasst werden. Dort fügt man ein:
#PHP-fcgi:
fastcgi.server = ( ".php" => ((
"bin-path" => "/usr/bin/php5-cgi",
"socket" => "/tmp/php.socket"
)))
Darüber hinaus muss in der Datei /etc/php5/cgi/php.ini der Kommentar
in der Zeile cgi.fix_pathinfo = 1 entfernt werden.
Was noch fehlt
Wie man sieht, ist die Konfiguration wahrlich kein Hexenwerk und - wenn man sich mal etwas eingelesen hat - auch recht schnell erledigt. Was jetzt noch fehlt ist die Umstellung des kompletten Datenverkehrs auf Https.