Anleitung: OS X 10.6 Snow Leopard, Lighttpd, PHP 5.2 und MySQL Server

Montag, 26. Oktober 2009 |  Autor:

snowleopardSnow Leopard wird “out-of-the-box” mit Apache2, PHP 5.3 und in der Client Version ohne MySQL ausgeliefert.
Benötigt man aus Kompatibilitätsgründen PHP 5.2 oder MySQL oder gar einen anderen WebServer als Apache, muß man selber Hand anlegen. Ich beschreibe hier die Installation und Konfiguration eines Lighttpd 1.4 Servers, die parallele Installation von PHP 5.2 und die Installation der MySQL Datenbank 5.1.4 .
Nebenbei installieren und verwenden wir macports. Die Anleitung ist so gehalten, daß die einzelnen Komponenten größtensteils auch selbstständig ohne die Übrigen installiert werden können.
Aber der Reihe nach.

1. Installation der Basics
Ich “baue” mir die Server mit Hilfe von MacPorts selber. MacPorts benötigt dafür ein installiertes XCode, das in meinem Fall direkt von der Installations CD des Schneeleoparden kommt. Sollte die gerade nicht zu Hand sein, kann man sich die aktuelle Version auch hier http://developer.apple.com/ runterladen.
Anschliessend lade ich mir bei http://www.macports.org/ die aktuelle Version von MacPorts herunter und installiere das ebenso. Maus Schubser unter uns laden und installieren sich die grafische Oberfläche Porticus .
Damit ich eine aktuelle Version des Macports-Baums erhalte aktualisieren ich Macports.

sudo port -d selfupdate

2. Installation MySQL Server 5.1.40
Die Installation des MySQL Servers ist mit Macports keine Raketenwissenschaft.
Entweder mit Porticus oder im Terminal starte ich das Kommando:

sudo port install mysql5-server-devel

Gefüllte 30 Minuten später ist die Datenbanksoftware installiert und kann genutzt werden.
Allerdings sind hier noch ein paar Konfigurationsschritte nötig.
Die wesentlichen Dateien werden von Macports unter
/opt/local/share/mysql5/mysql abgelegt.
Mit dem Terminal initialisiere ich die Datenbank

sudo /opt/local/lib/mysql5/bin/mysql_install_db --user=mysql

Ich benutze hier ausdrücklich kein Passwort bei der Installation, zur Absicherung des DB Servers möge jeder die einschlägigen Ratschläge bei mysql.com nachsehen.
Soll der MySQL Server automatisch beim Systemstart gestartet werden, dann das Kommando

sudo launchctl load -w /Library/LaunchDaemons/org.macports.mysql5.plist>

eingeben.
Nun kann ich mit dem Kommando

sudo /opt/local/share/mysql5/mysql/mysql.server start

den Server starten.
Damit ich, wie gewohnt die MySQL Konsole erreiche lege ich mir noch einen symbolischen Links an.

cd /usr/local
sudo ln -s /opt/local/share/mysql5/mysql/ mysql
cd /usr/local/bin
sudo ln -s /opt/local/bin/mysql5 mysql

Falls die Verzeichnisse /usr/local und /usr/local/bin nicht vorhanden sind können diese mit

cd /usr/
sudo mkdir local
sudo mkdir local/bin

angelegt werden.
Damit hätte ich den Datenbankserver am laufen.

3. Installation Lighttpd 1.4
Wie bei der Datennbank erledigt Macports hier die Hauptarbeit für mich.
Über Porticus oder Terminal installieren ich den “Lighty”.

sudo port install lighttpd +mysql5 +ssl

Wie man unschwer erkennen kann füge ich die SSL und mysql5 Unterstützung bei.
Nach ein paar Minuten ist auch dies erledigt, will man den “Lighty” beim Systemstart automatisch gestartet bekommen führt man

sudo launchctl load -w /Library/LaunchDaemons/org.macports.lighttpd.plist

aus .
Zur Konfiguration komme ich noch gleich, erst installieren ich mir PHP5.2 .

4. Installation PHP 5.2
Dankenswerterweise kommt der Port von PHP 5.2 bereits mit fast allen benötigten Modulen (incl. SOAP).
Ich füge der Kollektion nur noch fastcgi, mysql5 und readline hinzu. Den Rest erledigt wie immer Macports für mich.

sudo port install php52 +fastcgi +mysql5 +readline

Nach einer guten halben Stunde ist PHP 5.2 installiert und ich kann zur Konfiguration des “Lighty” schreiten.

5. Konfiguration Lighttpd und PHP 5.2
zur Konfiguration von PHP gibts es ganze Bücher, ich lasse erstmal alles auf Standard und ändere nur eine Zeile, die den PATH_INFO Fix aktiviert.

cd /opt/local/etc/php5
sudo cp php.ini-recommended php.ini
sudo nano php.ini

hier suche ich die Zeile mit dem Inhalt

; cgi.fix_pathinfo=1

und entferne das Semicolon am Anfang. Zu Beginn möchte ich, dass mein “Lighty” auf localhost (127.0.0.1) und Port 8080 lauscht.
Die Änderungen in der Standard Konfiguration des “Lighty” sehen dann so aus.

