Muchos desarrolladores por comodidad instalan WAMP o XAMPP en sus equipos para tener un entorno local de desarrollo. Sin embargo con el paso del tiempo y tras haber trabajado con Ubuntu 14.04 TLS el que ande una interfaz de un tercero sinceramente me toca los coj…. Pues si, te pones el entorno en 0,2 pero luego si quieres que se ejecute como servicio son todo contratiempos y uso execesivo de recursos. No es por malmeter a los señores que amablemente desarrollan WAMP y XAMPP, pero es añadir algo más entre nosotros y nuestro objetivo y que al quedarse residentes en el systray consumen más RAM y CPU.

Desgraciadamente la cosa no es como antaño que tenias Apache 1.3 para Windows y PHP 4 se instalaba él solito y se integraba con Apache. Hoy día el abanico con Windows a 64 bit es más amplio y la Apache Foundation parece no querer malgastar el tiempo manteniendo el paquete para Windows. Así mismo PHP tiene más posibilidades de integración con otros servidores web como Nginx y tampoco merece la pena mantener instaladores.

Pero no hay problema, puedes descargarte Apache y compilartelo al gusto o descargarte versiones ya empaquetadas para Windows, como es ApacheHaus.

ADVERTENCIA: Desde aquí recomiendo encarecidamente no usar este tipo de entorno para sitios web en producción, si quieres hospedar páginas en condiciones use un sistema operativo GNU/Linux o mejor aún, BSD.

Descarga

Es importante a tener en cuenta si vas a trabajar en un entorno de 32 ó 64 bit, ya que tanto Apache como PHP deben ser de la misma arquitectura para que este funcione como módulo. Para ejecutar PHP en modo cgi, fcgi, etc en principio no tendriamos este inconveniente.
También debes tener en cuenta que no hay disponible versión de PHP 64 bit anterior a la 5.5.

En este ejemplo vamos a utilizar Apache 2.4 y PHP 5.6 ambos en 64 bit.

Para descargar PHP entramos en windows.php.net/download/ y elegimos la versión VC11 x64 Thread Safe. Tened en cuenta que versión de VC (VisualC) necesitas tener instalada en el sistema, en la columna de la derecha de la página tiene disponible los enlaces para descargar la VC necesaria en ambas arquitecturas. Descargamos el paquete y lo desempaquetamos en C:\php\5.6.

Desde ApacheHaus en apachehaus.com/cgi-bin/download.plx descargamos la versión corresponiente Apache 2.4.x VC14. El enlace para obtener paquete VC14 lo tienes en la página de PHP anteriormente citada. Una vez descargado lo desempaquetamos en C:\Apache24.

Parece obvio pero no lo es tanto: Apache y PHP deben estar alojados en la misma unidad que nuestro sistema, asi pues debeis reemplazar la unidad C: por aquella en la que se encuentre instalado Windows.

No hay problema en cambiar los nombres de las ubicaciones, o incluso crear un subdirectorio y alojar ahí ambos. De hacer esto procura que la ruta no contenga espacios ni otros caracteres “extraños”.

Puesta en marcha

Una vez que Apache y PHP están en sus respectivas carpetas le tenemos que decir a Apache donde se aloja PHP, asi pues creamos el archivo Apache24\conf\extra\httpd-php.conf con el siguiente contenido

# Cargar librerias de PHP
LoadFile "C:/php/5.6/php5ts.dll"
LoadFile "C:/php/5.6/libpq.dll"
# Cargar módulo Apache de PHP
LoadModule php5_module "C:/php/5.6/php5apache2_4.dll"

# Asociar archivos .php al intérprete PHP
<FilesMatch "\.php$">
    SetHandler application/x-httpd-php
</FilesMatch>

# Asociar archivos .phps al intérprete PHP
<FilesMatch "\.phps$">
    SetHandler application/x-httpd-php-source
</FilesMatch>

# Establecer ruta de PHP
<IfModule php5_module>
    PHPINIDir "C:/php/5.6"
</IfModule>

