DESDE CERO: Instalar NGINX + PHP-FPM 7.2 + MySQL 5.7 en macOS

Instalar NGINX + PHP-FPM 7.2 + MySQL 5.7

En este post quiero mostrarles paso a paso como instalar y configurar tu ambiente de desarrollo en macOS para trabajar con NGINX + PHP-FPM 7.2 + MySQL 5.7.

NGINX es un potente servidor web/proxy inverso que a su vez incluye servicios de correo electrónico. Es una alternativa al APACHE que a mi parecer ha venido ganando mucha reputación últimamente y se ha convertido en el segundo servidor web más utilizado.

Entre alguna de sus bondades mas relevantes tenemos:

  • Es ligero y potente a la vez, permite equilibrar la carga entre los servidores back-end, o para proporcionar almacenamiento en caché para un servidor back-end lento.
  • Permite ejecutar PHP como un servicio y no como un módulo.
  • Permite ejecutar varias versiones de PHP al mismo tiempo, es decir, cada proyecto puede configurarse en el virtual host para que utilice una versión distinta de PHP según sea requerido.

Y para no extendernos tanto vamos a proceder con los pasos de instalación y configuración de nuestro ambiente de desarrollo.

Vale la pena destacar que estaré utilizando Homebrew para instalar cada paquete, si deseas saber como instalar Homebrew, échale un vistazo a mi post: Homebrew: Instalar paquetes en macOS nunca fué tan sencillo

Importante: Asegúrate de eliminar primero el apache o en su defecto, detener los servicios y evitar que arranquen con cada inicio del sistema

INSTALAR Y CONFIGURAR NGINX + PHP-FPM 7.2 + MySQL 5.7

INSTALAR NGINX

El primer paso es ejecutar el siguiente comando para instalar NGINX:

Luego de esto, hay que permitir que NGINX arranque automáticamente al iniciar nuestro sistema:

Arrancamos el servidor por primera vez:

Generalmente, la configuración por defecto apunta hacia nuestro puerto 8080, por lo que hagamos una prueba de nuestro servidor para verificar que esté ejecutandose:

Deberíamos recibir una respuesta parecida a esta:

Si por el contrario recibimos una respuesta “HTTP/1.1 404 Not Found” podemos probar de nuevo ejecutando:

Si todo ba bien, entonces procedemos a detener el servicio de NGINX:

CONFIGURAR NGINX

Lo siguiente será configurar lo básico de NGINX para tener todo preparado para nuestros proyectos futuros, para ello crearemos algunos directorios necesarios:

Asignamos permisos a la carpeta de nuestros proyectos:

Eliminamos el archivo nginx.conf (que tambien lo tienes disponible en nginx.conf.default por si lo quieres recuperar) y utilizaremos una configuración mejorada:

Utilizaremos una configuración específica para PHP-FPM, para ello lo copiaremos de un repositorio en Github:

Vamos a añadir un host virtual por defecto, para esto crearemos un fichero en la ruta “/usr/local/etc/nginx/sites-availabe” llamado “default

Y añadimos el siguiente contenido:

Nota: Recuerda cambiar el parámetro root por la ruta que hayan elegido para el webroot de su servidor web.

Luego creamos un archivo index.html y info.php en nuestro webroot definido.

index.html

info.php

Lo siguiente será activar nuestro virtual host por defecto definido, para ello crearemos un symlink hacia nuestra carpeta “sites-enabled“:

Iniciamos de nuevo nuestro servidor NGINX:

Controla NGINX como todo un Maestro

Probablemente, más temprano que tarde, tendrás que reiniciar por cualquier razón los servicios de NGINX, PHP-FPM o ver los logs de errores. Te dejo a continuación unos alias que seguro serán de gran utilidad para ti.

Para poder usarlos, debes definir los alias en el archivo ˜/.bash_profile o en mi caso que utilizo el shell ZSH en el archivo ˜/.zshrc, a continuación los alias:

Con esto tenemos activados los siguientes comandos de consola para administrar nuestro entorno de desarrollo:

Nginx

PHP-FPM

MySQL

Nginx Logs

Instalar PHP-FPM 7.2

Lo próximo a realizar es instalar PHP-FPM 7.2, para ello debemos:

Actualizar las formular de Homebrew para PHP:

Instalar PHP-FPM 7.2

Ya con esto tenemos instalado PHP-FPM 7.2. Con los comandos definidos anteriormente podemos controlar nuestros servicios de PHP-FPM:

Si accedemos a http://localhost y http://localhost/info debemos poder ver un mensaje de que nuestro NGINX esta funcionando correctamente y en el segundo url veremos un phpinfo() donde nos debe indicar que estamos ejecutando PHP versión 7.2.x

Instalar MYSQL 5.7

El último paso es instalar MySQL 5.7, para ello ejecutamos:

Lo cual debe instalarnos siempre la última versión de MySQL

Lo siguiente será incorporarle seguridad a nuestra instalación de MySQL, para ello ejecutamos 

Por defecto MySQL viene sin password en el root, por lo que es recomendable ejecutar el comando anterior y seguir los pasos que se nos presenta en el “Asistente de configuración“mysql_secure_installation

Al ejecutar el comando nos preguntará lo siguiente:

> Enter current password for root (enter for none):

Press ENTER since you don’t have one set.

> Change the root password? [Y/n]
Confirm using ENTER to accept the suggested default answer (Y) and enter it here in the prompt.

> Remove anonymous users? [Y/n]

Press again ENTER. They are not necessary.

> Disallow root login remotely? [Y/n]

ENTER — No need to log in as root from any other IP than 127.0.0.1.

> Remove test database and access to it? [Y/n]

ENTER — You don’t need the testing tables.

> Reload privilege tables now? [Y/n]

ENTER — Reload the privilege tables to ensure all of the changes made so far will take effect immediately.

Luego de haber contestado a todos los pasos del asistente, vamos a asegurarnos de que todo funciona bien y que podemos conectarnos a MySQL con la nueva clave establecida, para esto ejecutamos:

Nos pedirá la contraseña y luego de eso veremos el símbolo de sistema de mysql

Para salir basta con escribir “quit

Y esto es todo, ya tenemos nuestro entorno de desarrollo ejecutando NGINX como servidor web, PHP-FPM versión 7.2 y MySQL 5.7 para nuestro motor de base de datos. 

Si te gustó este post, ayúdame a que pueda servirle a muchas más personas, compartiendo mis contenidos en tus redes sociales.

Espero que este post haya sido de gran ayuda para ti, y como siempre, cualquier inquietud o duda que tengas, puedes contactarme por cualquiera de las vías disponibles, o dejando tus comentarios al final de este post. También puedes sugerir que temas o post te gustaría leer a futuro.