Ausführen von Magento 2 über FastCGI (nicht mod_php) unter OS X über Brew-Pakete

23

Basierend auf verschiedenen Forenbeiträgen und Gesprächen in der Community scheint es, als würden einige Leute Magento 2-Entwicklungsinstanzen unter OS X über eine PHP-Umgebung ausführen, die nicht die integrierte Apache / PHP-Kombination verwendet und stattdessen Pakete von verwendet brew, um eine zu erhalten FastCGI PHP-Umgebung läuft mit nginxund / oder apache.

Hat jemand eine Liste von Befehlen und Konfigurationsanweisungen, um Magento 2 unter OS X mit Hilfe von Brew-Paketen oder auf andere Weise zum Ausführen von PHP in einer FastCGI-Umgebung unter OS X zum Laufen zu bringen? Ich bin nicht auf der Suche nach Docker oder Vagrant - ich möchte PHP nativ unter OS X ausführen und möchte es nicht verwenden mod_php.

Alan Storm
quelle
Ich bin mir nicht sicher, ob es hilfreich ist, aber ich war nie ein Fan von Brauen, deshalb habe ich immer PHP installiert, um es nativ von php-osx.liip.ch zu verwenden
Marcel Hauri
@mhauri Wenn Sie Anweisungen haben, wie Sie die php-fpm aus den liip-Paketen holen können, wäre eine vollständige Antwort großartig.
Alan Storm

Antworten:

12

Apache + PHP-FPM mit Homebrew

Schritt 0: Bevor wir anfangen

brew update
brew tap homebrew/services

Schritt 1: Apache

1.- Stoppen Sie den integrierten Apache-Dienst

sudo launchctl unload /System/Library/LaunchDaemons/org.apache.httpd.plist 2>/dev/null
sudo apachectl stop

2.- Installieren Sie apache2.4

brew install homebrew/apache/httpd24 --with-privileged-ports

Dieser Schritt wird eine Weile dauern, da Apache kompiliert werden muss.

3.- Vergewissern Sie sich, dass es korrekt installiert wurde. Es sollte eine Meldung ähnlich der folgenden angezeigt werden:

Damit launchd jetzt homebrew / apache / httpd24 startet und beim Start neu startet: sudo brew services startet homebrew / apache / httpd24

Führen wir den Befehl aus:

sudo brew services start homebrew/apache/httpd24

Stellen Sie sicher, dass alles läuft, indem Sie http: // localhost laden. Danach sollten wir sehen, dass es funktioniert! Botschaft Es klappt

Schritt 2: PHP-FPM

1.- Fahren wir mit der Installation von PHP fort

brew install -v homebrew/php/php70

2.- Starten Sie PHP-FPM. Das Schöne an Homebrew / PHP ist, dass PHP und FPM installiert werden. Daher müssen wir nur Folgendes ausführen:

brew services start homebrew/php/php70

Verwenden wir zunächst die Standardkonfiguration. Wenn wir sie ändern müssen, befindet sich die Konfiguration unter /usr/local/etc/php/7.0/.

Schritt 3: Konfiguration

1.- Öffnen Sie die Apache-Konfiguration:

vim /usr/local/etc/apache2/2.4/httpd.conf

2.- Kommentieren Sie die folgenden Zeilen aus:

LoadModule proxy_module libexec/mod_proxy.so
LoadModule proxy_fcgi_module libexec/mod_proxy_fcgi.so

3.- Richten Sie die Proxy-Konfiguration für PHP-FPM ein:

<IfModule proxy_module>
  ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/usr/local/var/www/htdocs/$1
</IfModule>

Normalerweise würde ich dies per vhost einrichten, um es auf das richtige Verzeichnis zu verweisen

4.- Zum Schluss erstellen wir eine phpinfo () Seite in / usr / local / var / www / htdocs / und bestätigen, dass alles funktioniert, indem wir die Testseite laden: Wir haben PHP

Es gibt noch ein paar Änderungen und Wendungen, aber dies sollte Sie dazu bringen, direkt unter OSX zu arbeiten.

Für eine detailliertere Darstellung der Konfiguration überprüfen wir die Konfiguration (vhost, php pools, etc) auf dieser vagrant Box:

https://github.com/DemacMedia/vagrant-lamp/tree/master/files

