domingo 16 de diciembre de 2007

Cómo instalar WAPP (II)

Los tiempos avanzan que es una barbaridad y ya ha pasado casi año y medio desde que escribí la primera parte de este artículo. En él explicaba cómo instalar 2 versiones de PHP (PHP4 y PHP5), sobre un mismo servidor Apache, en un sistema operativo Microsoft Windows. En esta segunda parte voy a intentar dar un giro de tuerca al asunto, instalando ambas versiones de PHP como módulos del mismo servidor Apache, pero corriendo en procesos (servicios) separados.

Con este proceso, podremos aprovechar la misma potencia que nos ofrece Apache para un intérprete y para el otro. Además, de esta forma, iremos renovando nuestra infraestructura para el día en que la versión 4 de PHP no se soporte más. Podremos tener nuestro servidor preparado por defecto para PHP5 y, a la vez, seguir manteniendo algún viejo script de PHP4.

Este método sólo tiene un problema: necesita de más memoria RAM en el servidor porque se estarán lanzando 2 servicios en lugar de uno.

Requisitos previos

  • Tener una máquina con Microsoft Windows (recomendado XP, pero también sirve 2003 Server).
  • Haber leído la primera parte de este artículo para tener instaladas ambas versiones de PHP en el ordenador. Actualmente, recomiendo instalar las últimas versiones disponibles: la 4.4.7 y la 5.2.5.


Desinstalación de Apache

Este apartado es opcional, pero es recomendable seguirlo si en nuestra máquina ya estamos ejecutando el servidor de Apache y queremos partir de cero para continuar con el resto de instrucciones que se mencionan más adelante.

La idea es dejar la máquina lo más limpia posible, para que nada de lo que haya anteriormente instalado, cause complicaciones con lo que instalaremos a continuación. Estos son los pasos a seguir:


  1. Parar el servicio de Apache. Para ello hay varias opciones:

    • Ejecutar desde una consola de comandos la orden:
      c:\> net stop nombre_del_servicio_apache

    • Ir a la consola de servicios del sistema (services.msc) y parar desde allí el servicio.

    • Utilizar Apache Monitor (el programa que se instala en la bandeja del sistema cuando instalamos Apache).

  2. Parar la ejecución de Apache Monitor, abriéndo la aplicación y pulsando el botón Exit.

  3. Desinstalar Apache desde Agregar/Quitar programas (en el Panel de Control).

  4. Borrar la carpeta de instalación de Apache desde el explorador de archivos. Antes de hacer esto, podemos hacer una copia de seguridad por si acaso luego quisiéramos restaurar alguna configuración especial.


Un Apache, 2 procesos

Vamos a instalar la versión 2.0.61 de Apache. La razón de no utilizar una versión 2.2.x es la misma que daba hace ya un tiempo: la librería de PHP4 que se carga como módulo de Apache no funciona con la versión 2.2.

Si alguien quiere probar con Windows Vista, será mejor que lea estas instrucciones para instalar Apache.

Haremos una instalación normal, hasta que lleguemos al paso en que pregunta si queremos instalar como servicio (utilizando el puerto 80) o sólo para el usuario actual (en el puerto 8080). Elegiremos esta última opción porque, posteriormente, ya nos encargaremos de instalar manualmente los servicios que necesitemos. Para el resto del artículo, consideraré que Apache se ha instalado en el directorio c:\apache\.

Una vez acabado el asistente de instalación, iremos al directorio de configuración de Apache (c:\apache\conf\) y haremos 2 copias del fichero httpd.conf: una se llamará php5_httpd.conf y la otra php4_httpd.conf.

Nuestro servidor "principal" (el que operará en el puerto 80), cargará como módulo PHP5. El otro servidor, que estará en el puerto 8080 (pero puede elegirse otro puerto), llevará el módulo de PHP4.

Edición del fichero php5_httpd.conf

Partiendo de la configuración base de Apache, estas son las líneas que deberemos modificar:


ScoreBoardFile logs/php5_apache_runtime_status
PidFile logs/php5_httpd.pid
Listen 80
ServerName localhost:80
ErrorLog logs/php5_error.log
CustomLog logs/php5_access.log common


Y estas líneas, las deberemos añadir (se considera que PHP5 está instalado en c:\php5\, si no es así, habrá que modificar la ruta):


LoadModule php5_module "c:/php5/php5apache2.dll"
AddType application/x-httpd-php .php
PHPIniDir "C:/php5"


Edición del fichero php4_httpd.conf

Líneas a modificar:


ScoreBoardFile logs/php4_apache_runtime_status
PidFile logs/php4_httpd.pid
Listen 8080
ServerName localhost:8080
ErrorLog logs/php4_error.log
CustomLog logs/php4_access.log common


Líneas a añadir (se considera que PHP4 está instalado en c:\php4\, si no es así, habrá que modificar la ruta):


LoadModule php4_module "c:/php/sapi/php4apache2.dll"
AddType application/x-httpd-php .php
PHPIniDir "C:/php"


Dos configuraciones, dos servicios

La idea es, viendo el contenido de ambos ficheros, mantener en archivos distintos la información de cada uno de los procesos que vamos a lanzar. Y como van a ser 2 los servicios ejecutados, tenemos que utilizar puertos de escucha diferentes.

El siguiente paso a seguir es instalar los 2 servicios. Desde una consola de comandos, iremos al directorio donde está el ejecutable de Apache y escribiremos:


c:\> cd c:\apache\bin
c:\apache\bin> apache -k install -n "Apache2PHP5" -f "c:\apache\conf\php5_httpd.conf"
c:\apache\bin> apache -k install -n "Apache2PHP4" -f "c:\apache\conf\php4_httpd.conf"


Y para lanzar los servicios:


c:\apache\bin> apache -k start -n "Apache2PHP5"
c:\apache\bin> apache -k start -n "Apache2PHP4"


Si todo ha ido bien, ya tenemos todo listo para invocar a ambos servicios por separado. Vamos a hacer una prueba rápida, escribiendo un script llamado prueba_php.php con este contenido:


<?php
/* fichero prueba_php.php */
phpinfo();
?>


El script lo colocaremos en el directorio DocumentRoot de ambos servidores (que debería ser c:\apache\htdocs\ si no hemos modificado la ruta por defecto). Ejecutando http://localhost/prueba_php.php y http://localhost:8080/prueba_php.php en el navegador, nos debería salir información diferente acerca de cada uno de los módulos de PHP.

Cómo testear la configuración de cada servicio

Por si necesitáramos añadir más prestaciones a alguno de los 2 servicios, voy a comentar como comprobar si el fichero de configuración tiene o no algún fallo. Desde una consola de comandos, tendríamos que escribir:


c:\> cd c:\apache\bin
c:\apache\bin> apache -t -f "c:\apache\conf\fichero_de_configuracion.conf"


Un puerto abierto, 2 servicios en puertos diferentes

Las siguientes instrucciones son totalmente opcionales pero pueden venir bien, en el caso de que queramos dejar solamente abierto un puerto en nuestro router para acceder a cualquiera de los 2 Apaches montados y tengamos acceso al DNS para montar más dominios.

Como último paso, podemos hacer que desde fuera del servidor, parezca que las todas las peticiones sean para un único servidor. Realmente, lo que ocurre es que las peticiones que no puede gestionar el primero, las redirige al segundo, sin que por ello cambie la URL que escribe el usuario. Para ello será necesario que podamos discriminar por nombre de dominio ambos servidores porque sólo disponemos de un puerto de salida para los dos.

Para el siguiente ejemplo, se considerará que el Apache con PHP5 es accesible a través de www.examplephp5.org y el otro Apache con PHP4, a través de www.examplephp4.org. Estas 2 entradas, en el DNS, apuntarán a la misma máquina física (serán 2 alias de esa máquina).

Podemos hacer las pruebas en la máquina local, añadiendo estas entradas en el fichero c:\windows\system32\drivers\etc\hosts:


127.0.0.1 www.examplephp5.org
127.0.0.1 www.examplephp4.org


¡Ojo!. Esta configuración del archivo hosts sólo sirve para la máquina local, no para un cliente exterior.

