macOS: nginx, MySQL und PHP via brew installieren

Da ich auf Dauer mit der Performance von MAMP PRO unzufrieden war und meine lokale Entwicklungsumgebung sowieso fast ausschließlich unter localhost und nicht unter weiteren Hosts läuft, habe ich mich entschieden, eine Kombination von nginx, MySQL und PHP manuell via brew zu installieren.

brew ist dabei ein Paketmanager, womit man relativ unkompliziert eine Vielzahl an Paketen installieren kann.

Nachfolgend erkläre ich die schnelle Installation der einzelnen Pakete sowie deren Konfiguration unter macOS.

nginx

Die Installation kann über folgenden Befehl im Terminal gestartet werden:

brew install nginx
Code-Sprache: Bash (bash)

Die initiale Konfiguration findet man unter /usr/local/etc/nginx (bei Macs mit Apple Silicon dagegen unter /opt/homebrew/etc/nginx). Angepasst werden muss hier einmal die Datei nginx.conf beispielsweise über diesen Befehl:

pico /usr/local/etc/nginx/nginx.conf
Code-Sprache: Bash (bash)

Unter anderem um das später installierte PHP verwenden zu können, muss dieser Block angepasst werden:

location / { root html; index index.html index.htm; }
Code-Sprache: Nginx (nginx)

Zu folgendem:

root /path/to/webroot; index index.html index.htm index.php; location / { autoindex on; try_files $uri $uri/ /index.php?$args; proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; }
Code-Sprache: Nginx (nginx)

In der ersten Zeile muss der Pfad zum Webroot angegeben werden, der beim Aufruf von http://localhost angezeigt wird. Die nachfolgende Zeile mit index legt fest, welche Dateien von nginx direkt aufgerufen werden. Hier wurde praktisch die index.php hinzugefügt.

autoindex on; erlaubt die Anzeige von Verzeichnissen, wenn es keine der unter index genannten Dateien im aktuellen Verzeichnis gibt. Das ist für die Entwicklung hilfreich. Bitte aktiviere diese Funktion nie in einem Produktivsystem.

Die try_files-Direktive gibt an, wie nginx versucht, Inhalte aufzurufen. Die angegebene Variante sollte für die meisten Anwendungen korrekt sein. Abweichende Einstellungen dürften in der Dokumentation der jeweiligen Anwendung stehen.

Die verschiedenen Einstellungen bezüglich Proxy-Buffern beheben einige Probleme mit größeren Websites.

Für PHP muss außerdem folgender Block unter dem oben genannten Block eingefügt werden:

location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
Code-Sprache: Nginx (nginx)

Standardmäßig läuft nginx auf Port 8080, da die Ports 80 und 443, die eigentlich für HTTP bzw. HTTPS verwendet werden, unter macOS nur mit Administrator-Rechten verwendet werden können. Will man Port 80 verwenden, muss die folgende Zeile auch noch angepasst werden:

listen 8080;

Zu:

listen 80;

Danach kann nginx mit folgendem Befehl gestartet werden:

brew services run nginx
Code-Sprache: Bash (bash)

Bzw. also Administrator über sudo:

sudo brew services run nginx
Code-Sprache: Bash (bash)

Wenn man den nginx-Server immer direkt beim Systemstart starten möchte, kann man stattdessen folgenden Befehl verwenden:

brew services start nginx
Code-Sprache: Bash (bash)

Hinweis: Wenn du nginx mit Administrator-Rechten ausführst, um Port 80 zu verwenden, ist ein automatischer Start beim Systemstart nicht möglich.

Zum Stoppen des Servers kann folgender Befehl verwendet werden:

brew services stop nginx
Code-Sprache: Bash (bash)

Und zum Neustart entsprechend der restart-Befehl:

brew services restart nginx
Code-Sprache: Bash (bash)

Diese Befehlskette gilt übrigens für alle Dienste via brew, also nachfolgend auch für MySQL bzw. PHP (wobei dann das nginx im Befehl jeweils ausgetauscht werden muss).

MySQL

Zur Installation von MySQL genügt folgender Befehl im Terminal:

brew install mysql
Code-Sprache: Bash (bash)

Die Konfigurationsdatei befindet sich dann unter /usr/local/etc/my.cnf (bzw. unter /opt/homebrew/etc/my.cnf für Macs mit Apple Silicon) und kann wie die nginx-Konfiguration mit folgendem Befehl geöffnet werden:

pico /usr/local/etc/my.cnf
Code-Sprache: Bash (bash)

Als Basis sollte die Datei mindestens folgenden Inhalt aufweisen:

# Default Homebrew MySQL server config [mysqld] # Only allow connections from localhost bind-address = 127.0.0.1 mysqlx-bind-address = 127.0.0.1 socket = /tmp/mysql.sock character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci character-set-client-handshake = false
Code-Sprache: PHP (php)

Falls der Dienst bereits nach der Installation gestartet wurde, sollte man ihn nun neu starten:

brew services restart mysql
Code-Sprache: Bash (bash)

Zum Testen, ob der MySQL-Server erfolgreich läuft, kannst du folgenden Befehl angeben:

mysql -u root -p

Das Standardpasswort für den Benutzer root lautet ebenfalls root. In meiner lokalen Testumgebung belasse ich es auch dabei.

Wenn alles funktioniert, sollte die Ausgabe folgendermaßen aussehen:

$ mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 39 Server version: 8.0.25 Homebrew Copyright (c) 2000, 2021, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
Code-Sprache: JavaScript (javascript)

PHP

Auch PHP lässt sich über einen einzigen Befehl im Terminal installieren:

brew install php
Code-Sprache: Bash (bash)

Damit wird zum gegenwärtigen Zeitpunkt PHP 8.0 installiert. Will man eine andere PHP-Version installieren, kann das folgendermaßen gemacht werden:

brew install php@7.4
Code-Sprache: Bash (bash)

Dann wird PHP 7.4 zusätzlich installiert, wenn der erste Befehl bereits ausgeführt wurde.

Ähnlich wie unter Linux hat man dann für jede PHP-Version ein eigenes Konfigurationsverzeichnis unter /usr/local/etc/php (bzw. unter (/opt/homebrew/etc/php) für Macs mit Apple Silicon):

ls -l /usr/local/etc/php total 0 drwxr-xr-x 10 matze admin 320 Jul 3 15:55 7.4 drwxr-xr-x 10 matze admin 320 Jul 1 18:23 8.0

Die php.ini liegt dann jeweils im Verzeichnis der entsprechenden Version, also beispielsweise unter /usr/local/etc/php/8.0/php.ini.

Wechsel zwischen PHP-Versionen

Um zwischen den PHP-Versionen zu wechseln, muss man den unlink– bzw. link-Befehl in Brew verwenden.

Um zu PHP 7.4 zu wechseln, benötigt man folgende Befehle:

brew unlink php brew link php@7.4 --force --overwrite
Code-Sprache: Bash (bash)

Um wieder zurückzuwechseln, geht es genau anders herum:

brew unlink php@7.4 brew link php --force --overwrite
Code-Sprache: Bash (bash)

Davor sollte PHP aber immer erst einmal gestoppt werden, entweder via brew services stop php oder brew services stop php@7.4.

Starte danach deine Terminal-Sitzung neu, damit die Änderungen wirksam werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.