Servidor Apache y PHP en macOS Mojave

Apple lanzó macOS Mojave 10.14 en septiembre de 2018 con Apache y PHP integrados en el sistema. Utilizaremos los programas Apache y PHP preinstalados para dejarlos operativos sin instalar herramientas de terceros, de forma manual, con los archivos de configuración y el Terminal.

Apache

El nuevo macOS Mojave viene con Apache preinstalado. Todo lo que tenemos que hacer es configurarlo y activarlo. Para verificar la versión de Apache instalada, ejecuta el siguiente comando en Terminal:

$ httpd -v

macOS Mojave viene con Apache 2.4.34. Para iniciar, detener o reiniciar el servidor web Apache tienes a tu disposición los comandos siguientes (solicitan la contraseña de administrador):

$ sudo apachectl start
$ sudo apachectl stop
$ sudo apachectl restart

Después de arrancar Apache pruébalo abriendo un navegador en http: // localhost. Verás la siguiente salida en tu navegador: ¡Funciona! En caso de que no puedas verlo, ejecuta el siguiente comando para verificar el error:

$ sudo apachectl configtest

Este comando informa sobre errores de sintaxis de archivos de configuración localizando incluso la línea del error y otros posibles problemas que haya que resolver. Cuando todo está bien informa «Syntax OK».

Carpeta del sitio web

DocumentRoot es el directorio donde colocamos los archivos de nuestro sitio web. En Mac tenemos dos posibles ubicaciones, una perteneciente al sistema y otra que pertenece al usuario:
/Library/Webserver/Documents
/Usuarios/yo/Web.
En este artículo vamos a configurarlo en la carpeta del usuario.

Creando el archivo user.conf

Ahora es el momento de crear un archivo user.conf que ayudará a configurar el directorio raíz. Nota: utiliza tu verdadero nombre de usuario en lugar de la palabra yo que empleo en los textos.

El comando whoami en Terminal mostrará tu nombre de usuario. Abre Terminal y ve al directorio:

$ cd /etc/apache2/users/

Crea y abre el archivo de configuración user.conf dentro de esa carpeta:.

$ sudo pico user.conf

Escribe lo siguiente en el archivo:

<Directory "/Users/yo/Sites/">
AllowOverride All
Options Indexes MultiViews FollowSymLinks
Require all granted
</Directory>

Ctrl + O para guardar y Ctrl + X para salir. Los permisos de este archivo deben ser «-rw-r–r– root wheel «, para dejarlo con esas opciones ejecuta en Terminal:

$ sudo chmod 644 user.conf

Configuración del archivo httpd.conf

Escribe en terminal para ir al directorio apache2:

$ cd /etc/apache2/

Dentro de este directorio está el archivo httpd.conf. Por si acaso haz una copia de seguridad con este comando en Terminal:

$ sudo cp httpd.conf httpd.conf.backup

Abrimos el archivo httpd.conf usando el editor pico que viene por defecto en macOS:

$ sudo pico httpd.conf

Hay que descomentar unas cuantas líneas, para ello hay que borrar el carácter # del inicio de la línea.
Para permitir la carga de los módulos requeridos:

LoadModule authz_core_module libexec/apache2/mod_authz_core.so
LoadModule authz_host_module libexec/apache2/mod_authz_host.so
LoadModule userdir_module libexec/apache2/mod_userdir.so
LoadModule include_module libexec/apache2/mod_include.so
LoadModule rewrite_module libexec/apache2/mod_rewrite.so

Y para configurar el directorio web del usuario:

Include /private/etc/apache2/extra/httpd-userdir.conf

También hay que definir la ubicación del directorio web, es el parámetro DocumentRoot. Encuentra las líneas siguientes y coméntalas agregando # al principio de la línea:

#DocumentRoot "/Library/WebServer/Documents"
#<Directory "/Library/WebServer/Documents">

Añade las siguientes dos líneas debajo de las líneas comentadas:

DocumentRoot "/Users/yo/Sites/"
<Directory "/Users/yo/Sites/">

Además la opción AllowOverride None ha de cambiar a AllowOverride All de forma que la sección DocumentRoot ahora debería verse así:

#DocumentRoot "/Library/WebServer/Documents"
#<Directory "/Library/WebServer/Documents">
DocumentRoot "/Users/yo/Sites/"
<Directory "/Users/yo/Sites/">
    Options FollowSymLinks Multiviews
    MultiviewsMatch Any
    AllowOverride All
    Require all granted

Ctrl + O para guardar y Ctrl + X para salir.

Configuración del archivo httpd-userdir.conf

Escribe el siguiente comando en Terminal para ir al directorio:

$ cd /etc/apache2/extra/

Por si acaso haz una copia de seguridad con este comando en Terminal:

$ sudo cp httpd-userdir.conf httpd-userdir.conf.backup

Abre el archivo con pico:

$ sudo pico httpd-userdir.conf

Descomenta la línea:

Include /private/etc/apache2/users/*.conf

Ctrl + O para guardar y Ctrl + X para salir. Verifica que todo esté configurado correctamente con el comando configtest y reinicia el servidor web:

$ sudo apachectl configtest
Syntax OK
$ sudo apachectl restart

PHP

macOS Mojave viene con PHP 7.1 preinstalado. Para verificar la versión de PHP en Terminal, escribe:

$ php -v

Abre el archivo httpd.conf:

$ sudo pico /etc/apache2/httpd.conf

Para poder ejecutar PHP descomenta la línea:

LoadModule php7_module libexec/apache2/libphp7.so

Ctrl + O para guardar y Ctrl + X para salir. Reinicia Apache para recoger los cambios.

Probando PHP en el servidor web

Crea un archivo index.php en la carpeta raíz del sitio web (/Users/yo/Sites) y ábrelo con los siguientes comandos en Terminal:

$ touch ~/Sites/index.php
$ pico ~/Sites/index.php

Escribe en él esta línea simple que, en código PHP, ejecuta la orden de mostrar en pantalla información muy detallada sobre PHP y Apache:

<? phpinfo(); ?>

Ctrl + O para guardar y Ctrl + X para salir. Abre localhost o 127.0.0.1 en el navegador y obtendrás una página web con esa información detallada.

Apache activo en cada arranque del sistema

Si deseas que Apache se inicie automáticamente cada vez que enciendes el Mac puedes ejecutar este comando en Terminal:

sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist

Archivos de sistema ocultos en Mac

Si en algún momento deseas ver en el Finder las carpetas ocultas a las que se hace referencia en este artículo, recuerda los comandos, Para mostrar u ocultar archivos en Mac, ejecuta en Terminal:

defaults write com.apple.finder AppleShowAllFiles YES;killall Finder
defaults write com.apple.finder AppleShowAllFiles NO;killall Finder