senäh

17senäh und so…

Coding-Logo

PHP, Server & Config
19. Okt 2011
Kommentare: 72

Lokaler Webserver ohne MAMP, XAMPP & Co unter Mac OS X Lion und Mountain Lion

Kategorien: PHP, Server & Config | 19. Okt 2011 | Kommentare: 72

Nachdem ihr vor kurzem die erste Mission des Auftrags „Weg-von-den-All-in-One-Solutions“ erfolgreich abgeschlossen habt, indem ihr euch einen lokalen Mailserver eingerichtet habt, geht es nun weiter. Diesmal wollen wir ohne die bekannten Hilfsmittel wie MAMP oder XAMPP einen lokalen Webserver zum Laufen bringen.

Warum ein richtiger lokaler Webserver? MAMP is doch cool!

Für das schnelle Einrichten und Testen reichen die Komplettlösungen, die in einem Rutsch PHP, MySQL und einen Apache Webserver installieren. Das Einrichten geht schnell von der Hand, vielleicht 10 Minuten und man ist am Ziel. Vor allem benötigt man keine tieferen Kenntnisse über die Funktionsweise der eingesetzten Komponenten. Und man braucht sich auch nicht mit dem gruseligen Terminal beschäftigen 😉

Möchte man jedoch mal etwas spezielles konfigurieren oder einfach ein wenig experimentieren, stößt man schnell an Grenzen. Zwar funktionieren vorgefertigte Lösungen out of the box, allerdings sind sie nicht für tiefere Einschnitte gebaut. Früher oder später kommt der Moment: „Aaaaaaach hättste, hättste, hättste…“.

Da irgendwann mein persönlicher Programmierer-Stolz von mir verlangte, den MAMP gefälligst runterzuschmeißen und gegen eine „native“ Kombination aus Apache, PHP und MySQL zu tauschen, hatte ich Mut gefasst ;). Meine daraufhin gemachten Erfahrungen möchte ich hier gern mit euch teilen.

Zuerst: Apache installieren… NICHT!

Das schöne an Mac OS: der Apache kommt gleich mitgeliefert. Auch über das grafische Interface dazu seid ihr vielleicht schonmal gestolpert. Um den Apache zu aktivieren, geht einfach in die Systemeinstellungen und wählt den Punkt Freigaben aus. Jetzt nur noch die Checkbox unter Webfreigabe aktivieren und schon läuft euer Apache.

Aktivieren des Apache in den Freigaben

Aktivieren des Apache in den Freigaben

Ob das soweit erfolgreich war, könnt ihr mit einem Aufruf der URL http://localhost/ testen. Ein großes „It Works“ sollte erscheinen.

UPDATE: Apple hat mit Mountain Lion das Webfreigabe-Panel entfernt. D.h. ihr müsst ins Terminal und euch folgende 3 Befehle einprägen:

  1. sudo apachectl start (startet Apache)
  2. sudo apachectl stop (stoppt Apache)
  3. sudo apachectl restart (startet Apache neu)

Kurze Anmerkung dazu: der letzte Buchstabe in apachectl ist ein klein geschriebenes L, keine 1 😉

Wer nicht auf Terminal steht, kann mal hier und hier schauen für eine alternative Lösung.

Webseiten-Root setzen

Der nächste Schritt ist optional und davon abhängig, wo ihr eure Websites nachher ablegen möchtet. Ich habe diese gern im Ordner Webseiten, der in meinem Benutzerordner liegt. Um dem Apache mitzuteilen, wo er die Webseiten zu suchen hat, müssen wir ihm das in der sogenannten httpd.conf mitteilen. Dabei handelt es sich um eine Systemdatei. Für den Zugriff darauf müsst ihr sicherstellen, dass ihr unsichtbare Dateien sehen könnt. Entweder ihr benutzt den PathFinder und navigiert zu Darstellung → Unsichtbare Dateien anzeigen oder ihr besorgt euch ein kleines Programm wie InVisibles.

Also, bitte die Datei /private/etc/apache2/httpd.conf öffnen und per ⌘+F im Texteditor der Wahl die Zeile suchen, in der folgendes steht:

DocumentRoot "Library/WebServer/Documents"

Dort ersetzt ihr nun den Ordnerpfad. In meinem Fall ist das DocumentRoot "Users/Enno/Sites". Weiter unten findet ihr einen ähnlichen Block (sucht am besten nach <Directory), in dem ihr die Grundkonfiguration für euren Root-Ordner festlegt. Sollte am Ende ungefähr so aussehen (natürlich euer eigenes Website-Root einsetzen, so wie oben auch):

<Directory "/Users/Enno/Sites">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    Allow from all
    SetEnv APPLICATION_ENV development
</Directory>

