Recientemente he tenido que montar entornos de desarrollo locales para WordPress en varios equipo Mac bajo el sistema operativo MacOS Big Sur 11.0.1. En anteriores ocasiones había utilizado directamente MAMP o XAMP para montar estos entornos, pero en esta ocasión he preferido hacerlo sin ayuda de estas herramientas y, a modo de guía, he guardado una serie de notas que ahora publico en forma de post. Espero que pueda servirte de ayuda si has llegado hasta aquí buscando información para el mismo objetivo.
¿Qué necesitamos para tener nuestro entorno local WordPress de manera totalmente funcional? PHP, MySQL, Apache, y una copia de la versión más reciente de WordPress. Nada más.
PHP
Nuestro Mac con SO MacOS Big Sur 11.0.1 ya incluye la versión de PHP 7.3.22 instalada de forma nativa. Podemos comprobarlo a través del siguiente comando en nuestra consola:
php --version
Necesitaremos definir el fichero php.ini, en el que en caso de necesidad podremos realizar cambios en la configuración de PHP. Para esto copiaremos el fichero de modelo que incluye nuestra instalación de PHP de la siguiente forma:
sudo scp /private/etc/php.ini.default /private/etc/php.ini
Apache
Al igual que con PHP, en nuestra instalación de Mac ya encontramos una versión funcional de Apache. Podremos iniciarlo, detenerlo y reiniciarlo con los siguientes comandos:
sudo apachectl start
sudo apachectl stop
sudo apachectl restart
Podemos probar que vamos por buen camino iniciando Apache y accediendo en nuestro navegador a http://localhost, donde debemos ver el mensaje It works!.
A continuación debemos realizar algunos cambios en la configuración de Apache a través de la edición de algunos de sus ficheros. En primer lugar, editaremos el fichero /private/etc/apache2/httpd.conf
, donde definiremos la carga de módulos necesarios para nuestro WordPress, la ruta de la instalación de nuestros proyectos y sus permisos, el usuario y el grupo que usará nuestro entorno y la llamada a los ficheros que configurarán nuestros dominios locales.
En primer lugar activaremos la carga de los módulos php7_module y rewrite_module. Dentro de httpd.conf buscaremos las siguientes líneas:
LoadModule alias_module libexec/apache2/mod_alias.so
#LoadModule rewrite_module libexec/apache2/mod_rewrite.so
#LoadModule php7_module libexec/apache2/libphp7.so
#LoadModule perl_module libexec/apache2/mod_perl.so
Debemos borrar la almohadilla que encontramos en la primera posición de esas líneas para que se active la carga de los módulos, con un resultado como el siguiente:
LoadModule alias_module libexec/apache2/mod_alias.so
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
LoadModule php7_module libexec/apache2/libphp7.so
#LoadModule perl_module libexec/apache2/mod_perl.so
A continuación, definiremos la ruta de nuestros proyectos buscando y editando la siguiente línea:
# # DocumentRoot: The directory out of which you will serve your # documents. By default, all requests are taken from this directory, but # symbolic links and aliases may be used to point to other locations. # DocumentRoot "/Library/WebServer/Documents" <Directory "/Library/WebServer/Documents">
Reemplazaremos el directorio definido por el directorio con el que nos encontremos más cómodos. En mi caso, prefiero tener una carpeta del dentro de mi carpeta de usuario, por lo que en mi caso tiene una forma como la siguiente:
DocumentRoot "/Users/minombre/dev" <Directory "/Users/minombre/dev">
Solo unas líneas más abajo, definiremos la capacidad de reescritura de enlaces desde el fichero .htaccess, a través de las siguientes líneas:
# 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 None
Debemos reemplazar None por All, quedando esta última línea de la siguiente forma:
AllowOverride All
Ahora configuraremos el usuario el grupo que utilizará nuestro entorno. Esto es importante para evitar los comunes errores de permisos a la hora de subir medios desde nuestro panel de administración de WordPress. Buscaremos las siguientes líneas:
<IfModule unixd_module>
#
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.
#
# User/Group: The name (or #number) of the user/group to run
httpd as.
# It is usually good practice to create a dedicated user and group for
# running httpd, as with most system services.
#
User _www
Group _www
</IfModule>
En este caso cambiaremos los valores marcados por los siguientes:
User minombre
Group staff
Y por último buscaremos la siguientes líneas para activar la llamada al fichero donde configuraremos los dominios locales:
# Virtual hosts
#Include /private/etc/apache2/extra/httpd-vhosts.conf
Al igual que hicimos con la carga de módulo, retiramos la almohadilla que ocupa la primera posición de la línea para activar esta carga. El resultado debe ser el siguiente:
# Virtual hosts
Include /private/etc/apache2/extra/httpd-vhosts.conf
Esto es todo lo que debemos hacer en httpd.conf. Ahora vamos a definir un dominio local para nuestro entorno. Para hacerlo, realizaremos cambios en dos ficheros. En primer lugar, definiremos la el dominio en el fichero /etc/hosts
, donde nos encontraremos lo siguiente:
## # Host Database # # localhost is used to configure the loopback interface # when the system is booting. Do not change this entry. ## 127.0.0.1 localhost 255.255.255.255 broadcasthost ::1 localhost
Aquí, simplemente añadiremos el dominio que queramos usar, quedando de la siguiente forma:
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
127.0.0.1 miwordpress.local
255.255.255.255 broadcasthost
::1 localhost
Y a continuación, asignaremos este nuevo dominio a la ruta local en nuestro equipo donde tendremos la instalación de nuestro WordPress. Recordemos que previamente hemos definido la ruta donde tendremos nuestros proyectos, /Users/minombre/dev
, así que incluiremos en esta ruta la carpeta con la instalación básica de WordPress que descargaremos desde es.wordpress.org.
Haremos esta asignación editando el fichero /private/etc/apache2/extra/httpd-vhosts.conf, en el que encontraremos dos ejemplos de cómo debemos realizar esta asignación. Uno de los modelos es el siguiente:
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host2.example.com
DocumentRoot "/usr/docs/dummy-host2.example.com"
ServerName dummy-host2.example.com
ErrorLog "/private/var/log/apache2/dummy-host2.example.com-error_log"
CustomLog "/private/var/log/apache2/dummy-host2.example.com-access_log" common
</VirtualHost>
Simplemente debemos duplicar este ejemplo y adaptar las definiciones a nuestras necesidades:
<VirtualHost *:80> ServerAdmin miemail@midomio.com DocumentRoot "/Users/minombre/dev/miwordpress" ServerName miwordpress.local ErrorLog "/private/var/log/apache2/miwordpress.local-error_log" CustomLog "/private/var/log/apache2/miwordpress.local-access_log" common </VirtualHost>
Esto es todo lo que debemos configurar relativo a Apache.
MySQL
Al contrario que de lo que sucede con PHP y Apache, MySQL no se encuentra instalado por defecto en nuestro Mac con MacOS Big Sur 11.0.1, así que tendremos que instalarlo manualmente. Realizaremos esta instalación a través de la herramienta Homebrew, así que, si aún no la tenemos instalada, lo haremos a través del siguiente comando:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Ahora que tenemos instalado Homebrew, ya podemos realizar la instalación de MySQL. En el momento de la edición de este post decidí instalar la última versión, 8.0.22:
brew install mysql@8.0.22
Y ahora también tenemos instalado MySQL en nuestro equipo. Al igual que con Apache, debemos conocer las instrucciones para iniciar, detener y reiniciar MySQL:
mysql.server start mysql.server stop mysql.server restart
Por último, debemos definir una contraseña para nuestro usuario root de MySQL o crear uno nuevo, y crear una base de datos para nuestro WordPress. Para realizar estas operaciones y gestionar las bases de datos utilizo la herramienta MySQL Workbench, que podéis descargar a través de mysql.com. Descargado e instalado, y con MySQL corriendo, arrancamos MySQL Workbench.
En primer lugar, crearemos una nueva base de datos vacía a través de la opción Create new scheme y le asignaremos un nombre. El resto de parámetros los dejaremos tal cual los ha definido MySQL Workbench por defecto. Y por último, debemos definir la contraseña para root o crear el nuevo usuario. Desde una pestaña Query ejecutaremos la siguiente instrucción para modificar el usuario root:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'micontraseña';
FLUSH PRIVILEGES;
Si lo que queremos es crear un nuevo usuario lo haremos desde la siguiente forma:
CREATE USER 'nombredeusuario'@'localhost' IDENTIFIED WITH mysql_native_password BY 'micontraseña';
FLUSH PRIVILEGES;
Hasta aquí todos los pasos para configurar nuestro entorno. Ahora solo debemos reiniciar nuestro Apache y nuestro MySQL y acceder al dominio local que hemos definido para iniciar la instalación de nuestro WordPress. ¡Ya puedes trabajar en local!