Una vez que ya tenemos nuestro entorno de prueba, veamos qué es lo que tenemos que configurar en el servicio principal (Apache2PHP5 que escucha en el puerto 80). En el fichero de configuración php5_httpd.conf debemos modificar estas líneas (descomentándolas):


NameVirtualHost *:80
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so


Y añadiremos estas:


<VirtualHost *:80>
ServerName localhost
</VirtualHost>

<VirtualHost *:80>
ServerName www.examplephp4.org
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>


Tras reiniciar el servicio, podemos hacer la prueba, poniendo las URLs a nuestro fichero de prueba en el navegador web: http://www.examplephp5.org/prueba_php.php y http://www.examplephp4.org/prueba_php.php. Si todo ha ido bien, la información mostrada debe ser diferente. En el primer caso, el módulo cargado es el de PHP5 y, en el segundo, el de PHP4.

Referencias

Etiquetas: ,

jueves 24 de agosto de 2006

Cómo instalar WAPP

Para empezar, ¿qué significa eso de WAPP? Es un acrónimo que quiere decir Windows Apache PHP4 PHP5. Si hay infinidad de referencias a cómo instalar LAMP (Linux Apache MySQL PHP) o AMP (Apache MySQL PHP), tanto en Linux como en Windows, hay muy pocas explicaciones acerca de cómo instalar un entorno mixto de desarrollo para PHP (versiones 4 y 5). De eso trata este artículo.

PHP es un lenguaje de programación bastante usado en entornos web dinámicos, que ha evolucionado muchísimo en muy poco tiempo. Hace ya 2 años que salió la versión 5, sin embargo, aun siendo mejor, no está siendo usada por la comunidad de programadores. Las razones son simples. Mejor dicho, la razón es simple. Casi todo el hosting que permite la ejecución de scripts PHP está sólamente preparado para PHP4. Los cambios entre ambas versiones son profundos (sobre todo en cuestiones de OOP) y la compatibilidad hacia atrás de la versión 5 tiene sus problemas. Ante esta perspectiva, las empresas de hospedaje web han preferido mantener la versión 4 para que todo el código existente (que es cuantioso) siga funcionando.

Pero como las mejoras de la versión 5 (aunque ya está en preparación la versión 6) son evidentes, qué mejor que juguetear con ella en un entorno controlado (como puede ser nuestro ordenador personal) e ir viendo sobre el terreno cómo se comportan nuestros programas en ambas versiones.

Los siguientes pasos explican como instalar la versión 4 de PHP como módulo de Apache y la versión 5 como CGI, sobre un entorno de desarrollo con Microsoft Windows XP y Apache (ambos componentes se sobrentiende que están ya instalados). Para facilitar la instalación, se considerará que Apache (versión 1.3.x o 2.0.x, no la versión 2.2.x porque actualmente todavía no existe módulo de PHP para esta versión) está instalado en c:\apache\.


  1. Descargar las últimas versiones disponibles tanto de la versión 4 como de la 5. A día de hoy: 4.4.4 y 5.1.6. Es conveniente bajar los comprimidos para win32, no los instaladores. De esta forma podremos llevar a cabo la instalación de una forma más limpia y sin que nos falte nada (los instaladores para Windows sólo instalan PHP como CGI, no como módulo de Apache, y vienen sin extensiones externas).

  2. Descomprimir la versión 4 en el directorio c:\php\.

  3. Copiar el archivo c:\php\php.ini-recommended como c:\php\php.ini.

  4. Será necesario cambiar algunos parámetros del archivo php.ini. Son estos:

    extension_dir = "c:/php/extensions/"

    session.save_path = "C:\php\session" ; además será necesario crear ese directorio


  5. Añadir al PATH del sistema las rutas c:\php y c:\php\extensions. Para ello, al final del actual PATH, añadimos lo siguiente: ;c:\php;c:\php\extensions. El punto y coma es el separador de rutas. De esta forma, en lugar de copiar el fichero al directorio c:\windows\system32\, podremos actualizar a la próxima versión de PHP4 de una forma más ágil y limpia. Lo malo de hacerlo así, es que será necesario reiniciar el ordenador para que el sistema relea el PATH (con cerrar la sesión de usuario no es suficiente).

  6. Crear el fichero c:\apache\conf\php4.conf con el siguiente contenido:

    <VirtualHost *:80>
    # carga el módulo de Apache de PHP
    LoadModule php4_module "c:/php/sapi/php4apache2.dll"

    # permite tener el fichero php.ini en ese directorio y no en c:\windows
    PHPIniDir "C:/php"
    </VirtualHost>


  7. Editamos el fichero c:\apache\conf\httpd.conf y añadimos como última línea esto:

    include conf/php4.conf

    Es conveniente terminar la línea con un retorno de carro (por si acaso).

  8. Por último, como antes he indicado, habrá que reiniciar el sistema por haber cambiado el PATH. Tras hacerlo, ya tendremos instalado PHP4 como módulo de Apache. Para comprobarlo, crearemos en DocumentRoot (se considera como directorio de publicación para este artículo c:\apache\htdocs\, pero se puede cambiar en el archivo de configuración), el fichero prueba_php.php, que tendrá el siguiente contenido:

    <?php
    phpinfo();
    ?>

    Para ejecutarlo, habrá que apuntar el navegador web a http://localhost/prueba_php.php y ver qué aparece. Si todo ha ido bien, deberían mostrarse las características del entorno y los módulos de PHP cargados.



