Mac - Apache MySql PHP Server mit Homebrew
https://help.macstadium.com/articles/how-to-install-apache-mysql-and-php-using-homebrew-on-macos https://gist.github.com/DragonBe/0faebe58deced34744953e3bf6afbec7
Requirements[Bearbeiten]
Requirements
- Xcode
- Homebrew Paketmanager für Mac OS X
- Homebrew-Cask
- Text Editor (like Sublime Text 2) as you will need to edit some lines of code
- Mac with High Sierra or above
XCode über den App Store installieren Homebrew wie im Wiki beschrieben.
Apache[Bearbeiten]
MacOs System Apache Autostart abschalten[Bearbeiten]
sudo launchctl unload -w/System/Library/LaunchDaemons/org.apache.httpd.plist 2>/dev/null
System Apache stoppen[Bearbeiten]
sudo apachectl stop
Wahrscheinlich läuft aber keiner, es sei denn du hast ihn vorher aktiviert. Daher kann es gut sein dass eine
‘could not find specified service’.
Meldung kommt.
Homebrew Apache installieren[Bearbeiten]
Now we can proceed with the installation of Apache 2.4:
brew install httpd
Achte darauf wie der Apache eingerichtet wird. Bei mir ist das folgendermaßen:
DocumentRoot is /usr/local/var/www. The default ports have been set in /usr/local/etc/httpd/httpd.conf to 8080 and in /usr/local/etc/httpd/extra/httpd-ssl.conf to 8443 so that httpd can run without sudo. To have launchd start httpd now and restart at login: brew services start httpd Or, if you don't want/need a background service you can just run: apachectl start
Check of Apache läuft[Bearbeiten]
Achte auf den Pfad der während der Homebrew-Cask Installation genutzt wurde. Du könntest Ihn verändert haben:
which apachectl
Ausgabe:
/usr/local/bin/apachectl
Du kannst auch
httpd -v
Ausgabe:
Server version: Apache/2.4.39 (Unix) Server built: Apr 19 2019 17:54:07
Nutzen. Das gibt dann die Version und das built ähnlich wie oben aus.
Apache starten[Bearbeiten]
Jetzt können wir den Apache starten
sudo apachectl start
Die Webseite erreichst du im Browser über den localhost (Port 8080 vgl. Ausgabe oben)
http://localhost:8080/
oder die Lokale IP Adresse. Es sollte die typische Apache Seite kommen.
“It Works!”
Apache Autostart (optional)[Bearbeiten]
Wenn du den Apache beim Mac Start automatisch starten willst, kannst du einen Homebrew Service ienrichten
sudo brew services start httpd
Ich mache das nicht, da ich auch noch den XAMPP für kleinere Sachen nutze, da muss nicht der brew apache die ganze Zeit laufen.
Apache Module und Port konfigurieren[Bearbeiten]
Den Port kannst du hier ändern. Standardmäßig richtet brew den 8080 ein. Eigentlich ganz gut bei mir, da der XAMPP auf dem Standardport 80 läuft, so kann ich theoretisch beide auch mal gleichzeitig nutzen.
open -e /usr/local/etc/httpd/httpd.conf
Finde die Zeile mit
Listen 8080
und passe sie z.B. auf 80 an. Ich lasse es auf 8080
Erlaubte Direktiven für .htaccess - AllowOverride[Bearbeiten]
Mit AllowOverride controls regelt der Server wo Apache Zugriff hat. Hier sollte man sorgfältig vorgehen, auf keinen Fall sollte er überall Zugriff haben. Im ersten Block verbietet man erstmal alles um dann in den Web Directories wieder einzeln Zugriff zu geben.
Im httpd.conf File ist das meiste ganz gut beschrieben. Im Zweifel Suchmaschine o.ä. bemühen.
#
# Deny access to the entirety of your server's filesystem. You must
# explicitly permit access to web content directories in other
# <Directory> blocks below.
#
<Directory />
AllowOverride none
Require all denied
</Directory>
Oft sinnvoll ist eine Regelung über htaccess Files
- AllowOverride controls what directives may be placed in .htaccess files.
- It can be "All", "None", or any combination of the keywords:
- AllowOverride FileInfoAuthConfig Limit
AllowOverride All
mod_rewrite aktivieren[Bearbeiten]
Suche nach
LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so
und entferne den Hash vorne
Servername[Bearbeiten]
Ein Domainname benötigt eine DNS hier kann man auch einfach die IP Adresse eingeben unter der der Host Rechner erreichbar ist. Oder man läßt es leer, wenn man es nicht benötigt.
#ServerName www.example.com:8080
Replace it with your IP Address or domain:
ServerName 192.1.2.24
Apache neu starten[Bearbeiten]
sudo apachectl -k restart
TEIL 2 – PHP[Bearbeiten]
Mit Brew kann man verschiedene Versionen installieren. Wir entscheiden uns hier für 7.2. Um das Ganze zu testen legen wir schon mal eine kleine PHP Datei an:
info.php
<?php phpinfo();?>
Rufen wir diese im Browser auf
localhost:8080/info.php
Gibt er uns nur den Code aus. Später sollte er dann alle wichtigen PHP Einstellungen etc. ausgeben.
PHP 7.2 mit brew installieren[Bearbeiten]
brew install php@7.2
Statt 7.2 geht auch eine ander php Version z.B. 5.6, 7.0, 7.1. Ohne @x.y installiert er die neueste (bei mir war das 7.3, die ich wieder deinstalliert habe, da es mit älteren Tools Probleme gibt)
Apache und PHP verbinden[Bearbeiten]
Netterweise gibt Homebrew auch gleich ein paar Hinweise aus, wie ich Apache mit PHP verbinden kann:
To enable PHP in Apache add the following to httpd.conf and restart Apache:
LoadModule php7_module /usr/local/opt/php@7.2/lib/httpd/modules/libphp7.so
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
Finally, check DirectoryIndex includes index.php
DirectoryIndex index.php index.html
The php.ini and php-fpm.ini file can be found in:
/usr/local/etc/php/7.2/
php@7.2 is keg-only, which means it was not symlinked into /usr/local,
because this is an alternate version of another formula.
If you need to have php@7.2 first in your PATH run:
echo 'export PATH="/usr/local/opt/php@7.2/bin:$PATH"' >> ~/.bash_profile
echo 'export PATH="/usr/local/opt/php@7.2/sbin:$PATH"' >> ~/.bash_profile
For compilers to find php@7.2 you may need to set:
export LDFLAGS="-L/usr/local/opt/php@7.2/lib"
export CPPFLAGS="-I/usr/local/opt/php@7.2/include"
Was bedeutet das alles ?
In der httpd.conf (s.o.) können wir den Apache mit PHP verbinden, indem wir das passende Apache Modul aktivieren.
Sprich wir editieren wieder die Datei:
open -e /usr/local/etc/httpd/httpd.conf
Modul einbinden[Bearbeiten]
Das PHP Modul für den Apache findet sich in /usr/local/opt/php@7.2/lib/httpd/modules/libphp7.so Daher benötigen wir in der httpd.conf (entweder unten oder dort wo auch die anderen Module geladen werde.
LoadModule php7_module /usr/local/opt/php@7.2/lib/httpd/modules/libphp7.so
LoadModule php7_module /usr/local/opt/php@7.2/lib/httpd/modules/libphp7.so
FileHandler[Bearbeiten]
Als nächstes sagen wir ihm, dass alle php Dateien inkl. erweitertem Suffix (also auch php7, phpx) den Handler application/x-httpd-php (Mime) bekommen)
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
Evtl. funktioniert das auch ohne, aber in manchen Anwendungsfällen benötigt man den passenden Handler.
DirectoryIndex[Bearbeiten]
Jetzt geben wir an wie er nach index.php oder index.html suchen soll, falls nur ein Ordner im Browser aufgerufen wird.
Wir suchen nach
<IfModule dir_module> DirectoryIndex index.html </IfModule>
Und fügen index.php nach der index.html hinzu. So sucht Apache zuerst nach index.html und wenn er keine findet nach index.php. Andersrum geht natürlich auch.
<IfModule dir_module> DirectoryIndex index.html index.htm index.php </IfModule>
Jetzt Apache neu starten. Bei mir hat es mit dem restart nicht funktioniert, erst start stop hat geklappt:
sudo apachectl stop sudo apachectl start
Den Service wie in den Infos angegeben lassen wir weg, da wir auch Apache manuell starten.
Auch den Pfad ändern wir erst mal nicht, es gibt für die Kommandozeile ja das Mac PHP das immer läuft. Wir erinnern uns das zeigt er uns mit
which php
Ausgabe:
/usr/bin/php
PHP Konfigurieren[Bearbeiten]
Wie oben in der Ausgabe schon gezeigt finden wir die Konfiguration in:
/usr/local/etc/php/7.2/php.ini
Dies ist die Default Konfigurationsdatei. Hier findet man die üblichen wichtige Parameter wie memory_limit, upload_max_filesize oder max_execution_time. Auch den safe mode kann ma hier aktivieren. Was im Moment eingestellt ist sieht man auch bequem über unsere info.php Datei.
PHP als CGI statt als Modul[Bearbeiten]
TODO
Wenn man PHP über (Fast)CGI implementiert, kann man z.B. über die htaccess die PHP Version umschalten.
TEIL 3 – MYSQL[Bearbeiten]
Als letztes installieren wir MySql
Auch hier nutzen wir brew (würde auch manuell gehen, aber Homebrew ist effizienter)
brew install mysql
Nach der Installation gibt uns brew wieder ein paar Tips:
We've installed your MySQL database without a root password. To secure it run:
mysql_secure_installation
MySQL is configured to only allow connections from localhost by default
To connect run:
mysql -uroot
To have launchd start mysql now and restart at login:
brew services start mysql
Or, if you don't want/need a background service you can just run:
mysql.server start
Root Passwort ist immer eine gute Idee. Also:
mysql_secure_installation
FEHLER Server nicht erreichbar. Ach ja - erstmal starten
mysyl.server start
und dann.
mysql_secure_installation
Der Sicherheitsassistent startet und fragt nach
- ob wir eine Validierungskomponente installieren wollen die nur starke Passwörter zuläßt. Nein brauchen wir in der Testumgebung nicht
- nach einem Rootpasswort - klar das geben wir ein
- Ob der Anonyme User zugelassen ist - nein
- ob root nur über localhost zugreifen kann - ja das ist sinnvoll
mySql als Service[Bearbeiten]
Das könnten wir über
brew services start mysql
machen. Der Befehl richtet launchd als Service ein, so dass mySql nach dem Login startet. Das lassen wir wie schon beim Apache und bei PHP weg.
phpMyAdmin[Bearbeiten]
Auch phpMyAdmin läßt sich mit Homebrew installieren
brew install phpmyadmin
Wieder gibt es eine ganze Latte an Infos. Irgendwie hat er jetzt auch gleich php7.3 installiert. Aber die info.php gibt nach wie vor die passende Version 7.2 aus. Also alles OK er nutzt die zuvor konfigurierte.
Schließlich die Infos zu phpmyadmin
To enable phpMyAdmin in Apache, add the following to httpd.conf and
restart Apache:
Alias /phpmyadmin /usr/local/share/phpmyadmin
<Directory /usr/local/share/phpmyadmin/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
<IfModule mod_authz_core.c>
Require all granted
</IfModule>
<IfModule !mod_authz_core.c>
Order allow,deny
Allow from all
</IfModule>
</Directory>
Then open http://localhost/phpmyadmin
The configuration file is /usr/local/etc/phpmyadmin.config.inc.php
Er hat also phpmyadmin in
/usr/local/share/phpmyadmin
installiert und möchte, dass wir einen Alias einrichten, so dass wir das Tool später über
localhost:8080/phpmyadmin
erreichen können.
Problem: phpMyAdmin und mySql V8[Bearbeiten]
Wenn brew die Version 8.0 von mySQL installiert hat kann es Probleme beim Einloggen kommen. Beim Login mit den Datenbankdaten gibt es eine Fehlermeldung:
The server requested authentication method unknown to the client [caching_sha2_password]
Mehrere Lösungen. Wir können mySql generell so einstellen, dass es die alte Variante unterstützt: In my.cnf
default_authentication_plugin = mysql_native_password
Das gilt allerdings als unsicher. Aber ist vielleicht akzeptabel, wenn wir wie oben mySQL eh nur unter localhost zulassen.
Oder wir legen einen User an, der nur auf localhost funktioniert und der die alte Methode nutzt:
Einloggen auf der mySQL Konsole im Terminal:
mysql -u root -p CREATE USER phpmyadmin@localhost IDENTIFIED WITH mysql_native_password BY'geheimespasswort';
Jetzt noch Alle Rechte vergebe
GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost';
Zusammengefasst[Bearbeiten]
Wir haben also eine komplette AMP Umgebung die wir mit einfachen Befehlen starten und stoppen können. Achtung beim Apache mit sudo davor.
mysql.server start mysql.server stop sudo apachectl start sudo apachectl stop