Benutzer-Werkzeuge

Webseiten-Werkzeuge


tools:local-dev-monterey-apple-silicon

Lokale PHP-Entwicklungsumgebung unter macOS Monterey und Apple Silicon (Mac M1)

Diese Anleitung beschreibt die Einrichtung einer lokalen Web-Entwicklungsumgebung auf dem eigenen Mac. Sie beinhaltet auch die Installation von Komponenten, die für TYPO3 benötigt werden (z.B. GraphicsMagick).
Am Ende dieser Seite habe ich die verschiedenen Quellen für diese Sammlung notiert.

Im Ergebnis erhalten wir:

  1. Vor allem: die Möglichkeit, beliebig viele Webprojekte parallel laufen zu lassen.
  2. Einen lokalen Apache-Webserver mit PHP.
  3. MySQL inkl. phpMyAdmin für beliebig viele Datenbanken.
  4. Eine Verzeichnisstruktur zum komfortablen Anlegen neuer Projekte.
  5. Image Processing, nicht nur für TYPO3 CMS.
  6. Einfaches Testing von E-Mail-Versand und E-Mail-Templates.

Apple Silicon Support

Viele Programme waren mit dem neuen Apple M1 Chip anfangs nicht kompatibel. Sie mussten dann mit Rosetta installiert werden: ein Framework von Apple, mit dem sich Programme ausführen lassen, die für Intel-x64-Prozessoren kompiliert wurden.

Die meisten Programme unterstützen die neuen Apple Chips jetzt nativ.

1. Xcode

Das Programm selbst benötigt man möglicherweise nicht, aber es bringt einige nützliche Bibliotheken und Tools mit.

Xcode kann kostenlos im App Store heruntergeladen werden. Nach der Installation muss noch die Lizenz akzeptiert werden, wahlweise bei einem Programmstart oder über die Kommandozeile (xcodebuild -license).


2. Homebrew

Homebrew ist eine praktische Paketverwaltung, mit der viele Programme einfach auf dem Mac installiert und aktualisiert werden können.

Homebrew selbst und die meisten Pakete sind inzwischen mit dem M1 Chip kompatibel, so dass wir auf Rosetta verzichten können.

Installation über das Terminal:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

3. dnsmasq

Mit diesem Domain Name System (DNS) können unsere localhost-Websites mit praktischen Domains aufgerufen werden, z.B. http://kunde1.test/.

Die folgenden Befehle installieren das Programm, erstellen benötigte Ordner und verweisen alle Anfragen zur .test Top Level Domain zu unserem localhost.

Terminal:

brew install dnsmasq
cd $(brew --prefix)
mkdir etc
echo 'address=/.test/127.0.0.1' > etc/dnsmasq.conf
sudo cp -v $(brew --prefix dnsmasq)/homebrew.mxcl.dnsmasq.plist /Library/LaunchDaemons
sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist
sudo mkdir /etc/resolver
sudo bash -c 'echo "nameserver 127.0.0.1" > /etc/resolver/test'

4. Root-Verzeichnis

Wo die Websites lokal gespeichert werden, bleibt jedem selbst überlassen. Ich gehe hier von einem Ordner /www innerhalb meines User-Verzeichnisses aus. Die Verzeichnisstruktur sieht folgendermaßen aus:

/Users/sebkln/www/
  sites/
    kunde1/
      assets/ *für Quelldateien und andere Dokumente*
      wwwroot/ *beinhaltet die eigentliche Website*
      
    kunde2/
      assets/
      wwwroot/
        index.php
        typo3/
        typo3_src/
        [etc]
        
    phpmyadmin/ *wird weiter unten eingerichtet*

Der Name wwwroot ist frei gewählt. Das Verzeichnis könnte auch htdocs, html oder public genannt werden.

Du kannst Verzeichnisnamen oder Strukturen abweichend anlegen, musst dies dann nur konsequent in allen Code-Beispielen dieser Anleitung durchziehen (z.B. in der httpd-vhosts.conf).


5. PHP

Mit macOS Monterey liefert Apple erstmals keine PHP-Version mehr mit. Es war aber schon vorher ratsam, PHP über Homebrew zu installieren.

Ich installiere gleich mehrere PHP-Versionen, zwischen denen man später bei Bedarf wechseln kann.

Terminal:

brew install php
brew install php@7.4
brew install php@7.2

Das PHP-Paket ohne Suffix beinhaltet jeweils die aktuelle PHP-Version (derzeit PHP 8.0).

PHP.ini

Speicherort: /opt/homebrew/etc/php/7.4/php.ini (bzw. entsprechende Versionsnummer)

Zentrale Konfigurationsdatei für PHP. Folgende Anpassungen sind empfohlen, besonders in Hinblick auf die Verwendung von TYPO3:

max_execution_time = 240
always_populate_raw_post_data = -1
max_input_vars = 1500
upload_max_filesize = 10M
post_max_size = 10M

Um bei der täglichen Arbeit später die PHP-Versionen zu wechseln, sind zwei Dinge notwendig:

  1. Die PHP-Version über das Terminal verlinken: brew unlink php && brew link –force –overwrite php@7.4
  2. Das PHP-Modul in der httpd.conf mit LoadModule laden (siehe den folgenden Abschnitt) und den Webserver neustarten.

6. Apache HTTP Server

macOS Monterey beinhaltet immer noch einen Apache. Da es hiermit aber Probleme geben kann, ist eine Installation per Homebrew dringend empfohlen.

Terminal:

brew install httpd
brew services start httpd

httpd.conf

Speicherort: /opt/homebrew/etc/httpd/httpd.conf

Die Apache-Konfigurationsdatei. Folgende Zeilen müssen mit # auskommentiert werden:

<Directory />
    AllowOverride none
    Require all denied
</Directory>

Diese Zeilen müssen aktiviert oder ergänzt werden:

LoadModule vhost_alias_module lib/httpd/modules/mod_vhost_alias.so
Include /opt/homebrew/etc/httpd/extra/httpd-vhosts.conf

Mit den folgenden Zeilen ergänzen wir die verschiedenen PHP-Versionen. Nur die aktive PHP-Version sollte aktiv sein, der Rest wird auskommentiert (bis er benötigt wird).
Beachte auch die abweichende Schreibweise bei PHP 8.0.

#LoadModule php7_module /opt/homebrew/opt/php@7.2/lib/httpd/modules/libphp7.so
LoadModule php7_module /opt/homebrew/opt/php@7.4/lib/httpd/modules/libphp7.so
#LoadModule php_module /opt/homebrew/opt/php@8.0/lib/httpd/modules/libphp.so

Die LoadModule-Einträge für PHP können nicht an das Ende der Datei geschrieben werden, sondern muss zu den anderen LoadModule-Einträgen. Sonst wird PHP nicht geladen!

Für das URL-Routing von TYPO3 aktivieren wir gleich noch das Modul für die Rewrite-Regeln:

LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so

Default-User und -Gruppe des Apache ist _www. Um keine Probleme mit Zugriffsrechten zu bekommen, setzen wir uns stattdessen einfach selbst ein:

# User _www
# Group _www

User myusername
Group staff

Der Homebrew-Apache nutzt den Port 8080. Ich ändere ihn auf den bei Webservern üblichen Port 80:

Listen 80

httpd-vhosts.conf

Speicherort: /opt/homebrew/etc/httpd/extra/httpd-vhosts.conf

Ergänzende Konfigurationsdatei. Der Inhalt der bereits vorhandenen Datei kann komplett auskommentiert oder gelöscht werden. Hinein gehört dies:

<Directory "/Users/sebkln/www">
  Options Indexes MultiViews FollowSymLinks
  AllowOverride All
  Require all granted
</Directory>

<Virtualhost *:80>
  VirtualDocumentRoot "/Users/sebkln/www/sites/%1/wwwroot"
  ServerName sites.test
  ServerAlias *.test
  UseCanonicalName Off
</Virtualhost>

Im Zusammenspiel mit dem weiter oben installierten dnsmasq sorgt diese Konfiguration dafür, dass jede Website, die im Ordner /Users/sebkln/www/sites/ liegt und die Struktur /kundenname/wwwroot besitzt, mit der URL http://kundenname.test/ aufgerufen werden kann. Wenn du neue Webprojekte anlegst, benötigst du so keine Anpassung von Konfigurationen – du müsst einfach nur die Konvention dieser Struktur beachten.

Anschließend muss der Apache im Terminal neu gestartet werden:

sudo /opt/homebrew/bin/apachectl restart

Logfiles

Das access_log und error_log des Apache liegen in folgendem Ordner:
/opt/homebrew/var/log/httpd/


7. MySQL

Das Paket mysql installiert derzeit Version 8.x. Um MySQL 5.7 zu nutzen, wird mysql@5.7 benötigt.

Terminal:

brew install mysql@5.7

MySQL unter M1 Macs bzw. macOS Monterey zu installieren, kann einige Probleme bereiten. Falls du vorher bereits eine andere MySQL-Version installiert hattest, solltest du alle dazugehörigen Dateien und Verzeichnis komplett entfernen, bevor du MySQL erneut installierst.

Bevor wir MySQL starten, müssen wir noch einige Zugriffsrechte korrigieren. Sonst erhalten wir den folgenden Fehler: „Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)“.

Terminal:

sudo chown -R _mysql:admin /opt/homebrew/var/mysql
sudo chmod -R u+rwX,g+rwX,o-rwx /opt/homebrew/var/mysql

Anschließend starten wir den MySQL-Server sowie den einmaligen Installationsvorgang, bei dem wir u.a. ein Passwort vergeben.