Allan MacGregor
quelle
Ich musste eine brew install homebrew/apache/httpd24 --with-privileged-portsstatt einer brew install httpd24 --with-privileged-ports. Passt das zu Ihrer realen Erfahrung?
Alan Storm
@AlanStorm Ich habe das gleiche Verfahren befolgt, aber ein bisschen, wie .htaccess beim Laden von Magentos index.php ein Problem verursacht. Es lässt die Seite jedoch nicht öffnen, wenn ich .htaccess aus dem Stammordner entferne, dann wird mindestens Magento geöffnet, was wiederum aus Gründen verzerrt wird. Könnten Sie mich bitte auf diesem Gebiet führen?
Rizwan Dhuka
10
  1. Befolgen Sie eines der vielen Mac + Nginx + PHP-FPM + MySQL-Setup-Tutorials wie dieses (verwenden Sie es unbedingt brew services):
  2. brew install php70-intl php70-mcrypt
  3. In /usr/local/etc/nginx/nginx.confinside httpdefinieren Sie neue Upstreams

    upstream fastcgi_backend {
      Server 127.0.0.1:9070;
    }
    

    9000ist der Standardport, aber ich würde empfehlen, die PHP-Versionsnummer als letzte zwei Ziffern hinzuzufügen, um einige PHP-Versionen gleichzeitig verwenden zu können, z. B. für M1. Sie können FPM - Port in der Datei ändern /usr/local/etc/php/7.0/php-fpm.d/www.conf- listen = 127.0.0.1:9070und dann Neustart mit PHP brew services restart php70.

  4. Kopieren Sie das nginx.conf.sampleM2-Repository und speichern Sie es unter /usr/local/etc/nginx/magento2.conf. Diese Konfiguration wird fastcgi_backendwie im vorherigen Schritt definiert verwendet.

  5. Richten Sie vhosts und Domains ein
    Server {
      höre 80;
      Servername magento2.dev;
      setze $ MAGE_ROOT / path / to / m2 / project;
      setze $ MAGE_MODE developer;
      include /usr/local/etc/nginx/magento2.conf;
    }
    
  6. Starten Sie Nginx neu
Igloczek
quelle
In diesem ersten Schritt werden Sie aufgefordert, auf Homebrew / Dupes zu tippen. Dies wird abgeschrieben und gibt Ihnen (wenn ich mich recht erinnere) nicht mehr die Formeln, die Sie benötigen. Warnung: Homebrew / Dupes war veraltet. Dieser Hahn ist jetzt leer, da alle seine Formeln migriert wurden
Alan Storm
Sieht so aus, als ob sie dupesjetzt Teil des Kerns sind. Sie können sie also einfach ignorieren und sich brew tap homebrew/phpnur an sie halten.
Igloczek
Vielen Dank. Genau das habe ich gebraucht. Magento-Setup befolgt, aber für Ubuntu und die Zeile 'listen = /run/php-fpm/php-fpm.sock' verursachte ich sooo viele Probleme. Alles, was ich brauchte, ist nicht hinzuzufügen, dass nur zu verwenden: listen = 127.0.0.1:9000 und ändern Sie es zu listen = 127.0.0.1:9071, wenn ich Multi-PHP-Version verwenden wollte. Wir haben ewig nach Lösungen gesucht.
iva
10

Schritt 1: Beenden Sie den vorhandenen Apache-Dienst und installieren Sie Apache über Brew.

$ sudo apachectl stop
$ sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist 2>/dev/null
$ brew install httpd24 --with-privileged-ports --with-http2

Dieser Schritt dauert eine Weile, da Apache aus dem Quellcode erstellt wird. Nach Abschluss sollten Sie eine Nachricht sehen wie:

/usr/local/Cellar/httpd24/2.4.23_2: 212 files, 4.4M, built in 1 minute 60 seconds

Schritt 2: Dies ist wichtig, da Sie diesen Pfad im nächsten Schritt benötigen.

$ sudo cp -v /usr/local/Cellar/httpd24/2.4.23_2/homebrew.mxcl.httpd24.plist /Library/LaunchDaemons

$ sudo chown -v root:wheel /Library/LaunchDaemons/homebrew.mxcl.httpd24.plist

$ sudo chmod -v 644 /Library/LaunchDaemons/homebrew.mxcl.httpd24.plist

$ sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.httpd24.plist

Jetzt haben wir Apache von Homebrew installiert und für den automatischen Start mit einem privilegierten Konto konfiguriert.

Der Server kann unter http: // localhost erreicht werden

Schritt 3: Apache-Konfiguration

Konfigurationsdatei Pfad

/usr/local/etc/apache2/2.4/httpd.conf

Wenn Sie die Konfiguration ändern möchten, sollten Sie dies hier vornehmen

Hinweis: Wir sollten jetzt mod_rewrite aktivieren, das standardmäßig auskommentiert ist.

LoadModule rewrite_module libexec / mod_rewrite.so

