Instalación y configuración de Apache + PHP 7.2 + MariaDb en MacOS con Homebrew


1. Instalación de Homebrew y utilidades de XCode

Lo primero que haremos es instalar la línea de comandos de homebrew que nos facilitará mucho la tarea de instalar nuevos paquetes. Para ello:

$ /usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”

$ xcode-select –install

Una vez instalado añadimos los taps necesarios y hacemos diagnóstico con los siguientes comandos:

$ brew tap homebrew/core

$ brew doctor

$ brew update

$ brew upgrade

2. Instalación de Apache 2.4.

Por defecto, MacOS viene con apache de serie pero queremos que no lo gestione Mac y hacerlo con homebrew, para ello paramos el servicio y lo desactivamos con el siguiente comando:

$ sudo apachectl stop

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

Ahora instalamos y arrancamos apache con nuestro homebrew:

$ brew install httpd

$ sudo brew services start httpd

Con estos comandos instalaremos y el servicio se arrancará en el login. Para arrancar o parar el servicio tenemos estos comandos:

# apachectl -k stop

# apachectl -k start

# apachectl -k restart

3. Instalación de PHP 7.2.

Vamos a instalar php 7.2 por ser la versión más estable actualmente, si quisieramos instalar la última versión de php sólo habría que dejar el comando sin la parte de @7.2:

$ brew install php@7.2

Vamos a hacer que esta versión sea la principal tanto en el cli como en web:

$ 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

$ source ~/.bash_profile

Podemos comprobar la versión del cli con el siguiente comando:

$ php -v

Que debería darnos una salida como la que sigue:

PHP 7.2.22 (cli) (built: Sep 14 2019 18:36:32) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Xdebug v2.7.2, Copyright (c) 2002-2019, by Derick Rethans
    with Zend OPcache v7.2.22, Copyright (c) 1999-2018, by Zend Technologies

4. Configuración de Apache.

Vamos a editar apache para que sea capaz de ejecutar php, para ello, editamos el archivo httpd.conf con nuestro editor preferido, en este caso, vamos a usar nano:

$ nano /usr/local/etc/httpd/httpd.conf

Lo primero que haremos será cambiar el puerto por defecto 8080 por el normal que es el 80. Buscamos la línea que pone Listen 8080 y la sustituimos con Listen 80. Como recordatorio decir que en nano se puede buscar con Control + W.

Ahora vamos a activar algunos módulos de apache, buscamos las siguientes líneas y, si estan comentadas, es decir, si tienen una almohadilla delante se la quitamos dejando las líneas tal que así:

LoadModule deflate_module lib/httpd/modules/mod_deflate.so
LoadModule expires_module lib/httpd/modules/mod_expires.so
LoadModule ssl_module lib/httpd/modules/mod_ssl.so
LoadModule socache_shmcb_module lib/httpd/modules/mod_socache_shmcb.so
LoadModule vhost_alias_module lib/httpd/modules/mod_vhost_alias.so
LoadModule userdir_module lib/httpd/modules/mod_userdir.so
LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so

Al final de los LoadModule añadimos la siguiente línea para que cargue php:

LoadModule php7_module /usr/local/opt/php@7.2/lib/httpd/modules/libphp7.so

Activamos el ServerName por defecto, buscamos ServerName y ponemos:

ServerName localhost

Añadimos index.php al directory index:

DirectoryIndex index.php index.html

Añadimos la directiva FilesMatch para poder procesar los archivos .php:

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

También vamos a activar los virtual hosts de apache y ssl, para ello descomentamos las siguientes líneas dejándolas de esta forma:

Include /usr/local/etc/httpd/extra/httpd-vhosts.conf
Include /usr/local/etc/httpd/extra/httpd-ssl.conf

5. Configuración de SSL.

Abrimos el archivo de configuración de SSL de apache:

$ nano /usr/local/etc/httpd/extra/httpd-ssl.conf

Por defecto brew usa el puerto 8443 para acceder mediante HTTPS así que sustituimos en todos los lugares donde aparezca este puerto por el 443.

Generamos el certificado en el directorio htttp:

$ cd /usr/local/etc/httpd
$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.crt

Reiniciamos apache

# apachectl -k restart

