OS X: nginx, PHP-FPM und MySQL mit „brew“ installieren

Warning: This page is a part of an archive now and will be removed in the future.

Leider fehlt Mac OS X eine richtige Paketverwaltung, wie man sie von Unix-Derivaten wie Debian oder Ubuntu kennt. Somit ist auch das Installieren von Paketen wie nginx, PHP-FPM und MySQL schwieriger – mag man meinen. Glücklicherweise jedoch gibt es eine externe Paketverwaltung. Diese nennt sich „brew“ und läuft vollkommen autark neben dem System, da sie eigene Verzeichnisse erstellt und lediglich in die eigentlichen Programmverzeichnisse verlinkt.

Mit dieser Paketverwaltung kann man auch in wenigen Schritten einen eigenen lokalen Webserver zu Testzwecken aufsetzen.
Als erstes muss man natürlich die Paketverwaltung „brew“ installieren. Dazu gibt man einfach folgenden Befehl ins Terminal ein:
ruby -e "$(curl -fsSL [url]https://raw.githubusercontent.com/Homebrew/install/master/install[/url])"

brew basiert auf git und ruby und installiert alle Inhalte unter /usr/local, also nicht direkt ins System – wie bereits erwähnt.

Nach der Installation ist brew direkt nutzbar. Um zu sehen, ob alles funktioniert, wie es soll, sollte man erst einmal die Installation mit folgendem Befehl überprüfen:
brew doctor

Eine beispielhafte Ausgabe dieses Befehls bei mir unter OS X Yosemite:

Source Code

  1. $ brew doctor
  2. Please note that these warnings are just used to help the Homebrew maintainers
  3. with debugging if you file an issue. If everything you use Homebrew for is
  4. working fine: please don't worry and just ignore them. Thanks!
  5. Warning: Your XQuartz (2.7.4) is outdated
  6. Please install XQuartz 2.7.7:
  7. https://xquartz.macosforge.org
  8. Warning: Unbrewed header files were found in /usr/local/include.
  9. If you didn't put them there on purpose they could cause problems when
  10. building Homebrew formulae, and may need to be deleted.
  11. Unexpected header files:
  12. /usr/local/include/jack/control.h
  13. /usr/local/include/jack/intclient.h
  14. /usr/local/include/jack/jack.h
  15. /usr/local/include/jack/jslist.h
  16. /usr/local/include/jack/midiport.h
  17. /usr/local/include/jack/net.h
  18. /usr/local/include/jack/ringbuffer.h
  19. /usr/local/include/jack/session.h
  20. /usr/local/include/jack/statistics.h
  21. /usr/local/include/jack/systemdeps.h
  22. /usr/local/include/jack/thread.h
  23. /usr/local/include/jack/transport.h
  24. /usr/local/include/jack/types.h
  25. /usr/local/include/jack/weakjack.h
  26. /usr/local/include/jack/weakmacros.h
Display All
Diese Warnungen kann man jedoch getrost ignorieren.
Eine alternative Meldung sieht folgendermaßen aus:

Source Code

  1. $ brew doctor
  2. Your system is ready to brew.
Auch hier ist alles in Ordnung.

Vorbereitung:
Um die Installation fehlerfrei vollziehen zu können, benötigt man die Xcode Command Line Tools, welche mit folgendem Befehl installiert werden können:
xcode-select --install

PHP:
Dann geht es als erstes an die Installation von PHP-FPM. Zwar findet man PHP 5.3–5.6 direkt schon mit brew search php, allerdings gibt es dort keine FPM-Unterstützung. Dafür benötigt man eine neue Paketquelle, welche sich mit folgendem Befehl hinzufügen lässt:
brew tap josegonzalez/php

Die Installation von PHP (in diesem Falle Version 5.6, daher das „php56“) startet man dann mit folgendem Befehl:
brew install php56 --with-fpm --with-imap --with-debug --without-snmp
Wichtig ist das --without-snmp unter OS X Yosemite, da die Installation von PHP-Phar ansonsten abbricht.

Die Installation kann einige Minuten dauern, da PHP erst kompiliert werden muss.