Für die Magento-Installation sollte mod_rewrite in dieser Konfigurationsdatei aktiviert sein.

# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   AllowOverride FileInfo AuthConfig Limit
#
AllowOverride All

Schritt 4: PHP Installation

Eine vollständige Liste der verfügbaren Optionen erhalten Sie, indem Sie Folgendes eingeben

$ brew install php71 --with-httpd24

Wir können wählen, welche Version wir verwenden wollen.

Um die Konfigurationseinstellung von PHP für unsere Bedürfnisse anzupassen, z. B. memory_limit, date.timezone, display_errors ... etc / apache2 / 2

/usr/local/etc/php/7.1/php.ini

Schritt 5: Apache PHP Setup

Jetzt haben wir Ihre PHP-Versionen erfolgreich installiert, aber wir müssen Apache anweisen, sie zu verwenden. Wir müssen die Apache-Konfigurationsdatei bearbeiten

/usr/local/etc/apache2/2.4/httpd.conf

durch Ändern des PHP-Pfades.

LoadModule php7_module    /usr/local/opt/php71/libexec/apache2/libphp7.so

Behandeln Sie die PHP-Anforderungen in Apache, indem die folgende Konfiguration geändert werden muss

<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

Speichern Sie die Konfigurationsdatei und starten Sie den Apache neu.

$ sudo apachectl -k restart

Schritt 6: Validierung von PHP

erstelle eine php datei info.php im document root verzeichnis

Inhalt von info.php ist

<?php phpinfo(); ?>

Schritt 6: Überprüfen Sie die Abhängigkeitserweiterung von PHP für Magento in der Datei php.ini.

Erforderliche PHP-Erweiterungen für Magento2:

bc-math 
curl
gd, ImageMagick 6.3.7 (or later) or both
intl
mbstring
mcrypt
mhash
openssl
PDO/MySQL
SimpleXML
soap
xml
xsl
zip
PHP 7 only:
json
iconv

Dann können Sie mit der Installation von Magento fortfahren.

Suresh S
quelle
5
  1. Installieren Sie PHP 7:

    brew install php70-intl php70-mcrypt php70-xdebug
  2. Anschließend können Sie Laravel Valet verwenden, um die Installation von Nginx + PHP-FPM zu automatisieren: https://laravel.com/docs/5.4/valet

    composer global require laravel/valet
    valet install
  3. Erstellen Sie ein Projektverzeichnis, falls Sie noch keines haben (kann beliebig benannt werden)

    mkdir ~/projects
  4. Sagen Sie Laravel Valet, dass Sie Ihre Projekte dort speichern

    cd ~/projects
    valet park
  5. Zum Zeitpunkt dieses Beitrags wurde die Version von Laravel Valet, die den Magento2-Treiber enthält, noch nicht veröffentlicht (sie wurde zusammengeführt , aber noch nicht über ein Tag veröffentlicht). Um es zu benutzen, können Sie entweder:

    • Installieren Sie Laravel Valet über den dev-master-Zweig:

      composer global require laravel/valet:dev-master`
    • oder laden Sie den Treiber herunter und verwenden Sie ihn als lokalen Valet-Treiber:

      curl https://github.com/laravel/valet/raw/master/cli/drivers/Magento2ValetDriver.php -o ~/.valet/Drivers/Magento2ValetDriver.php

Sie können nun nach http://[projectname].dev/Ihrem lokalen Projekt suchen (wobei [Projektname] einem Verzeichnis in ~ / projects entspricht. Beispiel:

~/projects/my-super-awesome-client => my-super-awesome-client.dev

VOLLSTÄNDIGE OFFENLEGUNG: Ich bin einer der Autoren des Magento2-Treibers für Laravel Valet

Joe Constant
quelle
Es ist möglich, dass ich ziemlich dicht bin, aber diese Schritte scheinen unvollständig zu sein (zB valet linking, nginx m2 setup ...). Überdenke ich das?
Benmarks
Der Valet Park kümmert sich um die Anbindung. Solange Sie in Ihrem Projektverzeichnis "parken" und jedes Projekt ein Unterverzeichnis mit einer M2-Installation ist, ist nichts weiter zu tun. Der Magento2-Treiber für Valet kümmert sich um alles, damit Valet weiß, wie man eine M2-Site bedient (es wird also keine zusätzliche Nginx-Konfiguration benötigt). Ja, so einfach ist das wirklich. Valet wurde gebaut, um die Schmerzen der Einrichtung von Laravel-Standorten zu beseitigen. Sie haben es möglich gemacht, es auch für Nicht-Laravel-Projekte zu verwenden, so dass jeder gewinnt
Joe Constant