Motivation
Wer schon einmal mit Debian oder einem Derivat davon wie z.B. Ubuntu gearbeitet hat, wird direkt oder indirekt schon einmal mit dem Paketverwaltungssystem Dpkg oder dem dazugehörigen Frontend APT in Kontakt gekommen sein. Für Systemadministratoren ist Packetmanagement ein Segen: sie erlauben einem mit wenig Aufwand, die installierte Software aktuell zu halten und vor allem aktuelle Sicherheitsupdates schnell einzuspielen.
Da insbesondere Web-Applikationen für Sicherheitslücken wie SQL Injections prädestiniert sind, ist es unabdingbar, auftretende Sicherheitslöcher schnellstmöglich durch Softwareupdates zu stopfen.
Dieses kleine HOWTO zeigt eine einfache Konfiguration einer WordPress-Applikation auf einem Debian-Host, wenn lighttpd als Webserver eingesetzt wird.
Voraussetzungen
Ich gehe von folgender Konfiguration aus:
- Debian Lenny mit aktivierten testing-Quellen (die Anleitung sollte auch mit den stable-Quellen funktionieren, dann steht jedoch zum Zeitpunkt der Redaktion dieses Artikels “nur” WordPress 2.5.1 zur Verfügung).
- Eine funktionierende lighttpd-Installation mit mod_rewrite mit PHP 5 (z.B. über mod_fastcgi)
- Ein lauffähiger MySQL-Server
Falls diese Voraussetzungen nicht gegeben sind, befindet sich unter dem folgenden Link ein HOWTO, wie sie dies unter Debian Lenny erreichen können: PHP5 und MySQL in Lighttpd unter Debian 5.0
Im folgenden wird davon ausgegangen, dass ein Blog für die Domain blog.example.com erstellt wird und dass das Wurzelverzeichnis des Blogs in /var/www/blog.example.com liegen soll. Selbstverständlich müssen diese Angaben für jede Installation angepasst werden.
WordPress installieren
apt-get install -t testing wordpress
Ein “dpkg -L” verrät, dass sich WordPress nach /usr/share/wordpress und /etc/wordpress installiert hat. Dabei enthält /usr/share/wordpress den PHP-Code und /etc/wordpress die Konfigurationsdatei bzw. die Konfigurationsdateien, falls mehrere Blogs installiert werden sollen.
Nun erstellen wir einen symbolischen Link nach /usr/share/wordpress an dem Ort, wo später das Wurzelverzeichnis unseres Blogs liegen soll, wie folgt:
ln -s /usr/share/wordpress /var/www/blog.example.com
WordPress konfigurieren
Die Debian’sche WordPress-Konfiguration unterscheidet sich geringfügig von der normalen WordPress Konfiguration. Da Sie wie oben schon angetönt für die Installation mehrerer Blogs gedacht ist, sucht WordPress anhand des Domainnamens in /etc/wordpress nach einer passenden Konfigurationsdatei für den aufgerufenen Blog. Im Klartext heisst das, die Konfigurationsdatei für unser Beispiel muss in /etc/wordpress/config-blog.example.com.php abgespeichert werden.
Über die WordPress-spezifische Konfiguration für Datenbank, Sprache etc. soll an dieser Stelle nicht genauer eingegangen werden. Eine gute Übersicht ist unter dem folgenden Link zu finden: WordPress Konfiguration
Eine Beispielkonfiguration könnte wie folgt aussehen (die SALTs und KEYs müssen unbedingt vor einer Installation angepasst werden, ansonsten wird die Sicherheit beeinträchtigt!):
<?php
/** The name of the database for WordPress */
define('DB_NAME', 'exampleblog');
/** MySQL database username */
define('DB_USER', 'exampleblog');
/** MySQL database password */
define('DB_PASSWORD', 'neHkpkEu3LpF');
/** MySQL hostname */
define('DB_HOST', 'localhost');
/** Database Charset to use in creating database tables. */
define('DB_CHARSET', 'utf8');
/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', '');
/**#@+
* Authentication Unique Keys and Salts.
*
* Change these to different unique phrases!
* You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}
* You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again.
*
* @since 2.6.0
*/
define('AUTH_KEY', 'GVxU?`)aD]G4fPePb9JNa[IPo{Rj5l9C +g~z|(-7:rgBtwvO?`4~(4wS8QhSfdG');
define('SECURE_AUTH_KEY', '#`GWGET(+2CausH>}W(V*2j;,DddjFKLtCm>#wmkal|3r@57~1feSVJ`s8*U}+.W');
define('LOGGED_IN_KEY', '2jOLmK3;svT8j!lt?Ohe)|ZJq[R[[h9T9wW<!gNA?@QqNfaH&|{XsJn$Rh<x>Tkg');
define('NONCE_KEY', 'bi+$JxRDEF]}kg$el{$+d^Yip6:26e](dxD?AKMHep}3++|KQlub-bTL*{qN#wFS');
define('AUTH_SALT', '6R,.?^|5)(.9J +EGQ}V*M.CkuNb.&J2-OT]5hK#M,]c%E=$<UuJ{^z.p;xj-mKC');
define('SECURE_AUTH_SALT', '6<BHa,bEmZAcHAa1_~p0$wzeTT{t#~9PF3|5,{<<o|>S?7|}/F1|^GG(z{H~%+uC');
define('LOGGED_IN_SALT', 'A?2Z9^&42W6%l.ZKuG&/[=xJAp$@Q[</]-N|8|wr$[sai-AFi6EbAy=8zC_j<1Ru');
define('NONCE_SALT', '4;5O%~WP7nHbIA21-tg+Rwr-BGB!$c2mY]!+8WzBKz|HY[!1||-vLK)bi059%T06');
/**
* WordPress Database Table prefix.*/
$table_prefix = 'wp_';
/**
* WordPress Localized Language, defaults to English.
*/
define ('WPLANG', 'de_DE');
/**
* For developers: WordPress debugging mode.
*/
define('WP_DEBUG', false);
?>
Last but not least: lighttpd und rewrite-rules konfigurieren
Bisher haben wir ein installiertes und konfiguriertes WordPress, das jedoch noch nicht übers Web erreichbar ist. Um letzteren Umstand zu beheben muss noch eine Konfigurationsdatei für lighttpd erstellt werden. Dazu erstellen wir die Datei /etc/lighttpd/conf-enabled/blog.example.com.conf und füllen sie mit dem folgenden Inhalt:
$HTTP["host"] == "blog.example.com" {
server.document-root = "/var/www/blog.example.com"
url.rewrite-once = (
"^/(xmlrpc\.php|robots\.txt|index\.php|sitemap\.xml|wp-.*)" => "$0",
"^/(.*)$" => "/index.php/$1"
)
}
Besondere Aufmerksamkeit ist hier den rewrite-rules zu schenken. Diese sorgen dafür, dass die Permalinks schön aussehen dürfen und weitere wichtige Dateien wie xmlrpc.php oder robots.txt etc. trotzdem erreichbar bleiben.
Mit einem
/etc/init.d/lighttpd restart
wird lighttpd neu gestartet und der Blog ist nun unter blog.example.com erreichbar.
Fazit
Wir verfügen nun über eine WordPress-Installation, welche einfach durch weitere Blogs zu erweitern ist (einfach die letzten beiden Kapitel für jeden weiteren Blog wiederholen) und einfach über
apt-get update && apt-get upgrade
aktualisiert wird, sofern Aktualisierungen verfügbar sind. Komfortabel, oder nicht?