Installation von Lighttpd mit PHP5 und MySQL Support auf OpenSUSE 10.3

Version 1.0
Author: Falko Timme


Lighttpd ist ein sicherer, schneller und standardisierter Web Server, der für geschwindigkeitskritische Umgebungen entwickelt wurde. Diese Anleitung veranschaulicht, wie man Lighttpd auf einem OpenSUSE 10.3 Server mit PHP5 Unterstützung (durch FastCGI) und MySQL Unterstützung installieren kann.

Ich übernehme keine Garantie, dass dies auch bei Dir funktioniert!

1 Vorbemerkung

In dieser Anleitung verwende ich den Host Namen server1.example.com mit der IP Adresse 192.168.0.100. Diese Einstellung kann bei Dir anders sein, ersetze sie an den gegebenen Stellen.

2 Installation von MySQL 5.0

Zuerst installieren wir MySQL 5.0 wie folgt:

yast2 -i mysql mysql-client

Dann erstellen wir die System Startup Links für MySQL (sodass MySQL automatisch startet wenn das System hochfährt) und starten den MySQL Server:

chkconfig --add mysql
/etc/init.d/mysql start

Überprüfe nun ob die Vernetzung aktiviert ist. Lass Folgendes laufen

netstat -tap | grep mysql

In der Ausgabe solltest Du in etwa Folgendes vorfinden:

server1:~ # netstat -tap | grep mysql
tcp 0 0 *:mysql *:* LISTEN 8566/mysqld
server1:~ #

Wenn Du so eine Zeile nicht siehst, bearbeite /etc/my.cnf, kommentiere die Option skip-networking aus:

vi /etc/my.cnf

[...]
#skip-networking [...]
und starte Deinen MySQL Server neu:

/etc/init.d/mysql restart

Lass dies laufen

mysqladmin -u root password yourrootsqlpassword

um ein Passwort für den Benutzer anzulegen root@localhost.

Wie Du in der netstat Ausgabe gesehen hast, hört MySQL nicht nur auf lokalen Hosts sondern auch auf allen anderen Schnittstellen, was bedeutet, dass von Außen darauf zugegriffen werden kann. Daher müssen wir auch ein Passwort für den Nutzer root@server1.example.com anlegen. Es gibt nur ein kleines Problem: Mit hoher Wahrscheinlichkeit enthält die Host Spalte in der mysql.user Tabelle nicht server1.example.com sondern server1. Wir werden das jetzt ändern. Danach werden wir ein MySQL Passwort für den Benutzer anlegen root@server1.example.com.

Wir verknüpfen uns jetzt mit MySQL:

mysql -u root -p

Gib das Passwort für den MySQL root Benutzer ein. Führe dann in der MySQL Kommandozeile Folgendes aus:

mysql> USE mysql;

mysql> SELECT * FROM user;

Die Ausgabe könnte so aussehen:
+-----------+------+-------------------------------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+
| Host | User | Password | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | Create_view_priv | Show_view_priv | Create_routine_priv | Alter_routine_priv | Create_user_priv | ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions | max_updates | max_connections | max_user_connections | +-----------+------+-------------------------------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+ | localhost | root | *5172022923C5A97E5A842DA249B93473314416D5 | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | | | | | 0 | 0 | 0 | 0 | | server1 | root | | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | | | | | 0 | 0 | 0 | 0 | | 127.0.0.1 | root | | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | | | | | 0 | 0 | 0 | 0 | +-----------+------+-------------------------------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+ 3 rows in set (0.00 sec)
Wie Du siehst, heißt es in der zweiten Zeile server1 an Stelle von server1.example.com in der Host Spalte. Wir ersetzen das mit server1.example.com:

mysql> UPDATE user SET Host = 'server1.example.com' WHERE Host = 'server1';

mysql> FLUSH PRIVILEGES;

Wir können die MySQL Kommandozeile jetzt verlassen:

mysql> quit;

Zurück in der normalen Kommandozeile. Nun können wir das MySQL Passwort für den Nutzer root@server1.example.com anlegen:

mysqladmin -h server1.example.com -u root password yourrootsqlpassword


3 Installation von Lighttpd

Lighttpd ist als OpenSUSE Paket verfügbar. Daher können wir es wie folgt installieren:

yast2 -i lighttpd

Dann erstellen wir die System Startup Links für Lighttpd (sodass Lighttpd automatisch startet wenn das System hochfährt) und starten es:

chkconfig --add lighttpd
/etc/init.d/lighttpd start

Richte Deinen Browser auf http://192.168.0.100 aus und Lighttpd gibt eine Seite an (nun ja, es ist eine 404 Seite, da es keine Index-Datei für Lighttpd's Document Root gibt, aber zumindest heißt das, dass Lighttpd gut funktioniert):


Lighttpd's Standard Document Root ist /srv/www/htdocs auf OpenSUSE, die Konfigurationsdatei ist /etc/lighttpd/lighttpd.conf.

4 Installation von PHP5

Wir könnnen PHP5 in Lighttpd durch FastCGI wirksam werden lassen. Ein FastCGI Paket für PHP5 ist auf OpenSUSE verfügbar, php5-fastcgi, welches wir wie folgt installieren:

yast2 -i php5-fastcgi


5 Konfiguration von Lighttpd und PHP5

Um PHP5 in Lighttpd zu aktivieren, müssen wir drei Dateien bearbeiten /etc/php5/fastcgi/php.ini, /etc/lighttpd/modules.conf, und /etc/lighttpd/conf.d/fastcgi.conf. Zunächst öffnen wir /etc/php5/fastcgi/php.ini und aktivieren die Zeile cgi.fix_pathinfo=1 irgendwo in der Mitte der Datei:

vi /etc/php5/fastcgi/php.ini

[...]
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's ; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok ; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting ; this to 1 will cause PHP CGI to fix it's paths to conform to the spec. A setting ; of zero causes PHP to behave as before. Default is 1. You should fix your scripts ; to use SCRIPT_FILENAME rather than PATH_TRANSLATED. cgi.fix_pathinfo=1 [...]
Dann öffnen wir /etc/lighttpd/modules.conf und aktivieren die Zeile include "conf.d/fastcgi.conf":

vi /etc/lighttpd/modules.conf

[...]
## ## FastCGI (mod_fastcgi) ## include "conf.d/fastcgi.conf" [...]
Letztlich öffnen wir /etc/lighttpd/conf.d/fastcgi.conf und vergewissern uns, dass es die Zeile server.modules += ( "mod_fastcgi" ) enthält; dann kommentieren wir die Zeile fastcgi.server aus:

vi /etc/lighttpd/conf.d/fastcgi.conf

[...]
server.modules += ( "mod_fastcgi" ) [...] ## PHP Example ## For PHP don't forget to set cgi.fix_pathinfo = 1 in the php.ini. ## ## The number of php processes you will get can be easily calculated: ## ## num-procs = max-procs * ( 1 + PHP_FCGI_CHILDREN ) ## ## for the php-num-procs example it means you will get 17*5 = 85 php ## processes. you always should need this high number for your very ## busy sites. And if you have a lot of RAM. :) ## fastcgi.server = ( ".php" => ( "php-local" => ( "socket" => socket_dir + "/php-fastcgi-1.socket", "bin-path" => server_root + "/cgi-bin/php5", "max-procs" => 1, "broken-scriptfilename" => "enable", ) ), ( "php-tcp" => ( "host" => "127.0.0.1", "port" => 9999, "check-local" => "disable", "broken-scriptfilename" => "enable", ) ), ( "php-num-procs" => ( "socket" => socket_dir + "/php-fastcgi-2.socket", "bin-path" => server_root + "/cgi-bin/php5", "bin-environment" => ( "PHP_FCGI_CHILDREN" => "16", "PHP_FCGI_MAX_REQUESTS" => "10000", ), "max-procs" => 5, "broken-scriptfilename" => "enable", ) ), ) [...]
Dann starten wir Lighttpd neu:

/etc/init.d/lighttpd restart


6 Testen von PHP5 / Einzelheiten über Deine PHP5 Installation in Erfahrung bringen

Der Document Root der Standard Website ist /srv/www/htdocs. Wir werden jetzt eine kleine PHP Datei (info.php) in diesem Verzeichnis erstellen und sie in einem Browser abrufen. Die Datei wird viele nützliche Informationen über die PHP Installation anzeigen wie zum Beispiel die installierte PHP Version.

vi /srv/www/htdocs/info.php

<?php
phpinfo(); ?>
Nun rufen wir die Datei in einem Browser ab (z.B. http://192.168.0.100/info.php):


Wie Du siehst, funktioniert PHP5. Es läuft über FastCGI, wie man in der Server API Zeile sehen kann. Wenn Du weiter nach unten scrollst, siehst Du alle Module, die bereits in PHP5 aktiviert sind. MySQL ist dort nicht aufgelistet, was bedeutet, dass wir noch keine PHP5 Unterstützung haben.

7 MySQL Unterstützung in PHP5 beziehen

Um eine MySQL Unterstützung in PHP zu beziehen, können wir das Paket php5-mysql installieren. Es ist ganz gut noch andere PHP5 Module zu installieren, da Du diese für Deine Programme gebrauchen könntest:

yast2 -i php5-mysql php5-bcmath php5-bz2 php5-calendar php5-ctype php5-curl php5-dbase php5-dom php5-ftp php5-gd php5-gettext php5-gmp php5-iconv php5-imap php5-ldap php5-mbstring php5-mcrypt php5-mhash php5-ncurses php5-odbc php5-openssl php5-pcntl php5-pgsql php5-posix php5-shmop php5-snmp php5-soap php5-sockets php5-sqlite php5-sysvsem php5-tokenizer php5-wddx php5-xmlrpc php5-xsl php5-zlib php5-exif php5-pear php5-sysvmsg php5-sysvshm

Starte Lighttpd neu:

/etc/init.d/lighttpd restart

Lade nun http://192.168.0.100/info.php erneut in Deinen Browser und scrolle runter in die Modulsektion. Du solltest dort viele neue Module finden, das MySQL Modul eingeschlossen:

8 Links