PHP 5.x y MySQL sobre IIS7: Pequeña Guía rápida

Desde que hicimos el Hosting Roadshow con aquellas camisas tan feas hemos estado utilizando algunas aplicaciones PHP sobre IIS7 como parte de las demos. No ha sido para hacer de rabiar a nuestros compañeros de desarrollo, que andan como locos con su ASP.NET, su Silverlight, su WPF, su SQL y demás, sino porque es un excelente ejemplo para ilustrar la nueva arquitectura modular de IIS7 y su "pipeline" de ejecución integrada y porque constituye además un punto intermedio de interoperabilidad entre los extremos LAMP (Linux, Apache, MySQL, PHP) y WISA (Windows, IIS, SQL, ASP) muy deseado por todo aquel administrador que se preocupe por poner en marcha una infraestructura útil y versátil para el mundo real, independientemente de la tecnología que se esté utilizando para desarrollar la aplicación.

Ingredientes

  • Windows Server 2008 Web Edition, Standard, Enterprise o Datacenter. Valen tanto la instalación completa como en modo Server Core.
  • Última versión de PHP: Se descarga de php.net, y es necesario que sea la versión non-threads-safe. Para todo aquel interesado en saber las diferencias entre thrad-safe y non-thread-safe, puede encontrarlas en este artículo. Yo en particular he descargado esto: PHP 5.2.5 Non-thread-safe Win32 binaries
  • MySQL 5.0.45: No elegimos la última versión (5.0.51a) porque parece ser que hay un pequeño bug en el manifiesto de UAC que impide que funcione correctamente en Windows Vista y Windows Server 2008. Hay que descargar la versión x86 o la x64 en función de lo que coresponda a nuestro sistema operativo
  • La aplicación PHP elegida: Nosotros hemos estado jugando con Qdig, MyOwnSpaces, Mediawiki, Wordpress, Mambo y PHP-Nuke Web Portal System (muy cachondo el comentario)

Paso a Paso rápido

  1. Agregar los componentes deseados de IIS7, siendo imprescindible para nuestros propósitos marcar CGI, que incluye el módulo de FastCGI.
  2. Instalar MySQL y correr el asistente de configuración. Es importante habilitar antes una regla en el firewall para el puerto 3306 (netsh firewall add portopening tcp 3306 "MySQL")
  3. Descomprimimos PHP en una carpeta. Luego hacemos la configuración básica, en particular el PHP.INI para configurar el extension_dir y habilitar las extensiones de MySQL, y especificar las variables PATH y PHPRC del sistema:
  4. Descomprimir la aplicación a una carpeta del sistema sobre la que montaremos el Site de IIS7 en el puerto y/o con los host headers deseados utilizando el IIS Manager
  5. Configuramos el documento por defecto para apuntar al, generalmente, index.php
  6. Configuramos un manejador para php. Para ello:
    • Marcamos el Site y hacemos doble clicl en el icono "Asignadores de Controlador" (Handler Mappings en inglés) en el panel central.
    • Hacemos clic en "Agregar asignación de modulo" (Add module Mapping) y ponemos:
      • *.php en la ruta de acceso
      • Seleccionamos FastCGIModule en el Módulo
      • Exploramos la carpeta donde hayamos descomprimido PHP (paso 2) y seleccionamos el php-cgi.exe (ojo, porque por boton para explorar po defecto nos filtra solamente por dlls y no aparece el ejecutable por defecto)
      • Le ponemos un nombre descriptivo: Por ejemplo "PHP5 con FastCGI"
  7. Con todo esto se nos habra creado un web.config en la carpeta del Site que puede ser utilizado para configurar otros sites rápidamente. Pondrá algo similar a esto:
      1. <?xml version="1.0" encoding="UTF-8"?>
        <configuration>
        <system.webServer>
        <defaultDocument>
        <files>
        <add value="index.php" />
        </files>
        </defaultDocument>
        <handlers>
        <add name="PHP 5 con FastCGI" path="*.php" verb="*" modules="FastCgiModule" scriptProcessor="C:\Demo_Web\PHP\PHP-5.2.5-nts-Win32\php-cgi.exe" resourceType="Unspecified" />
        </handlers>
        </system.webServer>
        </configuration>
  8. Por último solo queda ejecutar el script correspondiente para configurar la aplicación elegida. Dependiendo de cual sea se creará y configurará automáticamente la base de datos o habrá que hacerlo previamente a mano. Y luego viene la configuración fina, de lo que tengo poca o ninguna idea y os dejo como deberes.

Como decía en el post anterior, haciendo esto me acabo de crear mi propia Wikipedia (Wikimedia). Voy ahora a por WordPress (ya está documentado aqui). Tenéis más información y ejemplos en este enlace:

Using FastCGI to host PHP applications on IIS7

No sé por qué me da que cuando Asier lea este post me va a tocar corregir algo :-). No obstante si alguien monta o tiene montado algo de esto en IIS7 me encantará saberlo. Le dedico una diapositiva en el lanzamiento :-)

Saludos

David Cervigón

Technorati tags: IIS7, Windows Server 2008, PHP, FastCGI, Mambo, Mediawiki, MyOwnSpace, PHP-Nuke, Qdig, Asier Marqués