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.

Apache - Comandos básicos

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.

Apache - Document Root

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.

Apache - VirtualHost

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>

PHP - activar el módulo

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

PHP - pear

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 - Instalación

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"

Mysql - Start/Stop vía línea de comandos

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

Cambiar la contraseña de ROOT

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'

Retro

Lugares

Redes

Sistemas

Varios