Apache, Php y Mysql en OSX
Si queremos tener un entorno de desarrollo web o simplemente tener una web en nuestro Mac podemos activar el Apache y PHP que vienen por defecto, además podemos instalar un servidor de Bases de Datos Mysql con su gestor web phpMyAdmin (muy útil para consultar y hacer cambios) Teniendo un completo entorno de desarrollo en local.
Vamos a empezar por activar y configurar el Apache que viene por defecto en OSX, que desde la versión 10.8 hay que hacerlo vía terminal, pero que casi se agradece ya que nos permite una configuración mucho más personalizada.
Para comprobar la configuración si está correcta o hay algún error:
sudo apachectl configtest
Para arrancar el Apache:
sudo apachectl start
Para pararlo:
sudo apachectl stop
Para pararlo y reiniciarlo de una sola vez (restart):
sudo apachectl restart
Para saver que versión de Apache está instalada:
httpd -v Server version: Apache/2.4.18 (Unix) Server built: Feb 20 2016 20:03:19
NOTA: La versión de Apache en OSX El Capitan empieza en 2.4.16, siendo la 2.4.18 para OSX 10.11.4
Una vez que el Apache está ejecutandose podemos probar en un navegador la URL "http://localhost" y veremos el texto "It wotks!" que será que el Apache está funcionando correctamente. Si da algún tipo de error podemos ejecutar "sudo apachectl configtest" para ver si hay algún error en la configuración.
Por defecto en OSX hay DOS Document Root, uno a nivel de sistema (digamos que común para todos los usuarios) y otro a nivel de usuario (uno por cada usuario del sistema ya que va en la home de cada usuario).
El Document Root a nivel de sistema cuya url es "http://localhost" está ubicado en:
/Library/WebServer/Documents/
El Document Root a nivel de usuario cuya url es "http://localhost/~usuario" está ubicado en:
~/Sites
Por defecto esta carpeta NO existe por lo que hay que crearla y requiere cambiar algunas líneas de configuración. Aunque NO recomiendo este tipo de configuración pongo a continuación como activarlo:
Creamos o editamos el fichero "/etc/apache2/users/usuario.conf":
sudo vim /etc/apache2/users/usuario.conf
y configuramos lo siguiente:
<Directory "/Users/usuario/Sites/"> AllowOverride All Options Indexes MultiViews FollowSymLinks Require all granted </Directory>
Los permisos de este fichero deben ser 644 por lo que procedemos a cambiarlos:
sudo chmod 644 /etc/apache2/users/usuario.conf
Ahora necesitamos activar (quitando el # del proncipio de la línea) ciertas líneas del fichero:
sudo vim /etc/apache2/httpd.conf
Todas estas líneas (realmente con las 2 primera debe ser suficiente) deben estar descomentadas (sin el # al principio):
Include /private/etc/apache2/extra/httpd-userdir.conf LoadModule userdir_module libexec/apache2/mod_userdir.so LoadModule authz_core_module libexec/apache2/mod_authz_core.so LoadModule authz_host_module libexec/apache2/mod_authz_host.so LoadModule include_module libexec/apache2/mod_include.so LoadModule rewrite_module libexec/apache2/mod_rewrite.so
Ahora editamos el fichero:
sudo vim /etc/apache2/extra/httpd-userdir.conf
Y descomentamos esta línea que permite cargar las configuraciones de cada usuario configurado:
Include /private/etc/apache2/users/*.conf
Por último comprobamos que no hay errores y recargamos Apache:
sudo apachectl configtest sudo apachectl restart
Si vamos al navegador y tecleamos la url "http://localhost/~usuario" nos saldrá un listado del directorio ya que por defecto solo hemos creado la carpeta (~/Sites).
NOTA: Para saber el nombre nuestro usuario corto que es el que debemos usar donde pone "usuario" podemos ejecutar el comando "whoami" que nos lo muestra.
Si realmente queremos un entorno de desarrollo y sobre todo queremos varias webs necesitamos el uso de VirtualHost para tener configuraciones personalizadas por cada web o site. Para ello tenemos que editar el fichero:
sudo vim /etc/apache2/httpd.conf
Y descomentamos estas dos líneas que permiten VirtualHost y alias:
Include /private/etc/apache2/extra/httpd-vhosts.conf LoadModule vhost_alias_module libexec/apache2/mod_vhost_alias.so
Ahora prodemos a crear el/los VirtualHost que necesitemos, para ello editamos el que acabamos de descomentar:
sudo vim /etc/apache2/extra/httpd-vhosts.conf
y configuramos los VirtuHost que necesitemos (por defecto vendrá alguno qu epodemos comentar o borrar o simplemente adaptarlo a nuestras necesidades):
<VirtualHost *:80> # dominio SIN www ServerName dominio.com # alias www.dominio.com ServerAlias www.dominio.com # alias prueba.dominio ServerAlias prueba.dominio.com # correo del administrador ServerAdmin tucorreo # carpeta que contiene la web DocumentRoot /Users/usuario/Sites/dominio.com # formato de log de acceso # Remote host · remote logname · remote user · Time request · First line of request · status · Referer · USer-Agent # %h · $l · %u · %t · %r · %>s · %{Referer} · %{User-Agent} LogFormat "%h · %l · %u · %t · \"%r\" · %>s · %O · \"%{Referer}i\" · \"%{User-Agent}i\"" combined_imd # log de errores ErrorLog "/private/var/log/apache2/dominio.com-error_log" # log de accesos CustomLog "/private/var/log/apache2/dominio.com-access_log" combined_imd # permitir acceso al Document Root (obligatorio en Apache 2.4.x) <Directory /Users/usuario/Sites/dominio.com> Require all granted </Directory> </VirtualHost>
Por último comprobamos que no hay errores y recargamos Apache:
sudo apachectl configtest sudo apachectl restart
También podemos mapear un dominio o subdominio a localhost para nuestro desarrollo:
sudo vim /etc/hosts
Y añadimos una línea como esta (o las que necesitemos):
127.0.0.1 dominio.com www.dominio.com prueba.dominio.com
NOTA: Al crear un VirtualHost perdemos el DocumentRoot original "/Library/WebServer/Documents/", por lo que si queremos recuperarlo debemos añadir las siguientes líneas al fichero "/etc/apache2/extra/httpd-vhosts.conf" y relanzar el apache:
<VirtualHost *:80> ServerName localhost DocumentRoot /Library/WebServer/Documents/ </VirtualHost>
Por defecto en OSX viene instalado PHP por solo hay que habilitar, para ello editamod el fichero:
sudo vim /etc/apache2/httpd.conf
y descomentamos la línea:
LoadModule php5_module libexec/apache2/libphp5.so
Por último comprobamos que no hay errores y recargamos Apache:
sudo apachectl configtest sudo apachectl restart
Si queremos comprobar que PHP funciona correctamente y que módulos están activados (entre otras muchas opciones interesantes) podemos crear un fichero.php con el contenido "<?php phpinfo(); ?>"
NOTA: La versión de PHP en OSX El Capitan empieza en 5.6.29, siendo la 5.5.31 para OSX 10.11.4
Descargamos el fichero de instalación:
curl -O http://pear.php.net/go-pear.phar
y lanzamos la instalación:
sudo php -d detect_unicode=0 go-pear.phar
Nos sale un menú que escogemos la opción 1 [ 1. Installation base ($prefix) ], nos pedirá el camino base, donde introducimos "/usr/local/pear" (sin comillas), volvemos al menú anterior y escogemos la opción 4 [ 4. Binaries directory ], nos pedirá el camino de los binarios, donde introducimos "/usr/local/bin" y por último pulsamos "enter" para proceder con la instalación.
Una ver que termine la instalación podemos ver si funciona y que versión tenemos:
$ pear version PEAR Version: 1.10.1 PHP Version: 5.5.31 Zend Engine Version: 2.5.0
Para instalar un módulo de Pear (por ejemplo el DB) podemos ejecutar el sigueinte comando:
sudo pear install DB
Mysql NO viene por defecto en OSX con lo que hay que descargarlo de la web de Mysql (versión 5.7.12 para OSX 10.11 DMG), cuando nos pida "login" o "Sign UP" pincharemos más abajo donde dice "No thanks, just start my download" y descargaremos el fichero DMG sin problemas.
Un vez descargado abrimos el DMG y damos doble click al fichero .pkg para procerder con la instalación. Antes de finalizar la instalación nos saldrá una ventana con la contraseña temporal que debemos apuntar y que luego podemos y debemos cambiar.
Cuando termine la instalación abrimos las Pereferencias y veremos un icono de MySql, que pulsamos para poder arrancar el servidor de MySql.
Para poder ejecutar los comandos de MySql sin tener que poner todo el PATH, podemos añadir al fichero ~/.profile:
export PATH="/usr/local/mysql/bin:$PATH"
Para inicializar:
sudo launchctl load -F /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
Para Parar:
sudo launchctl unload -F /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
Como se indica en la instalación se genera una contraseña temporal que debemos cambiar de la siguiente forma:
/usr/local/mysql/bin/mysqladmin -u root -p'pass_temporal' password 'pass_nueva'