Damit PHP bei jedem Systemstart direkt mitstartet, muss man nach der Installation folgenden Befehl eingeben:
ln -sfv /usr/local/opt/php56/*.plist ~/Library/LaunchAgents

Um PHP direkt nach der Installation zu starten, muss man folgenden Befehl eingeben:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.php56.plist

Um PHP wieder zu stoppen, muss man folgenden Befehl eingeben:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.php56.plist

Die Konfigurationsdatei von PHP befindet sich unter folgendem Pfad:
/usr/local/etc/php/5.6/php.ini

MySQL:
Als nächstes ist MySQL an der Reihe. Für die Installation muss man folgenden Befehl eingeben:
brew install mysql --with-debug

Auch hier kann die Installation einige Minuten dauern.

Damit MySQL bei jedem Systemstart direkt mitstartet, muss man nach der Installation folgenden Befehl eingeben:
ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents

Zum Starten reicht folgender Befehl:
mysql.server start
Der Befehl kann folgendermaßen geändert werden, um unterschiedliche Möglichkeiten zu erreichen:
Usage: mysql.server {start|stop|restart|reload|force-reload|status} [ MySQL server options ]

Optional kann man mit folgendem Befehl direkt einige Sicherheitseinstellungen bezüglich Passwörter und Zugriffe vornehmen:
mysql_secure_installation

nginx:
Nun fehlt noch nginx. Dieser wird mit folgendem Befehl installiert:
brew install nginx

Die Konfigurationsdatei befindet sich hier unter folgendem Pfad:
/usr/local/etc/nginx/nginx.conf
Wenn man dort den Port auf 80 setzt, kann man nginx nur mit dem Befehl sudo starten, da OS X standardmäßig dem normalen Benutzer keinen Zugriff auf diesen Port gibt. Zudem ist eine weitere Konfiguration notwendig.

Nun muss man noch das Startskript nutzbar machen:
sudo cp /usr/local/opt/nginx/*.plist /Library/LaunchDaemons
sudo chown root:wheel /Library/LaunchDaemons/homebrew.mxcl.nginx.plist

Um den Server zu starten, muss man folgenden Befehl eingeben:
sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.nginx.plist

Um den Server zu stoppen, muss man folgenden Befehl eingeben:
sudo launchctl unload /Library/LaunchDaemons/homebrew.mxcl.nginx.plist


Informationen:
Informationen über die einzelnen installierten Dienste findet man mit folgenden Befehlen:
brew list nginx
brew list php56
brew list mysql


Konfiguration:
Damit nginx und PHP richtig zusammenarbeiten, sind noch einige Änderungen in der Konfiguration notwendig. Hierbei ist es direkt empfehlenswert, PHP-FPM auf Unix-Sockets umzustellen und PATH_INFO im Zusammenspiel mit nginx zu aktivieren.
Dazu am besten als erstes in der /usr/local/etc/php/5.6/php.ini die Konfigurationsvariable cgi.fix_pathinfo suchen, das Semikolon davor wegmachen und den Wert auf 0 (null) stellen.

Dann wird die /usr/local/etc/nginx/nginx.conf geöffnet und im server-Block folgendes eingetragen:

Source Code

  1. location ~ (?U)\.php(/.*$|$) {
  2. gzip off;
  3. fastcgi_split_path_info ^((?U).+\.php)(/.+)?$;
  4. fastcgi_param QUERY_STRING $query_string;
  5. fastcgi_param REQUEST_METHOD $request_method;
  6. fastcgi_param CONTENT_TYPE $content_type;
  7. fastcgi_param CONTENT_LENGTH $content_length;
  8. fastcgi_param SCRIPT_FILENAME $request_filename;
  9. fastcgi_param SCRIPT_NAME $fastcgi_script_name;
  10. fastcgi_param REQUEST_URI $request_uri;
  11. fastcgi_param DOCUMENT_URI $document_uri;
  12. fastcgi_param DOCUMENT_ROOT $document_root;
  13. fastcgi_param SERVER_PROTOCOL $server_protocol;
  14. fastcgi_param GATEWAY_INTERFACE CGI/1.1;
  15. fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
  16. fastcgi_param REMOTE_ADDR $remote_addr;
  17. fastcgi_param REMOTE_PORT $remote_port;
  18. fastcgi_param SERVER_ADDR $server_addr;
  19. fastcgi_param SERVER_PORT $server_port;
  20. fastcgi_param SERVER_NAME $server_name;
  21. # PHP only, required if PHP was built with --enable-force-cgi-redirect
  22. fastcgi_param REDIRECT_STATUS 200;
  23. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  24. fastcgi_param PATH_INFO $fastcgi_path_info;
  25. if (!-e $document_root$fastcgi_script_name) {
  26. return 404;
  27. }
  28. fastcgi_pass unix:/usr/local/var/run/php5-fpm.sock;
  29. fastcgi_index index.php;
  30. }
Display All

Nun muss noch PHP-FPM angepasst werden. Dazu wird die Datei /usr/local/etc/php/5.6/php-fpm.conf geöffnet und wie folgt bearbeitet:
Die Zeile listen = 127.0.0.1:9000 wird zu listen = /usr/local/var/run/php5-fpm.sock.
In der Zeile listen.owner = _www wird das _www durch den System-Benutzer getauscht, der sowohl PHP-FPM als auch nginx startet.
In der Zeile listen.group = _www wird das _www durch den System-Benutzer getauscht, der sowohl PHP-FPM als auch nginx startet.
Die darunter folgende Zeile ;listen.mode = 0666 wird entkommentiert, d. h. das Semikolon zu Beginn fällt weg.

Danach lediglich die Dienste neu starten und PHP-FPM sollte erfolgreich mit nginx zusammenarbeiten. Falls nicht, als erstes in die Logs schauen.
About the Author
Ich bin Webentwickler in Stuttgart und administriere Server seit vielen Jahren. In diesem Blog erstelle ich hauptsächlich Tutorials für andere Webentwickler, Webdesigner und Serveradministratoren.
-------------------------------------------------------------------------------------------------------------------------------------
I’m a web developer in Stuttgart, Germany, and server administrator since many years. This blog mainly contains a tutorial set for other web developer, web designer and server administrators.

757 times read

Comments 0

There are not any items at the moment.

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.