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:
brew install nginx
Luego de esto, hay que permitir que NGINX arranque automáticamente al iniciar nuestro sistema:
sudo cp /usr/local/opt/nginx/*.plist /Library/LaunchDaemons/
sudo chown root:wheel /Library/LaunchDaemons/homebrew.mxcl.nginx.plist
Arrancamos el servidor por primera vez:
sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.nginx.plist
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:
curl -IL [http://localhost:8080](http://localhost:8080)
Deberíamos recibir una respuesta parecida a esta:
HTTP/1.1 200 OK Server: nginx/1.12.1 Date: Sun, 18 Mar 2018 13:22:15 GMT Content-Type: text/html Content-Length: 419 Last-Modified: Mon, 14 Aug 2017 20:51:57 GMT Connection: keep-alive ETag: "59920d6d-1a3" Accept-Ranges: bytes
Si por el contrario recibimos una respuesta “ HTTP/1.1 404 Not Found “ podemos probar de nuevo ejecutando:
curl -IL [http://localhost:80](http://localhost:80)
Si todo ba bien, entonces procedemos a detener el servicio de NGINX:
sudo launchctl unload /Library/LaunchDaemons/homebrew.mxcl.nginx.plist
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:
mkdir -p /usr/local/etc/nginx/logs
mkdir -p /usr/local/etc/nginx/sites-available
mkdir -p /usr/local/etc/nginx/sites-enabled
mkdir -p /usr/local/etc/nginx/conf.d
mkdir -p /usr/local/etc/nginx/ssl
#En mi caso utilizo esta ruta para el webroot de mi servidor NGINX sudo mkdir -p /Users/fjugaldev/Sites
Asignamos permisos a la carpeta de nuestros proyectos:
sudo chown :staff /Users/fjugaldev/Sites
sudo chmod 775 /Users/fjugaldev/Sites
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:
rm /usr/local/etc/nginx/nginx.conf
curl -L https://gist.githubusercontent.com/fjugaldev/7948bc77aefa24539de5cf45dcde6639/raw/b743ce39ea9a6c73b26d3dbcd667cc479268175d/nginx.conf">https://gist.githubusercontent.com/fjugaldev/7948bc77aefa24539de5cf45dcde6639/raw/b743ce39ea9a6c73b26d3dbcd667cc479268175d/nginx.conf -o /usr/local/etc/nginx/nginx.conf
Utilizaremos una configuración específica para PHP-FPM, para ello lo copiaremos de un repositorio en Github:
curl -L [https://gist.github.com/frdmn/7853158/raw/php-fpm](https://gist.github.com/frdmn/7853158/raw/php-fpm) -o /usr/local/etc/nginx/conf.d/php-fpm
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:
server {
listen 80;
server_name localhost;
root /Users/fjugaldev/Sites/;
access_log /usr/local/etc/nginx/logs/default.access.log main;
location / {
include /usr/local/etc/nginx/conf.d/php-fpm;
}
location = /info {
allow 127.0.0.1;
deny all;
rewrite (.*) /.info.php;
}
error_page 404 /404.html;
error_page 403 /403.html;
}
*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
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Page title -->
<title>Nginx</title>
<!-- Charset -->
<meta charset="iso-8859-1" />
</head>
<body>
<div id="content">
<h1 class="headline">Default website</h1>
<p>Congratulations, your Nginx seems to work just fine. :)</p>
<p>Let me know, in case you have any problems:</p>
<ul>
<li>Twitter: @gil0mendes</li>
</ul>
</div>
</body>
</html>
info.php
<?php echo phpinfo();
Lo siguiente será activar nuestro virtual host por defecto definido, para ello crearemos un symlink hacia nuestra carpeta “ sites-enabled “:
ln -sfv /usr/local/etc/nginx/sites-available/default /usr/local/etc/nginx/sites-enabled/default
Iniciamos de nuevo nuestro servidor NGINX:
sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.nginx.plist
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:
**### SERVER SERVICES ALIAS**
# Nginx
alias nginx.start='sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.nginx.plist'
alias nginx.stop='sudo launchctl unload /Library/LaunchDaemons/homebrew.mxcl.nginx.plist'
alias nginx.restart='nginx.stop && nginx.start'
# PHP-FPM
alias php72-fpm.start="launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.php72.plist"
alias php72-fpm.stop="launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.php72.plist"
alias php72-fpm.restart='php72-fpm.stop && php72-fpm.start'
# MySQL
alias mysql.start="launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist"
alias mysql.stop="launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist"
alias mysql.restart='mysql.stop && mysql.start'
# Nginx Logs
alias nginx.logs.error='tail -250f /usr/local/etc/nginx/logs/error.log'
alias nginx.logs.access='tail -250f /usr/local/etc/nginx/logs/access.log'
Con esto tenemos activados los siguientes comandos de consola para administrar nuestro entorno de desarrollo:
Nginx
nginx.start
nginx.stop
nginx.restart
PHP-FPM
php72-fpm.start
php72-fpm.stop
php72-fpm.restart
MySQL
mysql.start
mysql.stop
mysql.restart
Nginx Logs
nginx.logs.error
nginx.logs.access
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:
brew tap homebrew/dupes brew tap homebrew/php
Instalar PHP-FPM 7.2
brew install php72 --without-apache --with-fpm --with-mysql
Ya con esto tenemos instalado PHP-FPM 7.2. Con los comandos definidos anteriormente podemos controlar nuestros servicios de PHP-FPM:
php72-fpm.start
php72-fpm.stop
php72-fpm.restart
Si accedemos a **http://localhost y [localhost/info](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:
brew install mysql
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
mysql_secure_installation
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:
mysql -u root -p
Nos pedirá la contraseña y luego de eso veremos el símbolo de sistema de mysql
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.