Mac - Apache MySql PHP Server mit Homebrew

Aus Wikizone
Version vom 24. April 2019, 11:20 Uhr von 37.49.72.8 (Diskussion) (→‎Problem: phpMyAdmin und mySql V8)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche
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 ü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

  1. AllowOverride controls what directives may be placed in .htaccess files.
  2. It can be "All", "None", or any combination of the keywords:
  3. 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