# Establecer el MIME por defecto de PHP a text/html
<IfModule mime_module>
    AddType text/html .php .phps
</IfModule>

Ahora vamos al archivo Apache24\conf\httpd.conf y agregamos la siguiente linea antes de la carga de vhosts, que por defecto viene comentada.

# PHP Settings
Include conf/extra/httpd-php.conf

# Virtual hosts
#Include conf/extra/httpd-vhosts.conf

Por parte de PHP, necesitais generar el archivo c:\php\5.6\php.ini. El paquete incluye 2 archivos de ejemplo con configuraciones por defecto php.ini-development y php.ini-production, así que copiad el que más se ajuste a vuestras necesidades y renombradlo a php.ini.

Importante actualizar las ruta en algunos valores de php.ini:

713. include_path = ".;c:\php\5.6\includes"

735. extension_dir="c:\php\5.6\ext"

805. upload_tmp_dir="c:\php\5.6\tmp"

1430. session.save_path="c:\php\5.6\tmp"

Muy recomendable aunque no absolutamente necesario es incluir Apache y PHP en la variable de entorno PATH del sistema. La forma más rápida (que no la única) para cambiarla es pulsar con el botón secundario sobre el menú inicio de Windows y elegir “Sistema”, ahí en el menú a la izquierda de la ventana pulsad sobre “Configuración avanzada del sistema” y en la pestaña “Opciones avanzadas” el botón “Variables de entorno…” situado casi al pie. En el apartado “Variables del sistema” localizamos la variable “Path”, la editamos y añadimos las 2 rutas adicionales C:\Apache24\bin y C:\php\5.6.

syspath

Tras cambiar el path del sistema es recomendable reiniciar Windows, para continuar con este tutorial no es necesario.

Abrimos una consola (ventana de Símbolo de sistema) como Administrador. Si teniais una ya abierta necesitais abrir una nueva ya que hemos cambiado la variable de entorno de sistema. Ahi ejecutaremos httpd -k install y saltará una alerta de seguridad del firewall de Windows. Aceptamos o no podremos acceder a las páginas alojadas.

apacheinit

Para iniciar o detener el servicio usaremos httpd -k start o httpd -k stop. httpd -k restart para reiniciarlo, como necesitaremos hacer cada vez que cambiemos la configuración de Apache o PHP.

IMPORTANTE: Si Skype está en ejecución el puerto 80 lo va a tener ocupado y por tanto Apache no va a poder hacer lo mismo, por ello es altamente recomendable desactivar estos puertos en las opciones de Skype. De todas formas esto es el primero que llegue ocupa, normalmente Apache al ser un servicio va a iniciarse antes que Skype y el puerto 80 será para él.

skype

Si no sois fan de la consola recordad que Apache está ejecutandose como servicio de Windows, así que podeis gestionarlo desde el panel de servicios como cualquier otro. (Ejecutar [WIN+R]-> services.msc)

En este panel también podeis ajustar si quereis que Apache se inicie automáticamente con Windows, etc.

services_apache

Pues ya con esto si abrimos un navegador y vamos a http://localhost debemos obtener esta página, si no obteneis la página por defecto de Apache entonces es que algo pasa, revisad que habeis podido hacer mal.

apachehaus

 

Apache vhosts

Por si no os habíais dado cuenta ya, tengo algunas manías personales (deformación profesional) y me gustan ciertas cosas de cierta manera, y tener los distintos sitios en los que trabajamos en carpetas está muy bien pero asignarle a cada uno su vhost es ya la leche. ¿Por qué? Pues porque se va a parecer más a al entorno real del servidor y seguramente sea menos perturbador a la hora de subirlo a su ubicación final. ¿A que no es lo mismo entrar a http://localhost/miproyecto1/ que entrar a http://miproyecto1.local? ¿¡A que no!? Tiene como más estilo, más limpieza… Y no, no se liga más por hacerlo así.

Lo primero es decirle a Windows que el dominio “miproyecto1.local” (o “miproyecto1” a secas) está en nuestro equipo local y que no lo va a encontrar en el DNS de turno (o sí, nunca se sabe qué  tiene cada uno montado y cómo). Para ello editamos el archivo %WINDIR%\System32\drivers\etc\hosts (siendo %WINDIR% una variable de sistema que indica donde esta instalado Windows).

Importante saber acerca del archivo hosts que es un poco perro. Para empezar el editor que usemos debe estar ejecutándose con privilegios de administrador, y bien es sabido que en la versión 7 los cambios realizados así se los pasa por el arco del triunfo. Para evitar dolores de cabeza resulta más rápido copiar el archivo al escritorio, por ejemplo, editarlo y luego sobreescribirlo en su ubicación original, aceptando la alerta de seguridad UAC de turno.

El formato será <IP local> <dominio>, recuerda que cualquier IP de tipo 127.x.x.x apunta al equipo local o localhost. Esto no pide de comer, así que no hay problema en declarar varias nomenclaturas para un mismo proyecto, es posible que para algún proyecto multidominio sea incluso necesario.

Aprovecho para recordar que esto mismo en un sistema *nix (GNU/Linux,, BSD, etc) se realiza en /etc/hosts.

hosts

Hecho esto si abrimos el navegador y escribimos la dirección debe abrir nuevamente la página por defecto de Apache. Si quieres acceder desde otro equipo, lo sentimos mucho, deberás especificar la dirección remota y el nombre en el archivos hosts del otro equipo… Pero es posible!

Bien, ahora tenemos a decirle a Apache que vamos a trabajar con hosts virtuales (vhost), así que nos dirigimos a C:\Apache24\conf\httpd.conf y descomentamos la linea donde se carga la configuración. Así mismo aprovechamos para incluir otra línea que cargará la configuración de cada vhost.

# Virtual hosts
Include conf/extra/httpd-vhosts.conf
Include conf/sites/*.conf

En la carpeta “conf” creamos una carpeta llamada “sites” (o como os apetezca llamarla, mientras que el nombre coincida en httpd.conf) y en esta iremos metiendo archivos con la extensión .conf
Cada archivo puede contener la configuración de uno o más vhosts, eso como todo, al gusto del consumidor. En mi caso prefiero un archivo por proyecto y así os lo cuento.
Para desactivar un sitio/proyecto basta con cambiar la extensión del archivo o directamente borrarlo… Y reiniciar Apache, por supuesto.

Cada vhosts indica a Apache a que IP y dominio tiene que responder, puerto, en que carpeta se alojan los archivos… incluso permisos de acceso a archivo y otras configuraciones adicionales que puedan ser necesarias unicamente para ese vhost y que o bien no las necesitamos globalmente o bien pueda causar conflictos en otros sitios alojados.

# Declaracion del vhost:
# * -> responder a cualquier IP de cualquier interfaz de red de localhost
# 80 -> atender a las peticiones realizadas en el puerto 80
<VirtualHost *:80>
        ServerAdmin pepitoperez@example.com

	# dominio 
        ServerName miproyecto1.local
	# otros dominios para los que va a usarse esta configuración
        ServerAlias miproyecto1 miproyecto1.com

	# Ubicación de los archivos del proyecto
	DocumentRoot "C:\www\vhosts\miproyecto1"

	# Registro de acceso
	CustomLog logs/miproyecto1.access.log combined
        # Registro de errores
	ErrorLog logs/miproyecto1.error.log

	# Configuraciones adicionales
	<Directory "C:\www\vhosts\miproyecto1">
                Options FollowSymlinks MultiViews
                AllowOverride All
		Require all granted
                AcceptPathInfo On
        </Directory>
</VirtualHost>

Y ya está! Añadimos un <VirtualHost> por cada sitio que queramos, con sus configuraciones particulares, si es en HTTPS (SSL) pues podriamos cambiar la configuración del puerto a 443 y añadir los certificados, etc. Eso da para otra entrada, otro día…

Para más información sobre configuración de Apache: https://httpd.apache.org/docs/2.4/es/

 

Y esto es todo, espero que le sea útil la información.

Etiquetas: , , ,

Deja un comentario