PHP und MySQL machen einen einfachen Webserver bereits für sehr viele Webanwendungen fit, wie z.B. Forensoftware (PhpBB, MyBB), Blogsoftware (WordPress), die OwnCloud Software oder RSS-Reader (TinyTinyRSS). Aufbauend auf meiner Anleitung zur Installation des Apache Webservers und der Konfiguration der VirtualHosts wird hier gezeigt wie PHP und MySQL installiert und mit Apache verbunden werden.
PHP Installieren
PHP ist eine einfach zu erlernende Scriptsprache, die vor allem für den Einsatz im Web konzipiert wurde. Damit Apache PHP Code interpretieren und ausführen kann, muss PHP inklusive des Apache PHP-Moduls installiert werden. Das geschieht über folgende Befehle:
sudo -s apt-get update && apt-get install php5 libapache2-mod-php5
Das war’s auch schon! :)
Während der Installation wurde Apache neu gestartet und das PHP-Modul aktiviert. Um zu testen, ob die Installation erfolgreich war, kann in das Wurzelverzeichnis des Standard-VirtualHosts eine Datei „index.php” statt „index.html” gelegt werden. Diese wird dann mit folgendem PHP-Befehl gefüllt:
<?php phpinfo(); ?>
Wenn ihr jetzt nochmal via Webbrowser die IP des Servers / die Domain eures VirtualHosts aufruft, solltet ihr die aktuellen PHP-Einstellungen angezeigt bekommen. Falls ihr nur den PHP-Code angezeigt bekommt, hat die Installation nicht Funktioniert. In diesem Fall lohnt es sich, den Webserver noch einmal neu zu starten:
service apache2 restart
Beachtet, dass standardmäßig nur .php Dateien vom Webserver als PHP interpretiert werden – deshalb musste die Index-Datei in index.php umbenannt werden bzw eine solche angelegt werden.
Verzeichnisrechte korrekt setzen
Das hat zwar mit der PHP-Installation an sich wenig zu tun, dennoch will ich euch hier einen kurzen Tipp geben: Wenn ihr Software wie z.B. WordPress installiert, kann es sein, dass Fehlermeldungen wie „Kein Schreibzugriff” erscheinen. Das kommt daher, dass der Webserver keinen Schreibzugriff auf Ordner hat, die ihr über den Benutzer root oder andere Benutzer erstellt habt. Euer Verzeichnis /var/www/wordpress hat dann noch root als Eigentümer, sodass der Webserver zwar in diesem Verzeichnis Dateien lesen kann, aber keine neuen anlegen kann, wenn ein PHP Script im das befiehlt. Um das zu ändern werden für jedes Verzeichnis / jede Datei, auf die der Webserver Schreibzugriff haben soll, die Rechte neu gesetzt und der Webserver (ausführend über Nutzer „www-data”) zum Eigentümer gemacht. Z.B.:
chown -R www-data:www-data /var/www/software/config
… und schon funktioniert der Schreibzugriff wieder :)
MySQL Server installieren
Einige Webanwendungen benötigen Zugriff auf eine MySQL Datenbank und damit einen MySQL Server. Der Server kann z.B via PHP angesprochen werden und dann Nutzerdaten o.Ä. entgegennehmen und abspeichern. Der MySQL Server an sich (der nicht nur vom Webserver mit PHP genutzt werden kann, sondern auch von anderer Software) wird über den folgenden Befehl installiert:
apt-get install mysql-server
Während der Installation muss für den MySQL User „root” ein Passwort vergeben werden. Der root-User hat vollen Zugriff auf alle Datenbanken des Servers und dient der Administration, also z.B. dem erstellen von weiteren MySQL Benutzern oder Datenbanken. Er ist nicht zu verwechseln mit dem Systemnutzer „root”!
Nach der Installation wird der MySQL Server gestartet.
Bevor dieser jedoch von PHP genutzt werden kann, muss das MySQL-PHP-Modul installiert werden. Es bildet die Schnittstelle zwischen PHP und dem MySQL Server:
apt-get install php5-mysql service apache2 restart
Eine erste MySQL Datenbank + Benutzer einrichten
Über eine spezielle MySQL Kommendozeile können MySQL Befehle ausgeführt werden. Auf diese Weise kann manuell in den Server eingegriffen werden und wir sind in der Lage, einen neuen Datenbankbenutzer mit zugehöriger Datenbank zu erstellen. Für jede Datenbank bzw. jeden Dienst, der eine Datenbank benötigt, sollte ein extra Benutzer erstellt werden, der nur auf diese eine Datenbank Zugriff hat. Wird ein Service gehackt und MySQL Zugangsdaten wurden kopiert, ist nur eine Datenbank von dem Sicherheitsproblem betroffen, und nicht der ganze MySQL Server.
Zuerst loggen wir uns als root in die Kommandozeile ein:
mysql -u root -p
Eine neue Datenbank „forum” erstellen:
create database forum;
Einen neuen Benutzer „forumuser” mit „forumpasswort” anlegen, der vollen Zugriff auf die forum-Datenbank hat:
grant all on forum.* to 'forumuser'@'localhost' identified by 'forumpasswort';
Danach kann die MySQL Kommendozeile durch die Eingabe von „exit” verlassen werden.