6. Configuración para que apache lea nuestra carpeta de usuario.

Lo más cómodo es que apache use como carpeta una que esté directamente en nuestro home, es decrir, en /Users/MI-USUARIO/, para esto vamos a hacer algunas modificaciones más a la configuración de apache en httpd.conf:

Cambiamos el usuario y el grupo por defecto de apache _www, por el nuestro:

User MI-USUARIO
Group staff

Incluimos la configuración de directorio de usuario descomentando la siguiente línea en el httpd.conf:

Include /usr/local/etc/httpd/extra/httpd-userdir.conf

Por defecto la carpeta de usuario que usa apache será public_html, nosotros vamos a usar Sites, así que abrimos el archivo de configuración:

$ nano /usr/local/etc/httpd/extra/httpd-userdir.conf

Y cambiamos el UserDir  y el Directory de la siguiente forma:

UserDir Sites
...
<Directory "/Users/*/Sites">

Después de reiniciar apache ya tendríamos acceso a nuestra carpeta Sites (si la hemos creado), con la siguiente ruta: http://localhost/~MI-USUARIO/, pero como este ordenador es de uso de una sóla persona, mejor, vamos a crear un virtualhost genérico hacia nuestra carpeta de usuario para que al poner localhost vaya directamente ahí sin tener que agregar al usuario, para ello configuramos el siguiente archivo:

$ nano /usr/local/etc/httpd/extra/httpd-vhosts.conf

Eliminamos los virtualhost por defecto y añadimos:

<VirtualHost *:80>
    DocumentRoot "/Users/MI-USUARIO/Sites"
    ErrorLog "/Users/MI-USUARIO/Sites/logs/global-error_log"
    CustomLog "/Users/MI-USUARIO/Sites/logs/global-access_log" common
</VirtualHost>

<VirtualHost *:443>
    DocumentRoot "/Users/MI-USUARIO/Sites"
    ErrorLog "/Users/MI-USUARIO/Sites/logs/global-ssl-error_log"
    CustomLog "/Users/MI-USUARIO/Sites/logs/global-ssl-access_log" common
    SSLEngine on
    SSLCertificateFile "/usr/local/etc/httpd/server.crt"
    SSLCertificateKeyFile "/usr/local/etc/httpd/server.key"
</VirtualHost>

Por último, creamos nuestras carpetas y reiniciamos apache:

$ mkdir -p ~/Sites/logs

# apachectl -k restart

7. Instalación de MariaDB

Con los siguientes comando instalamos mysql y hacemos que arranque al inicio:

$ brew install mariadb

$ brew services start mariadb

También podemos controlar el servicio con los siguientes comandos:

$ mysql.server start

$ mysql.server stop

Ponemos contraseña al usuario root  de MySQL, mucho cuidado porque este comando es necesario hacerlo con sudo

$ sudo mysql_secure_installation

Vamos siguiendo los pasos del script y con esto ya podremos acceder a nuestra base de datos.

8. Instalación y configuración de PHP X-Debug.

Depurar el código es muy útil para ver como va la cosa, así que vamos a instalar Xdebug:

$ pecl install xdebug

Editamos el php.ini

$ nano /usr/local/etc/php/7.2/php.ini

Ya sólo queda añadir la configuración al php.ini, por defecto al instalar xdebug nos habrá metido una línea al inicio del php.ini:

zend_extension=”xdebug.so”

La eliminamos de ahí y copiamos lo siguiente al final:

zend_extension="xdebug.so"
xdebug.remote_enable = 1
xdebug.remote_connect_back = 1
xdebug.remote_port = 9000
xdebug.max_nesting_level = 512
xdebug.remote_autostart = 1

Reiniciamos apache y a programar

# apachectl -k restart

9. Instalación de phpMyAdmin.

Para terminar este tutorial vamos a añadir phpMyAdmin. La manera más sencilla es descargarlo desde su web:

https://files.phpmyadmin.net/phpMyAdmin/4.9.1/phpMyAdmin-4.9.1-all-languages.zip

Descomprimimos el archivo, le ponemos el nombre que queramos, por ejemplo, phpMyAdmin, y movemos la carpeta a nuestra carpeta Sites. Ahora podremos acceder a él mediante la URL http://localhost/phpMyAdmin.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *