por Laurent Bonnet
Introducción
Este capítulo presenta un nuevo tutorial paso a paso sobre la instalación, configuración y las pruebas funcionales del framework Symfony sobre Windows Server 2008.
Para poder seguir este tutorial, te recomendamos que utilices un servidor dedicado conectado a Internet. Por supuesto también puedes seguirlo en un servidor local o en una máquina virtual en tu ordenador.
Los motivos de un nuevo tutorial
Actualmente el sitio web de Symfony incluye dos artículos sobre el uso de Symfony sobre Microsoft Internet Information Server (IIS): symfony on IIS y Installing symfony on IIS. El problema de estos artículos es que utilizan versiones antiguas de Microsoft Windows, por lo que no hacen uso de Windows Server 2008 (lanzado en febrero de 2008) y que incluye muchos cambios interesantes para los programadores de PHP:
IIS 7, la versión que incluye Windows Server 2008, ha sido reescrita por completo para que su diseño sea modular.
IIS 7 ha demostrado ser muy fiable, necesitando muy pocos parches de Windows Update desde su lanzamiento.
IIS 7 también incluye el acelerador FastCGI, que aprovecha el modelo de hilos nativo de Windows gracias a su diseño multi-hilo.
La implementación FastCGI de PHP supone un rendimiento de ejecución entre 5 y 10 veces mejor, sin cache, comparado con los habituales ISAPI o CGI de PHP sobre Windows y IIS.
Recientemente, Microsoft ha presentado un nuevo acelerador para PHP que en el momento de escribir estas líneas se encontraba en estado release candidate.
Cómo seguir este tutorial en diferentes sistemas Windows, incluyendo los de 32 bits
Este capítulo se ha escrito específicamente para la versión de 64 bits de Windows Server 2008. No obstante, debería ser posible utilizar otras versiones diferentes sin ningún tipo de problema.
note
La versión exacta del sistema operativo utilizado en los pantallazos se llama Windows Server 2008 Enterprise Edition con Service Pack 2, edición 64-bit.
Versiones de 32 bits de Windows
Este tutorial se puede seguir fácilmente en las versiones de 32 bits de Windows reemplazando las siguientes referencias en el texto:
En las ediciones de 64 bits:
C:\Program Files (x86)\
yC:\Windows\SysWOW64\
En las ediciones de 32 bits:
C:\Program Files\
yC:\Windows\System32\
Ediciones diferentes a la Enterprise
Si no dispones de la versión Enterprise, tampoco es un problema. El contenido de este capítulo se puede portar fácilmente a otras ediciones de Windows Server: Windows Server 2008 Web, Standard o Datacenter Windows Server 2008 Web, Standard o Datacenter con Service Pack 2 Windows Server 2008 R2 Web, Standard, Enterprise o Datacenter.
Todas las ediciones de Windows Server 2008 R2 están disponibles exclusivamente como sistema operativo de 64 bits.
Sobre las ediciones internacionales
La configuración regional utilizada en los pantallazos es en-US
. Para el
tutorial también se instaló el paquete de idioma para Francia.
También se puede ejecutar el tutorial en los sistemas operativos Windows de tipo cliente: Windows XP, Windows Vista y Windows 7 tanto en versión x64 como x86.
Servidor web utilizado
El servidor web utilizado en el tutorial es Microsoft Internet Information Server versión 7.0, que se incluye en todas las ediciones de Windows Server 2008. El tutorial comienza con un servidor Windows Server 2008 completamente funcional e instala el servidor IIS desde cero. La instalación se realiza escogiendo las opciones sugeridas por defecto, pero se añaden dos módulos específicos de los varios que incluye IIS 7.0: FastCGI y URL Rewrite.
Bases de datos
SQLite es la base de datos preconfigurada en el sandbox de Symfony. SQLite funciona en Windows sin tener que instalar ni configurar nada, ya que existe una extensión PDO que se instala durante la instalación de PHP.
Por tanto, no es necesario ni descargar ni ejecutar una instancia independiente de SQLITE.EXE:
[PHP_PDO_SQLITE] extension=php_pdo_sqlite.dll
Configuración del Windows Server
Para seguir paso a paso las explicaciones de este tutorial, es mejor empezar con un Windows Server recién instalado.
Obviamente también puedes trabajar con un servidor existente, pero puedes encontrarte diferencias debido al software instalado y por la configuración regional seleccionada.
Para obtener exactamente los mismos resultados que los que se muestran en los siguientes pantallazos, te recomendamos que instales Windows Server como máquina virtual aprovechando la versión que se puede descargar gratuitamente en Internet y que es válida durante un período de 30 días.
Para seguir el tutorial es obligatorio tener acceso como Administrador al servidor. Si trabajas de forma remota, debes utilizar Remote Desktop Services (conocido anteriormente como Terminal Server Client) y asegúrate de que tenga acceso como Administrador.
La distribución utilizada en este capítulo es Windows Server 2008 con Service Pack 2,
tal y como puedes comprobar con el comando Winver
:
En este caso se ha instalado Windows Server 2008 incluyendo su entorno gráfico, similar al de Windows Vista. También es posible utilizar una versión que sólo dispone de la línea de comandos pero que tiene las mismas características con un tamaño mucho más reducido (1.5 GB frente a 6.5 GB). Esta última versión también reduce significativamente el número de parches de Windows Update que se deben instalar.
Comprobaciones iniciales - Servidor dedicado en Internet
Como el servidor se puede acceder directamente desde Internet, siempre es buena idea comprobar que la protección del firewall de Windows está activada. Las únicas excepciones que se deben marcar son:
- Core Networking
- Remote Desktop (si se accede de forma remota)
- Secure World Wide Web Services (HTTPS)
- World Wide Web Services (HTTP)
A continuación, es recomendable ejecutar el Windows Update para asegurar que todas las aplicaciones están actualizadas con los últimos parches y correcciones de errores.
La última comprobación previa es la desinstalación del Web Server dentro de la sección de roles de Windows. De esta forma se evita cualquier conflicto con los parámetros de la distribución actual de Windows o de la configuración de IIS.
Instalando PHP en unos pocos clicks
Ahora ya podemos instalar IIS y PHP de una sola vez. Como PHP no forma parte de la distribución de Windows Server 2008, en primer lugar debemos instalar el Microsoft Web Platform Installer 2.0 al que nos referiremos como "Web PI" en las siguientes secciones.
Web PI se encarga de instalar todas las dependencias necesarias para ejecutar PHP en cualquier sistema Windows/IIS. Por tanto, Web PI instala el servidor IIS con los Role Services mínimos para un servidor web y también proporciona las opciones imprescindibles para poder ejecutar PHP.
La instalación del Microsoft Web Platform Installer 2.0 incluye un analizador de configuración, comprueba los módulos existentes, propone las actualizaciones necesarias para los módulos e incluso permite probar extensiones en pruebas del Microsoft Web Platform.
Web PI 2.0 permite instalar PHP con un solo click. La versión seleccionada instala la implementación segura para Win32 pero sin hilos de PHP, que es la que mejor funciona con IIS 7 y FastCGI. También ofrece la versión más reciente (pero probada) de las librerías de PHP, en este caso la 5.2.11. Para seleccionarla, pincha en la pestaña "Frameworks and Runtimes" de la izquierda:
Después de seleccionar PHP, Web PI 2.0 selecciona automáticamente todas las
dependencias necesarias para servir correctamente las páginas .php
del servidor
web, incluyendo los servicios de roles mínimos de IIS 7.0:
A continuación pulsa sobre Install y después sobre el botón "I Accept" para comenzar la instalación de los componentes de IIS. Mientras tanto, se descarga el runtime de PHP para Windows y se actualizan algunos módulos (como por ejemplo el módulo FastCGI IIS 7.0).
Por último se ejecuta el programa de instalación de PHP y después de unos minutos se muestra el siguiente mensaje:
Pincha sobre Finish y el Windows Server ya estará escuchando en el puerto 80. Compruébalo mediante un navegador:
Ahora, para comprobar que PHP se ha instalado correctamente y está disponible
dentro de IIS, crea un pequeño archivo llamado phpinfo.php
y guárdalo en el
directorio C:\inetpub\wwwroot
para que pueda ser accedido en el puerto 80.
Antes de crear este archivo, asegúrate que el explorador de Windows muestra las extensiones de los archivos. Para ello, selecciona la opción "Unhide Extensions for Known Files Types".
Abre un explorador de Windows, accede al directorio C:\inetpub\wwwroot
, pulsa
el botón derecho del ratón y selecciona "New Text Document". Cambia su nombre
por phpinfo.php
y añade la instrucción habitual para mostrar la información
de PHP:
A continuación, vuelve al navegador y accede a la URL /phpinfo.php
:
Por último, para asegurarte de que Symfony se podrá instalar sin problemas,
descarga el archivo check_configuration.php
.
Copia este archivo en el mismo directorio que phpinfo.php
(C:\inetpub\wwwroot
)
y si quieres, cambia su nombre por check_configuration.php
.
Por último, vuelve al navegador y accede a la URL /check_configuration.php
:
Ejecutando PHP desde la línea de comandos
Para poder ejecutar las tareas de la línea de comandos de Symfony, debemos
asegurarnos de que se puede acceder a PHP.EXE
desde la consola de comandos
y que se ejecuta correctamente:
Abre la consola de comandos, entra en C:\inetpub\wwwroot
y ejecuta lo siguiente:
PHP phpinfo.php
Debería aparecer el siguiente mensaje de error:
Si no se hace nada, la ejecución de PHP.EXE
no es posible porque le falta la
librería MSVCR71.DLL. Por tanto, debemos encontrar ese archivo DLL e instalarlo
en el lugar adecuado.
El archivo MSVCR71.DLL
es una vieja versión del runtime de Microsoft Visual
C++, que data del año 2003. Este archivo forma parte del paquete de .Net
Framework 1.1, que se puede descargar desde el sitio MSDN.
El archivo que necesitamos se encuentra instalado en el siguiente directorio:
C:\Windows\Microsoft.NET\Framework\v1.1.4322
Así que copia el archivo y pégalo en alguno de los siguientes directorios:
- en sistemas x64: directorio
C:\windows\syswow64
- en sistemas x86: directorio
C:\windows\system32
Si quieres ya puedes desinstalar el .Net Framework 1.1.
El archivo PHP.EXE
ya se puede ejecutar en cualquier consola de comandos sin
que muestre ningún error:
PHP phpinfo.php PHP check_configuration.php
Más adelante, comprobaremos que el archivo SYMFONY.BAT
incluido en el sandbox
también se ejecuta correctamente, ya que es la línea de comandos de Symfony.
Instalación y uso del sandbox de Symfony
El siguiente párrafo está extraído de la guía de inicio rápido de Symfony: "El sandbox es un proyecto Symfony muy sencillo de instalar y preparado con las opciones de configuración más habituales. Se trata de la mejor forma de probar Symfony sin tener que realizar una instalación correcta que se adecue a las mejores prácticas en el mundo web".
El sandbox está configurado para utilizar SQLite como base de datos. En Windows no es necesario instalar nada para que funcione, ya que el soporte de SQLite lo proporciona la extensión PDO de PHP que se instaló durante la instalación de PHP. Por tanto, este requisito ya se cubrió al instalar las librerías de PHP mediante el Microsoft Web PI.
Simplemente comprueba que la extensión SQLite está correctamente referenciada
en el archivo de configuración PHP.INI que se encuentra en el directorio
C:\Program Files (x86)\PHP
. Además, comprueba que la DLL que implementa el
soporte PDO de SQLite sea C:\Program Files (x86)\PHP\ext\php_pdo_sqlite.dll
.
Descargar, crear el directorio y copiar los archivos
El proyecto del sandbox de Symfony ya viene preparado para ser ejecutado, pero
se encuentra dentro de un archivo comprimido .zip
.
Descarga el archivo del sandbox
y extrae sus contenidos a un directorio temporal, como por ejemplo el directorio
downloads que se encuentra dentro del directorio C:\Users\Administrator
.
Crea un directorio para instalar el sandbox, como por ejemplo F:\dev\sfsandbox
:
Selecciona todos los archivos del directorio en el que descomprimiste el sandbox
y copialos en el nuevo directorio F:\dev\sfsandbox
.
Si todo funciona bien, verás que se están copiando 2599 archivos:
Probando la ejecución
Abre una consola de comandos, entra en el directorio F:\dev\sfsandbox
y
ejecuta el siguiente comando:
PHP symfony -V
El resultado del comando anterior debería ser:
symfony version 1.3.0 (F:\dev\sfsandbox\lib\symfony)
En la misma consola de comandos, ejecuta:
SYMFONY.BAT -V
El resultado de este nuevo comando debería ser exactamente el mismo que antes:
symfony version 1.3.0 (F:\dev\sfsandbox\lib\symfony)
Creando la aplicación web
Para crear la aplicación web en el servidor local, se va a utilizar el gestor de IIS7, que es una interfaz gráfica que hace las veces de panel de control para todas las actividades relacionadas con IIS. En realidad, cualquier cambio que se realiza en la interfaz gráfica se ejecuta en segundo plando mediante la línea de comandos.
La consola del IIS Manager se puede acceder a través de Inicio > Programs > Administrative Tools > Internet Information Server (IIS) Manager.
Configurar el sitio web por defecto para que no interfiera en el puerto 80
Para asegurarnos de que solamente nuestro sandbox de Symfony responde en el puerto 80 (HTTP), modifica el puerto del "Default Web Site" existente al 8080.
Si el firewall de Windows está activo, es posible que debas crear una excepción para el puerto 8080 de forma que todavía se pueda acceder al "Default Web Site". Para ello, accede al panel de control de Windows, pincha sobre Windows Firewall selecciona la opción "Allow a program through Windows Firewall", pulsa sobre "Add port" y crea la excepción. Después de crearla, pulsa sobre el cuadrado para activarla.
Añadir un nuevo sitio web al sandbox
Accede a las Administration Tools y abre el IIS Manager. En la parte de la
izquierda, selecciona el icono "Sites" y pulsa el botón derecho. Selecciona
la opción Add Web Site e introduce como nombre del sitio "Symfony Sandbox".
En la opción Physical Path selecciona D:\dev\sfsandbox
y deja el resto de
opciones sin cambiar. Deberías ver la siguiente ventana de diálogo:
Pincha sobre el botón OK. Si se muestra una pequeña x
en el icono del sitio
web (dentro de Features View / Sites) puedes hacerla desaparecer pinchando
sobre el "Restart" que se muestra a la derecha.
Comprobando que el sitio web responde
Desde el IIS Manager, selecciona el sitio "Symfony Sandbox" y pulsa sobre la opción "Browse *.80 (http)" del panel derecho.
Si todo funciona bien, deberías ver el siguiente mensaje de error: HTTP Error
403.14 - Forbidden
. El servidor web está configurado para no mostrar un listado
de los contenidos del directorio.
El origen del error es que la configuración por defecto del servidor web impide
mostrar un listado con todos los contenidos de los directorios. Como no existe
ningún archivo llamado index.php
o index.html
en D:\dev\sfsandbox
, el
servidor muestra correctamente el error de tipo "Forbidden".
Accede a la URL http://localhost/web
en tu navegador (en vez de simplemente
http://localhost
). Ahora si que deberías ver en tu navegador la famosa página
"Symfony Project Created":
En la parte superior de la página verás una barra de color amarillo claro con el mensaje "Intranet settings are now turned off by default. Intranet settings are less secure than Internet settings. Click for options.".
No te preocupes por ese mensaje. Si quieres cerrarlo permanentemente, pincha el botón derecho sobre la barra amarilla y selecciona la opción apropiada.
Visualizar la página anterior confirma que la página index.php
se ha cargado
correctamente desde D:\dev\sfsandbox\web\index.php
, que se ha ejecutado bien
y que las librerías de Symfony están correctamente configuradas.
Antes de empezar a jugar con el sandbox de Symfony tenemos que realizar una
última tarea: configurar la página web del frontend mediante las reglas de
reescritura de URL. Estas reglas se encuentran en un archivo .htaccess
y se
pueden incorporar fácilmente al IIS Manager.
Configuración del frontend del sandbox
Para empezar a probar todas las opciones de Symfony, es necesario configurar
la aplicación frontend del sandbox. Inicialmente la portada del frontend se
puede acceder y se ejecuta correctamente cuando se accede desde el propio
ordenador donde se encuentra el servidor (es decir, desde localhost
o desde
127.0.0.1
).
Para comprobar que el sandbox funciona correctamente bajo Windows Server 2008, pincha sobre las secciones "configuration", "logs" y "timers" de la barra de depuración web.
Aunque podríamos intentar acceder al sandbox desde Internet o desde cualquier dirección IP remota, el sandbox está pensado como una herramienta para aprender a utilizar Symfony en una máquina local. Por tanto, los detalles sobre el acceso remoto se mostrarán en la última sección de este capítulo.
Creando un nuevo proyecto Symfony
Crear un entorno adecuado para desarrollar proyectos Symfony es casi tan sencillo como la instalación del sandbox. De hecho, se va a explicar la versión simplificada del proceso de instalación ya que es equivalente a la instalación del sandbox.
La principal diferencia es que en este caso nos vamos a centrar en la configuración necesaria para que la aplicación web pueda ser accedida desde cualquier lugar de Internet.
Al igual que el sandbox, el proyecto Symfony viene preconfigurado para utilizar SQLite como base de datos, que ya se instaló y configuró en las secciones previas de este capítulo.
Descargar, crear el directorio y copiar los archivos
Cada versión de Symfony se puede descargar mediante un archivo .zip
para
poder crear después cada proyecto desde cero.
Descarga el archivo de Symfony desde su sitio web y extrae sus contenidos en un directorio temporal, como por ejemplo el directorio "downloads".
Ahora debemos crear el directorio definitivo donde residirán las librerías de Symfony. Este paso es ahora un poco más complicado que para el sandbox.
Estructura de directorios
A continuación se crea la estructura de directorios del proyecto. Si se comienza
por la raíz de la unidad D:
por ejemplo, se crea un directorio llamado \dev
y después otro directorio llamado sfproject
:
D: MD dev CD dev MD sfproject CD sfproject
Ahora ya nos encontramos en D:\dev\sfproject
y a partir de aquí se completa el
resto de la estructura creando los directorios lib
, vendor
y symfony
de
forma consecutiva y en cascada:
MD lib CD lib MD vendor CD vendor MD symfony CD symfony
Ahora ya nos encontramos en el directorio: D:\dev\sfproject\lib\vendor\symfony
Selecciona todos los archivos descomprimidos en el directorio temporal y
cópialos en el directorio D:\dev\sfproject\lib\vendor\symfony
. Verás que se
están copiando 3819 archivos en el directorio de destino:
Creación e inicialización
Abre la consola de comandos, dirígete al directorio D:\dev\sfproject
y ejecuta
el siguiente comando:
PHP lib\vendor\symfony\data\bin\symfony -V
El resultado del comando anterior debería ser el siguiente:
symfony version 1.3.0 (D:\dev\sfproject\lib\vendor\symfony\lib)
Para inicializar el proyecto, ejecuta el siguiente comando:
PHP lib\vendor\symfony\data\bin\symfony generate:project sfproject
El resultado del comando anterior es una serie de operaciones sobre los archivos
y directorios, incluyendo varios comandos de tipo chmod 777
:
Desde la misma consola de comandos, crea una nueva aplicación de Symfony mediante el siguiente comando:
PHP lib\vendor\symfony\data\bin\symfony generate:app sfapp
Una vez más deberías ver una lista de operaciones sobre archivos y directorios,
incluyendo varias operaciones de tipo chmod 777
.
A partir de ahora, en vez de teclear PHP lib\vendor\symfony\data\bin\symfony
cada vez que ejecutes un comando, puedes copiar en este directorio el archivo
symfony.bat
:
copy lib\vendor\symfony\data\bin\symfony.bat
Ahora se dispone de un atajo para ejecutar todos los comandos de Symfony desde
el directorio D:\dev\sfproject
. De hecho, ejecuta el siguiente comando desde
el directorio D:\dev\sfproject
:
symfony -V
Si todo funciona bien, deberías ver exactamente el mismo resultado que antes:
symfony version 1.3.0 (D:\dev\sfproject\lib\vendor\symfony\lib)
Creando la aplicación web
Las siguientes secciones asumen que has leído la parte anterior de este capítulo en la que se explica cómo hacer que el "Default Web Site" no interfiera en el puerto 80 del servidor web.
Añadir un nuevo sitio web para el proyecto
Accede a las Administration Tools para abrir el IIS Manager. En la columna
de la izquierda, pulsa el botón derecho sobre el icono "Sites". Selecciona la
opción "Add Web Site" e introduce "Symfony Project" como nombre del sitio
web, D:\dev\sfproject
como valor de la opción "Physical Path" y deja todos
las demás opciones sin cambiar:
Pincha sobre el botón OK. Si se muestra una pequeña x
en el icono del sitio
web (dentro de Features View / Sites) puedes hacerla desaparecer pinchando
sobre el "Restart" que se muestra a la derecha.
Comprobar si el sitio web responde
Selecciona el sitio "Symfony Project" en el IIS Manager y en la columna derecha pincha sobre la opción "Browse *.80 (http)".
Seguidamente verás el mismo mensaje de error que se producía al realizar la misma operación sobre el sandbox:
HTTP Error 403.14 - Forbidden
Al igual que en el caso del sandbox, el servidor web está configurado para no mostrar un listado de los contenidos del directorio.
Accede con tu navegador a la URL http://localhost/web
para ver la famosa página
"Symfony Project Created", aunque en este caso existe una pequeña diferencia
respecto al sandbox ya que no se ve ninguna imagen:
Las imágenes no se muestran por pantalla, pero se encuentran en un directorio
llamado sf
dentro de la librería de Symfony. Hacer que se vean es muy sencillo,
ya que solamente hay que crear un directorio virtual en /web
llamado sf
y
que apunte a D:\dev\sfproject\lib\vendor\symfony\data\web\sf
.
Después de realizar los cambios anteriores, ya puedes ver las imágenes en la página "Symfony Project Created":
Ahora la aplicación Symfony completa ya está funcionando. Para comprobarlo,
accede con un navegador a la URL de la aplicación en http://localhost/web/sfapp_dev.php
:
Antes de concluir, podemos realizar una última comprobación en local: observa los paneles "configuration", "logs" y "timers" de la barra de depuración web para asegurar que el proyecto es completamente funcional.
Configurar la aplicación para que se pueda acceder desde Internet
Al igual que el sandox, el proyecto de Symfony ya funciona bien en local, por
lo que sólo se puede acceder desde http://localhost
o http://127.0.0.1
. A
continuación se configura para que se pueda acceder desde cualquier lugar de
Internet.
La configuración por defecto del proyecto impide que la aplicación se pueda
ejecutar desde un lugar remoto, aunque en principio debería permitirse ejecutar
tanto el archivo index.php
como sfapp_dev.php
. Si accedes al proyecto desde
el servidor web mediante la IP externa del servidor virtual dedicado (por ejemplo
94.125.163.150
) o mediante su nombre completo (por ejemplo 12543hpv163150.ikoula.com
).
También puedes probar esas direcciones desde el propio servidor, ya que no están
mapeadas al 127.0.0.1
:
Anteriormente se comentó que sería posible acceder a index.php
y sfapp_dev.php
desde un lugar remoto. No obstante, la ejecución de sfapp_dev.php
falla porque
por defecto no es posible su acceso remoto. Se trata de una medida de seguridad
para impedir que los usuarios maliciosos puedan tener acceso al entorno de
desarrollo, que contiene información potencialmente sensible sobre tu proyecto.
Aunque puedes editar el archivo sfapp_dev.php
para permitir el acceso remoto,
te recomendamos encarecidamente que no lo hagas nunca bajo ninguna circunstancia.
El último paso consiste en simular un nombre de dominio real mediante la configuración del archivo "hosts". Este archivo realiza la resolución local de nombres sin tener que instalar el servicio DNS de Windows, que está disponible en todas las ediciones de Windows Server 2008 R2 y también en las ediciones Windows Server 2008 Standard, Enterprise y Datacenter.
En los sistemas operativos tipo Windows x64, el archivo hosts
se encuentra en:
C:\Windows\SysWOW64\Drivers\etc
Inicialmente el archivo hosts
incluye la información necesaria para que el
servidor pueda resolver localhost
a 127.0.0.1
en IPv4 y a ::1
en IPv6.
A continuación se añade un nombre de dominio válido pero falso, como por ejemplo
sfwebapp.local
y se resuelve como el propio servidor local.
El proyecto Symfony ya se puede acceder remotamente, sin necesidad de DNS, a través de cualquier navegador instalado en el propio servidor web.
This work is licensed under the Creative Commons Attribution-Share Alike 3.0 Unported License license.