Ejecutar Magento 2 a través de FastCGI (no mod_php) en OS X a través de paquetes brew

23

Basado en varias publicaciones de foros y conversaciones en la comunidad, parece que algunas personas están ejecutando instancias de desarrollo de Magento 2 en OS X a través de un entorno PHP que no usa el combo Apache / PHP incorporado y en su lugar usa paquetes de brewpara obtener un FastCGI PHP entorno en funcionamiento con nginxy / o apache.

¿Alguien tiene una lista de comandos e instrucciones de configuración para poner en funcionamiento Magento 2 en OS X utilizando paquetes brew O algún otro medio para ejecutar PHP en un entorno FastCGI en OS X? No estoy buscando Docker o Vagrant: quiero ejecutar PHP de forma nativa en OS X y no quiero usarlo mod_php.

Alan Storm
fuente
No estoy seguro de si es útil, pero nunca fui un fanático de la cerveza, por lo que siempre instalé PHP para usar de forma nativa desde php-osx.liip.ch
Marcel Hauri
@mhauri Si tiene instrucciones para obtener el php-fpm de los paquetes de liip ejecutando una respuesta completa, sería genial.
Alan Storm

Respuestas:

12

Apache + PHP-FPM con Homebrew

Paso 0: antes de comenzar

brew update
brew tap homebrew/services

Paso 1: Apache

1.- Asegurémonos de detener el servicio de apache incorporado

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

2.- Instalar apache2.4

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

Este paso llevará un tiempo ya que tiene que compilar Apache.

3.- Verifique que esté instalado correctamente, debería ver un mensaje similar a:

Para iniciar, inicie homebrew / apache / httpd24 ahora y reinicie al inicio: los servicios de sudo brew inician homebrew / apache / httpd24

Ejecutemos el comando:

sudo brew services start homebrew/apache/httpd24

Verifique que todo se esté ejecutando cargando, http: // localhost después de lo cual deberíamos ver ¡Funciona! mensaje Funciona

Paso 2: PHP-FPM

1.- Continuemos instalando PHP

brew install -v homebrew/php/php70

2.- Inicie PHP-FPM, lo bueno de homebrew / php es que instala PHP y FPM, por lo que solo necesitamos ejecutar lo siguiente:

brew services start homebrew/php/php70

Por ahora usemos la configuración predeterminada, si necesitamos cambiarla, la configuración se encuentra en /usr/local/etc/php/7.0/

Paso 3: configuración

1.- Abra la configuración de Apache:

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

2.- Descomenta las siguientes líneas:

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

3.- Configure la configuración del proxy para PHP-FPM:

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

Por lo general, configuraría esto por vhost para apuntarlo al directorio correcto

4.- Finalmente, creemos una página phpinfo () dentro de / usr / local / var / www / htdocs / y confirmemos que todo funciona al cargar la página de prueba: Tenemos php

Hay algunos ajustes y vueltas más, pero esto debería ponerlo en funcionamiento directamente en OSX.

Para obtener un tutorial más detallado de la configuración que utilizamos, verifique la configuración (vhost, grupos de php, etc.) en este cuadro vagabundo:

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

Allan MacGregor
fuente
Tuve que un en brew install homebrew/apache/httpd24 --with-privileged-portslugar de un brew install httpd24 --with-privileged-ports. ¿Eso coincide con tu experiencia en el mundo real?
Alan Storm
@AlanStorm Seguí el mismo procedimiento pero de alguna manera .htaccess está creando un problema al cargar index.php de Magento. No permite que la página se abra; sin embargo, si elimino .htaccess de la carpeta raíz, al menos se abre Magento, que nuevamente se distorsiona por razones. ¿Podrías guiarme en esto?
Rizwan Dhuka
10
  1. Siga uno de los muchos tutoriales de configuración de Mac + Nginx + PHP-FPM + Mysql como este (asegúrese de usar brew services):
  2. brew install php70-intl php70-mcrypt
  3. En el /usr/local/etc/nginx/nginx.confinterior httpdefinir nueva corriente arriba

    aguas arriba fastcgi_backend {
      servidor 127.0.0.1:9070;
    }
    

    9000es el puerto predeterminado, pero recomendaría agregar el número de versión de PHP como dos últimos dígitos, para poder usar algunas versiones de PHP al mismo tiempo, es decir, para M1. Puede modificar el puerto FPM en el archivo /usr/local/etc/php/7.0/php-fpm.d/www.conf- listen = 127.0.0.1:9070y luego reiniciar usando PHP brew services restart php70.

  4. Copie el nginx.conf.samplerepositorio del formulario M2 y guárdelo como /usr/local/etc/nginx/magento2.conf. Esta configuración se utilizará fastcgi_backenddefinida en el paso anterior.

  5. Configurar vhosts y dominios
    servidor {
      escucha 80;
      nombre_servidor magento2.dev;
      establecer $ MAGE_ROOT / path / to / m2 / project;
      establecer desarrollador $ MAGE_MODE;
      incluir /usr/local/etc/nginx/magento2.conf;
    }
    
  6. Reiniciar Nginx