Ahora sigamos con PHP5.

  1. Para ello, lo primero será descomprimir la versión 5 en el directorio c:\php5\.

  2. Copiar el archivo c:\php5\php.ini-recommended como c:\php5\php.ini.

  3. Habrá que retocar ciertos parámetros del archivo php.ini. Son estos:

    ; Windows: "\path1;\path2"
    ;include_path = ".;c:\php5\includes" ; aunque esté comentado, corregimos la ruta para futuros usos

    extension_dir = "c:/php5/ext/"

    session.save_path = "c:/php5/session" ; además será necesario crear ese directorio


  4. Paso opcional. Si necesitamos acceder a bases de datos MySQL, deberemos habilitar la extensión en el archivo php.ini porque por defecto, en la versión 5, viene deshabilitada. Deberemos dejar así esta línea:

    extension=php_mysql.dll ; sin el punto y coma del principio para que no se tome como comentario


  5. Crear el fichero c:\apache\conf\php5.conf con el siguiente contenido:

    # para habilitar la escucha de Apache en otro puerto además del 80
    Listen 8080

    <VirtualHost *:8080>
    ScriptAlias /php5/ "c:/php5/"
    SetEnv PHPRC c:/php5

    # si nuestro DocumentRoot es otro directorio, habrá que cambiarlo
    <Directory "c:/apache/htdocs">
    Options +ExecCGI +FollowSymLinks
    </Directory>
    AddHandler php-cgi-script .php
    Action php-cgi-script /php5/php-cgi.exe
    </VirtualHost>


  6. Editamos el fichero c:\apache\conf\httpd.conf y añadimos como última línea esto:

    include conf/php5.conf

    Es conveniente, como antes hemos indicado, terminar la línea con un retorno de carro (por si acaso).

  7. Como último paso, habrá que reinicar de nuevo el servicio de Apache para que admita los cambios de configuración. Para probar que esta parte también funciona, esta vez pondremos en el navegador web http://localhost:8080/prueba_php.php. Nótese el cambio de puerto en la petición. PHP4, al ser módulo de Apache, recogerá las peticiones que se hagan al puerto 80. PHP5, en cambio, escuchará lo que se le mande en el puerto 8080. De esta forma, ya tenemos listo el entorno mixto de PHP.



Actualización (2006-11-09):
En la instalación de PHP4, si queremos habilitar alguna extensión (por ejemplo la relacionada con gettext [php_gettext.dll] para internacionalizar nuestras aplicaciones), será necesario añadir al path del sistema el directorio c:\php\dlls\. Para ello, habrá que modificar el path y agregar al final: ;c:\php\dlls. Después, hay que reiniciar el equipo para que el sistema se adapte al cambio.

Etiquetas: , ,