Ver índice de contenidos del libro

23.6. Instalando aplicaciones

23.6.1. ¿Qué tienes que instalar?

Cuando subimos la aplicación Jobeet a producción, tenemos que tener mucho cuidado de no subir archivos innecesarios y de no borrar los archivos subidos por los usuarios, como por ejemplo los logotipos de las empresas.

En los proyectos creados con Symfony siempre hay tres directorios que no tienes que subir a producción: cache/, log/ y web/uploads/. El resto de archivos y directorios puedes subirlos a producción tal y como están.

No obstante, por motivos de seguridad no es buena idea subir los controladores frontales de los entornos que no sean prod, como por ejemplo frontend_dev.php, backend_dev.php y frontend_cache.php.

23.6.2. Estrategias para la instalación

En esta sección, suponemos que tienes el control absoluto sobre los servidores de producción. Si sólo puedes acceder al servidor con una cuenta de FTP, sólo puedes instalar las aplicaciones Symfony subiendo todos sus archivos cada vez que quieres instalar la aplicación.

La forma más sencilla de instalar tu sitio web en el servidor consiste en utilizar la tarea project:deploy. Esta tarea hace uso de SSH y rsync para realizar la conexión con el servidor y para transferir todos los archivos de un servidor a otro.

Los servidores se configuran en el archivo config/properties.ini:

# config/properties.ini
[production]
  host=www.jobeet.org
  port=22
  user=jobeet
  dir=/var/www/jobeet/
  type=rsync
  pass=

Si quieres instalar la aplicación en el servidor production que acabas de configurar, utiliza la tarea project:deploy:

$ php symfony project:deploy production

Nota Antes de ejecutar por primera vez la tarea project:deploy, es necesario que te conectes al servidor y añadas la clave a mano en el archivo de hosts conocidos.

Puedes ejecutar tranquilamente el comando anterior porque Symfony sólo simula la transferencia de archivos, pero no los transfiere realmente. Para instalar de verdad el sitio web, debes utilizar la opción --go:

$ php symfony project:deploy production --go

Nota Aunque en el archivo properties.ini puedes incluir la contraseña de SSH, es mucho mejor configurar el servidor con claves SSH que permitan realizar conexiones sin contraseña.

Por defecto Symfony no transfiere ninguno de los directorios comentados anteriormente y tampoco copia los controladores frontales del entorno dev. El motivo es que la tarea project:deploy excluye los archivos y directorios configurados en el archivo config/rsync_exclude.txt:

# config/rsync_exclude.txt
.svn
/web/uploads/*
/cache/*
/log/*
/web/*_dev.php

En el caso de Jobeet, vamos a añadir a la lista el controlador frontal frontend_cache.php:

# config/rsync_exclude.txt
.svn
/web/uploads/*
/cache/*
/log/*
/web/*_dev.php
/web/frontend_cache.php

Nota También puedes crear un archivo config/rsync_include.txt para obligar a que se transfieran ciertos archivos y/o directorios.

Aunque la tarea project:deploy es bastante flexible, puede que necesites configurarla todavía más. Como el proceso de instalar aplicaciones varía mucho en función de la configuración y topología de tus servidores, no dudes en crearte tu propia tarea para instalar aplicaciones.

Por último, cada vez que instales una aplicación web en producción, no te olvides de borrar como mínimo la cache de configuración en el servidor de producción:

$ php symfony cc --type=config

Si has modificado alguna ruta, también tienes que borrar la cache del sistema de enrutamiento:

$ php symfony cc --type=routing

Nota Borrar solamente algunas partes de la cache tiene la ventaja de que puedes mantener el resto de la cache, como por ejemplo la parte que guarda las plantillas.