igloczek
fuente
esa primera idea le pide que toque homebrew / dupes, que se deprecia y que (si recuerdo) ya no le dará las fórmulas que necesita. Advertencia: homebrew / dupes fue en desuso. Este toque ahora está vacío ya que se migraron todas sus fórmulas
Alan Storm
Parece que dupesahora son parte del núcleo, por lo que puede ignorarlo y quedarse brew tap homebrew/phpsolo.
igloczek
Gracias. Esto es exactamente lo que necesitaba. Seguí la configuración de Magento pero para Ubuntu y la línea 'listen = /run/php-fpm/php-fpm.sock' me estaba causando tantos problemas. Todo lo que necesitaba es no agregar eso solo para usar: listen = 127.0.0.1:9000 y cambiarlo para escuchar = 127.0.0.1:9071 si quisiera usar la versión PHP múltiple. Pasé años buscando soluciones.
iva
10

Paso 1: Detenga el servicio de apache existente e instale Apache a través de 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

Este paso lleva un tiempo, ya que construye Apache desde la fuente. Al finalizar, debería ver un mensaje como:

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

Paso 2: Esto es importante porque necesitará esa ruta en el siguiente paso.

$ 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

Ahora hemos instalado Apache de Homebrew y lo configuramos para que se inicie automáticamente con una cuenta privilegiada.

Se puede acceder al servidor http: // localhost

Paso 3: Configuración de Apache

Ruta del archivo de configuración

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

si desea cambiar la configuración, debe hacerlo aquí

Nota: ahora deberíamos habilitar mod_rewrite que está comentado por defecto.

LoadModule rewrite_module libexec / mod_rewrite.so

Para la instalación de Magento, mod_rewrite debe estar habilitado en este archivo de configuración.

# 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

Paso 4: instalación de PHP

podemos obtener una lista completa de las opciones disponibles para incluir escribiendo

$ brew install php71 --with-httpd24

Podemos elegir qué versión vamos a usar.

Para configurar la configuración de ajuste de PHP para nuestras necesidades, por ejemplo, memory_limit, date.timezone, display_errors ... etc / apache2 / 2

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

Paso 5: Configuración de Apache PHP

Ahora hemos instalado con éxito sus versiones de PHP, pero necesitamos decirle a Apache que las use. necesitamos editar el archivo de configuración de apache

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

modificando la ruta de php.

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

Manejar las solicitudes de PHP en Apache por la siguiente configuración necesita ser modificada

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

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

Guarde el archivo de configuración y reinicie el apache.

$ sudo apachectl -k restart

Paso 6: Validar PHP

crear un archivo php info.php en el directorio raíz del documento

El contenido de info.php es

<?php phpinfo(); ?>

Paso 6: Verifique la extensión de dependencia de PHP para Magento en el archivo php.ini.

Extensiones PHP requeridas para 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

Luego puede continuar con la instalación de Magento.

Suresh S
fuente
5
  1. Instalar PHP 7:

    brew install php70-intl php70-mcrypt php70-xdebug
  2. Luego puede usar Laravel Valet para automatizar la instalación de Nginx + PHP-FPM: https://laravel.com/docs/5.4/valet

    composer global require laravel/valet
    valet install
  3. Cree un directorio de proyecto si aún no tiene uno (se puede nombrar como desee)

    mkdir ~/projects
  4. Dile a Laravel Valet que guardas tus proyectos allí

    cd ~/projects
    valet park
  5. En el momento de esta publicación, la versión de Laravel Valet que contiene el controlador Magento2 aún no se ha lanzado (se ha fusionado , pero aún no se ha lanzado a través de una etiqueta). Para usarlo puedes:

    • Instale Laravel Valet a través de la rama dev-master:

      composer global require laravel/valet:dev-master`
    • o descargue el controlador y úselo como un controlador Valet local:

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

Ahora puede navegar para http://[projectname].dev/ver su proyecto local (donde [nombre del proyecto] corresponde a un directorio en ~ / projects. Por ejemplo:

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

DIVULGACIÓN COMPLETA: Soy uno de los autores del controlador Magento2 para Laravel Valet

Joe Constant
fuente
Es posible que esté siendo bastante denso, pero estos pasos parecen incompletos (por ejemplo valet link, configuración de nginx m2 ...). ¿Estoy pensando demasiado en esto?
Benmarks
El servicio de aparcacoches se encarga de la conexión. Mientras se "estacione" en el directorio de sus proyectos y cada proyecto sea un subdirectorio que contenga una instalación M2, no hay nada más que hacer. El controlador Magento2 para valet se encarga de todo para que Valet sepa cómo hacer un servidor de un sitio M2 (por lo que no se necesita configuración nginx adicional). Sí, realmente es así de simple. El servicio de aparcacoches fue construido para eliminar el dolor de establecer sitios Laravel. Permitieron usarlo también para proyectos que no son de Laravel para que todos ganen
Joe Constant