cd /opt/local/etc/lighttpd
sudo nano lighttpd.conf

 
server.modules              = (
...
                                 "mod_fastcgi",
...
 
server.port                = 8080
server.bind                = "127.0.0.1"
server.username            = "_www"
server.groupname           = "_www"
...
fastcgi.server             = ( ".php" =>
                               ( "localhost" =>
                                 (
                                   "socket" => "/opt/local/var/run/lighttpd/php-fastcgi.socket",
                                   "bin-path" => "/opt/local/bin/php-cgi",
                                   "broken-scriptfilename" => "enable",
                                   "allow-x-send-file" => "enable",
                                   "min-procs" => 2,
                                   "max-procs" => 2,
                                   "bin-environment" => (
                                   "PHP_FCGI_CHILDREN" => "4",
                                   "PHP_FCGI_MAX_REQUESTS" => "100"
                                   )
                                 )
                               )
                            )

Über die Parameter server.bind und server.port stelle ich den “Lighty” auf den gewünschte Adresse und Port ein. Die Parameter server.username und server.groupname stellen den Benutzer und die Gruppe ein mit der “Lighty” ausgeführt wird.
Die PHP Einbindung über fastcgi erfordet ein paar Parameter mehr.
Zu den Standardparametern nehme ich hinzu:

  • broken-scriptfilename damit PATH_INFO ermittelt wird
  • allow-x-send-file damit das senden von großen Files der “Lighty” selbständig besorgt
  • “min-procs”/”max-procs” damit will ich nur 2 fastcgi Prozesse vom “Ligthy” gestartet bekommen.
  • “PHP_FCGI_CHILDREN” => “4″ damit jeder der oben genannten Prozesse 4 Kinderprozesse öffnet um die Requests zu befriedigen.
  • “PHP_FCGI_MAX_REQUESTS” => “100″ damit bei hundert Request ist Schluß

Die Parameter oben sind alle optional, ohne diese sollte der Standard aber auch gut laufen.
Kurz noch prüfen ob die Konfiguration syntaktisch passt

lighttpd -t -f /opt/local/etc/lighttpd/lighttpd.conf
Syntax OK

Damit der “Lighty” noch fehlerfrei startet muß ich ein paar Verzeichnisrechte setzen

cd /opt/local/var/
sudo chown _www:_www lighttpd/
cd /opt/local/var/run/
sudo chown _www:_www lighttpd

Nun kann ich den “Lighty” starten

sudo lighttpd -D -f /opt/local/etc/lighttpd/lighttpd.conf
tail -f /opt/local/var/log/lighttpd/error.log
2009-10-25 13:00:56: (log.c.172) server started

und der “Lighty” läuft.
Für einen ersten Test erstelle ich mir die Datei index.php im Verzeichnis /opt/local/www/htdocs/
mit dem Inhalt

<?php
phpinfo();
?>

und sehe mir den Inhalt unter http://localhost:8080 an.

phpinfo

Habe fertig.

Tags »   , , , , «

Trackback: Trackback-URL | Feed zum Beitrag: RSS 2.0
Thema: Anleitung, OSX, Tipps

Diesen Beitrag kommentieren.

7 Kommentare

  1. 1
    Poke 

    Cool, danke

  2. 2
    Lelo 

    Bei mir scheitert die Intallation von PHP offensichtlich:

    —> Installing apr @1.3.9_0
    Error: Target org.macports.install returned: MacPorts requires root privileges for this action
    Error: The following dependencies failed to build: apache2 apr apr-util db46 expat libiconv gperf mysql5 openssl zlib readline ncurses ncursesw sqlite3 pcre bzip2 autoconf213 gawk gettext m4 perl5 perl5.8 curl pkgconfig freetype gsed jpeg libmcrypt libpng libtool automake autoconf help2man p5-locale-gettext libxml2 libxslt mhash tiff
    Error: Status 1 encountered during processing.

    Zumindest existiert unter /opt/local/etc danach kein Verzeichnis “php5″

  3. Hallo Lelo,

    hast Du auch das sudo verwendet ?
    Offenbar hast Du keine Rechte für die Installation:
    @1.3.9_0 Error: Target org.macports.install returned: MacPorts requires root privileges for

    Die Rechte bekommst Du entwender über
    sudo bash (und der Eingabe Deines Passworts), danach bist Du der root-User
    oder Du setzt das sudo immer vor den port Befehl, also:
    sudo port install php5
    Dort wirst Du bis zum Timeout wieder nach DEINEM Passwort gefragt.

    Grüße
    David

  4. 4
    Lelo 

    Alles klar, danke! Jetzt scheint’s zu klappen

  5. 5
    Hardy 

    Servus,

    tolle Anleitung, hakt aber noch an einer Stelle bei mir: der Test mit der index.php bringt mir einen 403. Hab schon mit unterschiedlichen Rechten herumexperimentiert (zuletzt _www:_www), hat aber nix daran geändert.

    Was nu?

    Grüssle,
    Hardy

  6. Hallo Hardy,

    danke, was steht denn in dem Lighty Logs (/opt/local/var/log/litghttpd) ?

    Grüße
    David

  7. Danke Hardy,

    hab vergessen, dass unter server.modules das mod_fastcgi einkommentiert werden muß, wenn man php Dateien verabeiten will. Die übliche Fehlermeldung wenn man das vergisst ist der 403 Error.

    cu
    David

Kommentar abgeben