Könnte euch an die Einrichtung eines vhosts erinnern. Änderungen werden immer erst beim nächsten Neustart des Apache wirksam. Also ggf. einfach nochmal in den Freigaben-Einstellungen die Webfreigabe deaktivieren und erneut aktivieren.

UPDATE: Yosemite-Nutzer müssen noch eine weitere Direktive anpassen. Schaut dazu in die Kommentare.

Next up: MySQL

Nachdem wir jetzt einen Apache-Server laufen haben, laden wir uns mal die aktuelle Version von MySQL runter (als DMG im 64-bit Format!). Notiz dazu: auch wenn ihr den Installer für Mac OS 10.6 ladet – es wird trotzdem mit Lion funktionieren.

Nachdem der Download abgeschlossen ist, einfach das DMG-Image (nicht das compressed tar archive) wie gewohnt doppelklicken und den gemounteten Paketinhalt begutachten. Dort bitte die Datei mysql-5.5.15-osx10.6-x86_64.pkg (oder so ähnlich) öffnen. MySQL wird nun auf eurem System installiert.

Solltet ihr MySQL als Prozess starten wollen, sobald euer System startet, könnt ihr nach erfolgreicher Installation noch die Datei MySQLStartupItem.pkg öffnen. Das empfiehlt sich dahingehend, um Sachen wie „Deswegen habe ich jetzt anderthalb Stunden an dieser Fehlermeldung gesessen?!?!“ zu vermeiden 😉

Zu guter letzt müsst ihr noch das MySQL.prefPane doppelklicken. Schon habt ihr eure eigene MySQL-Sektion in den Systemeinstellungen.

UPDATE: Für eine kleine Ergänzung dazu mit Hinweisen zu MySQL, schaut mal in die Kommentare 😉

PHP

Auch die PHP-Binaries kommen bei Mac OS schon mit. Allerdings müsst ihr hier noch die php.ini anpassen bzw. überhaupt erstmal eine erstellen. Dazu die Datei /private/etc/php.ini.default suchen, duplizieren und den .default-Zusatz entfernen. Dann die Datei öffnen (wir müssen noch ein paar Sachen anpassen). Als erstes müssen wir den Ort der default-sockets anpassen. Dazu müssen wir jedes Vorkommen von /var/mysql/mysql.sock durch /tmp/mysql.sock ersetzen. Sollte in diesen drei Zeilen nötig sein:

pdo_mysql.default_socket = /tmp/mysql.sock
mysql.default_socket = /tmp/mysql.sock
mysqli.default_socket = /tmp/mysql.sock

Außerdem müssen wir die MySQL-Biliothek aktivieren. Dazu vor den folgenden Zeilen das eventuell vorhandene Semikolon („;“) entfernen:

extension=php_mysql.dll
extension=php_mysqli.dll
extension=php_pdo_mysql.dll

Dadurch werden diese Zeilen entkommentiert, d.h. aktiviert. Außerdem sollten wir noch die für die Fehlerausgabe verantwortlichen Werte aktivieren.

display_errors = On
display_startup_errors = On

UPDATE: Gelegentlich scheint außerdem das PHP-Modul standardmäßig deaktiviert zu sein. Ich zitiere mal meinen Kommentar dazu: „Öffne mal die httpd.conf und such nach dem Text LoadModule php5_module. Ist er da und nicht auskommentiert?“

UPDATE: Lukas hatte Probleme mit den Schreibberechtigungen und hat die Lösung dafür in einem eigenen Blogpost festgehalten.

Ein letztes Problem beseitigen

Es ist vollbracht. Fast. Ich bin auf ein Verhalten gestoßen, dessen Ursachenforschung und Beseitigung mich echt Zeit gekostet hat, obwohl die Lösung doch so einfach war. Zwar habt ihr die eigentlichen Serverkonfigurationen in der httpd.conf festgelegt (ihr erinnert euch?), jedoch können diese von einer benutzerspezifischen Datei überschrieben werden. Und genau diese existiert standardmäßig 🙁 Also auf zum Ordner /private/etc/apache2/users und die dort vorhandene Datei (in meinem Fall Enno.conf) löschen.

Feddich

Jetzt dürft ihr euch ein Belohnungsgetränk eurer Wahl gönnen und bei Gefallen diesen Artikel weiterempfehlen 😉

Quellen:

Autor: Enno

Ich bin Enno. PHP ist mein Ding, aber auch alles Neue rund um die Themen HTML5, CSS3 & Co finde ich interessant. Ich mag es Leuten zu helfen und mein Wissen weiterzugeben. Sollte dir mein Beitrag gefallen haben, lass doch nen Kommentar da oder benutze einen der Social Buttons, um deinen Dank auszudrücken ;)