Ver índice de contenidos del libro

3.4. Configurar el servidor web

Los scripts que se encuentran en el directorio web/ son los únicos puntos de entrada a la aplicación. Por este motivo, debe configurarse el servidor web para que puedan ser accedidos desde Internet. En el servidor de desarrollo y en los servicios de hosting profesionales, se suele tener acceso a la configuración completa de Apache para poder configurar servidores virtuales virtual host). En los servicios de alojamiento compartido, lo normal es tener acceso solamente a los archivos .htaccess.

3.4.1. Configurar los servidores virtuales

El listado 3-1 muestra un ejemplo de la configuración necesaria para crear un nuevo servidor virtual en Apache mediante la modificación del archivo httpd.conf.

Listado 3-1 - Ejemplo de configuración de Apache, en apache/conf/httpd.conf

<VirtualHost *:80>
  ServerName miaplicacion.ejemplo.com
  DocumentRoot "/home/juan/miproyecto/web"
  DirectoryIndex index.php
  Alias /sf /$sf_symfony_data_dir/web/sf
  <Directory "/$sf_symfony_data_dir/web/sf">
    AllowOverride All
    Allow from All
  </Directory>
  <Directory "/home/steve/miproyecto/web">
    AllowOverride All
    Allow from All
  </Directory>
</VirtualHost>

En la configuración del listado 3-1, se debe sustituir la variable $sf_symfony_data_dir por la ruta real del directorio de datos de Symfony. Por ejemplo, la ruta en un sistema *nix en el que se ha instalado Symfony mediante PEAR sería:

Alias /sf /usr/local/lib/php/data/symfony/web/sf

Nota No es obligatorio el alias al directorio web/sf/. La finalidad del alias es permitir que Apache pueda encontrar las imágenes, hojas de estilos y archivos de JavaScript utilizados en la barra de depuración, en el generador automático de aplicaciones de gestión, en las páginas propias de Symfony y en las utilidades de Ajax. La alternativa a crear este alias podría ser la de crear un enlace simbólico (symlink) o copiar directamente los contenidos del directorio /$sf_symfony_data_dir/web/sf/ al directorio miproyecto/web/sf/.

No te olvides reiniciar Apache para que los cambios surtan efecto. La aplicación recién creada ya se puede acceder con cualquier navegador en esta dirección:

http://localhost/miaplicacion_dev.php/

Al acceder a la aplicación, se debería mostrar una imagen similar a la mostrada en la figura 3-1.

3.4.2. Configurar un servidor compartido

En los servidores de alojamiento compartido es un poco más complicado instalar las aplicaciones creadas con Symfony, ya que los servidores suelen tener una estructura de directorios que no se puede modificar.

Advertencia No es recomendable hacer las pruebas y el desarrollo directamente en un servidor compartido. Una de las razones es que la aplicación es pública incluso cuando no está terminada, pudiendo mostrar su funcionamiento interno y pudiendo provocar problemas de seguridad. El otro motivo es que el rendimiento de los servidores compartidos habituales no es suficiente como para depurar la aplicación con las utilidades de Symfony. Por este motivo, no se recomienda comenzar el desarrollo de una aplicación en un servidor compartido, sino que debería desarrollarse en un servidor local y subirla al servidor compartido una vez terminada la aplicación. En el Capítulo 16 se muestran técnicas y herramientas para la instalación de las aplicaciones.

Imaginemos que el servidor compartido llama a la carpeta web www/ en vez de web/ y que no es posible modificar el archivo de configuración httpd.conf, sino que solo es posible acceder a un archivo de tipo .htaccess en ese directorio.

Los proyectos creados con Symfony permiten configurar cada ruta de cada directorio. En el Capítulo 19 se detalla la configuración de los directorios, pero mientras tanto, se va a renombrar el directorio web a www y se va a modificar la configuración de la aplicación para que lo tenga en cuenta. El listado 3-2 muestra los cambios que es preciso añadir al final del archivo config.php.

Listado 3-2 - Modificación de la estructura de directorios por defecto, en apps/miaplicacion/config/config.php

$sf_root_dir = sfConfig::get('sf_root_dir');
sfConfig::add(array(
  'sf_web_dir_name' => $sf_web_dir_name = 'www',
  'sf_web_dir'      => $sf_root_dir.DIRECTORY_SEPARATOR.$sf_web_dir_name,
  'sf_upload_dir'   => $sf_root_dir.DIRECTORY_SEPARATOR.$sf_web_dir_name.DIRECTORY_SEPARATOR.sfConfig::get('sf_upload_dir_name'),
));

La carpeta web de la raíz del servidor contiene por defecto un archivo de tipo .htaccess. El listado 3-3 muestra su contenido, que debe ser modificado de acuerdo a los requerimientos del servidor compartido.

Listado 3-3 - Configuración por defecto de .htaccess, ahora guardado en miproyecto/www/.htaccess

Options +FollowSymLinks +ExecCGI
 
    <IfModule mod_rewrite.c>
      RewriteEngine On
 
      # we skip all files with .something
      RewriteCond %{REQUEST_URI} \..+$
      RewriteCond %{REQUEST_URI} !\.html$
      RewriteRule .* - [L]
 
      # we check if the .html version is here (caching)
      RewriteRule ^$ index.html [QSA]
      RewriteRule ^([^.]+)$ $1.html [QSA]
      RewriteCond %{REQUEST_FILENAME} !-f
 
      # no, so we redirect to our front web controller
      RewriteRule ^(.*)$ index.php [QSA,L]
    </IfModule>
 
    # big crash from our front web controller
    ErrorDocument 500 "<h2>Application error</h2>symfony applicationfailed to start properly"

Después de realizar los cambios, ya debería ser posible acceder a la aplicación. Comprueba si se muestra la página de bienvenida accediendo a esta dirección:

http://www.ejemplo.com/miaplicacion_dev.php/