Terminal:

mysql.server start
mysql_secure_installation

my.cnf

MySQL kann über die my.cnf-Datei konfiguriert werden. Dabei wird MySQL in verschiedenen Verzeichnissen nach dieser Datei suchen.

Die Optionen (Konfigurationen) aus den verschiedenen my.cnf-Dateien werden addiert. Bestehende Optionen können durch später ausgelesene Dateien überschrieben werden.

Mit dem folgenden Befehl wird eine umfangreiche Übersicht ausgegeben. Ganz zu Beginn stehen die berücksichtigten Pfade.

Terminal:

mysqld --verbose --help

    Default options are read from the following files in the given order:
    /etc/my.cnf /etc/mysql/my.cnf /opt/homebrew/etc/my.cnf ~/.my.cnf

Ich kopiere mir die Default-Datei von Homebrew in mein User-Verzeichnis.

Terminal:

cp -v /opt/homebrew/etc/my.cnf ~/my.cnf

Speicherort: ~/my.cnf

Die folgenden Einstellungen in der my.cnf sind z.B. für TYPO3 wichtig. Es darf kein sql_mode gesetzt sein!

innodb_buffer_pool_size = 128M
sql_mode=

8. phpMyAdmin

phpMyAdmin kann von der offiziellen Website heruntergeladen werden; das englische ZIP-Archiv ist voll ausreichend. Das ZIP entpacken und die Inhalte in folgenden Ordner verschieben: /Users/sebkln/www/sites/phpmyadmin/wwwroot/

Anschließend wird ein Ordner für die Konfiguration erstellt und die nötigen Rechte zugewiesen.

Terminal:

mkdir /Users/sebkln/www/sites/phpmyadmin/wwwroot/config
chmod o+w /Users/sebkln/www/sites/phpmyadmin/wwwroot/config

Im Browser nun http://phpmyadmin.test/setup/ öffnen.

  • Den Button „New server“ anklicken
  • Direkt in den Reiter „Authentication“ wechseln
    • dort als User for config auth root eintragen, falls nicht schon vorhanden
    • als Password for config auth das Passwort eingeben, welches bei der Installation von MySQL vergeben wurde
    • Unten auf „Apply“ klicken
  • Zurück im Overview, muss auch hier noch einmal der Button „Save“ betätigt werden.

Dies erstellt eine config.inc.php im config-Ordner von phpMyAdmin. Diese Datei wird direkt in den Ordner wwwroot von phpMyAdmin verschoben. Danach kann der config-Ordner gelöscht werden.

Das wars schon. Nun ist phpMyAdmin unter http://phpmyadmin.test/ erreichbar; mit den hinterlegten Zugangsdaten kann man sich einloggen und seine Datenbanken anlegen und verwalten.


9. GraphicsMagick

TYPO3 benötigt noch ein Programm zur Bildbearbeitung. Damit werden Thumbnails und optimierte Bilder fürs Frontend generiert.

Ich nutze hierfür GraphicsMagick (was laut offizieller TYPO3-Dokumentation auch das empfohlene Programm ist). ImageMagick wird grundsätzlich ebenfalls unterstützt, allerdings hatte ich hier teilweise Probleme mit ImageMagick 7.x.

brew install graphicsmagick --build-from-source

Der Pfad zur Binary lautet:
/opt/homebrew/bin/

Mit den folgenden Einstellungen im TYPO3 Install Tool (LocalConfiguration.php) erhalte ich saubere Ergebnisse in allen „Image Processing“-Tests:

'GFX' => [
    'gdlib_png' => true,
    'jpg_quality' => 60,
    'processor' => 'GraphicsMagick',
    'processor_allowTemporaryMasksAsPng' => 0,
    'processor_colorspace' => 'RGB',
    'processor_effects' => true,
    'processor_enabled' => '1',
    'processor_path' => '/opt/homebrew/bin/',
    'processor_path_lzw' => '/opt/homebrew/bin/',
    'processor_stripColorProfileCommand' => '+profile \'*\' -interlace plane -strip',
],

10. Mailhog (E-Mail-Versand testen)

Mailhog ist ein praktisches Tool, um Webformulare und E-Mail-Templates zu testen. Gesendete E-Mails werden von Mailhog lokal abgefangen und in einer Weboberfläche dargestellt.

brew install mailhog
brew services restart mailhog

Mailhog ist unter http://127.0.0.1:8025/# erreichbar.


Quellen

  1. Bei der Aktualisierung auf macOS Monterey war das Tutorial auf getgrav.org eine große Hilfe.
  2. Der Rest entstammt den Manuals der installierten Programme und diversen Stack Overflow-Topics.
tools/local-dev-monterey-apple-silicon.txt · Zuletzt geändert: 2021/11/23 22:05 von admin