domingo, 1 de septiembre de 2013

Symfony 2: Instalación y configuración

Antes de ver los distintos métodos de instalación y actualización, tenemos una lista de requisitos que debemos de cumplir para llevar a cabo dicha tarea.

Requisitos obligatorios:
- PHP debe ser una versión mínima de PHP 5.3.3
- Servidor web (como apache)
- Es necesario habilitar JSON
- Es necesario tener habilitado el ctype
- PHP.ini debe tener configurado el valor date.timezone

Si deseas utilizar Doctrine, necesitarás tener instalado PDO. Además, es necesario tener instalado el controlador de PDO para el servidor de base de datos que desees utilizar.

Composer

Composer es una herramienta que más tarde o temprano utilizaremos en el desarrollo de nuestros proyectos Symfony. Composer se encarga de instalar y actualizar paquetes o librerías en base a un proyecto. Estos paquetes se encuentran en un directorio (en nuestro caso vendors/) dentro de un proyecto. Por lo que por defecto no instala nada globalmente. Ya que las librerías de Symfony se instalan para cada proyecto. Además resuelve las dependencias que puedan haber entre ciertos paquetes, instalándolas y actualizándolas cuando sea necesario. Por lo tanto Composer comprueba la lista de dependencias de cada proyecto y decide qué librerías hay que instalar, qué versiones concretas se instalan y el orden correcto de instalación.
Nota: Composer puede que necesite acceder a repositorios Git por lo q es necesario tenerlo instalado.

Instalación de Composer en Linux y Mac OS X

1.  Descargar Composer en el directorio raíz de tu proyecto

 $ curl -s https://getcomposer.org/installer | php  

Si todo ha funcionado bien, en el directorio raíz de tu proyecto Symfony2 verás un nuevo archivo llamado composer.phar. Para comprobar que se ha instalado correctamente, ejecuta :

 $ php composer.phar  

Con lo que obtendrás el listado de opciones disponibles para la herramienta.

2. Instalar Composer de esta manera es correcto, pero te obliga a realizar una nueva instalación para cada proyecto Symfony2. Si tienes muchos proyectos es mucho mejor que instales Composer de forma global en tu ordenador para que todos los proyectos utilicen la misma versión de Composer.

Para instalar Composer globalmente simplemente mueve el archivo composer.phar a algún directorio ejecutable del sistema, como por ejemplo:

 $ sudo mv composer.phar /usr/local/bin/composer  

Instalación de Composer en Windows mediante instalador

El instalador  Composer-Setup.exe instalará la herramienta y configurá el PATH del sistema para su correcta ejecución desde la consola del sistema

Instalación de Composer en Windows manualmente

1. Abre cualquier navegador y accede a la siguiente dirección https://getcomposer.org/installer
2. Guarda el contenido de esa página en el directorio raíz de tu proyecto Symfony2. Asegúrate de guardar el archivo con el nombre instalador.php (por ejemplo)
3. Ejecuta el siguiente comando para instalar Composer:

 D:\Proyectos\Symfony2\prueba> php instalador.php  

4. Si todo ha funcionado bien, en el directorio raíz de tu proyecto Symfony2 verás un nuevo archivo llamado composer.phar. Mediante el siguiente comando, que muestra las opciones de la herramienta,comprobaras que se ha instalado correctamente.

 D:\Proyectos\Symfony2\prueba> php composer.phar  

5. Ahora ya puedes borrar el archivo instalador.php.

6. Instalar Composer de esta manera es correcto, pero te obliga a realizar una nueva instalación para cada proyecto Symfony2. Y como hemos mencionado anteriormente, si tienes muchos proyectos es mucho mejor que instales Composer de forma global en tu ordenador para que todos los proyectos utilicen la misma versión de Composer. Por lo tanto vamos a tener que crear un archivo .bat

Mueve el archivo composer.phar a un directorio ejecutable de windows. Para ver la lista de directorios ejecutables de Windows, ejecuta el siguiente comando sin opciones:

 D:\Proyectos\Symfony2\prueba> set  

En la lista de opciones que se muestra, busca aquella que se llame PATH.

Ahora tienes que crear un archivo llamado composer.bat en el mismo directorio donde has movido el archivo composer.phar. El contenido de ese archivo debe ser el siguiente:

 @ECHO OFF  
 php "%~dp0composer.phar" %*  

Si ahora abres una nueva consola de comandos, ya podrás utilizar Composer ejecutando simplemente el comando composer

Instalando Symfony 2.2

Para instalar Symfony existen dos métodos diferentes, cuya elección dependerá del nivel nivel de personalización o de los componentes necesarios para el proyecto a realizar. Sin embargo, elijamos un método u otro, seguramente acabaremos necesitando la herramienta de mantenimiento de dependencias Composer.


1. Instalación de Symfony 2.2 desde  archivo (opción elegida para el tutorial):

Puedes optar por descargar directamente el archivo de la edición estándar de symfony 2.2 pero tendrás que elegir entre dos versiones (a parte del formato del archivo de compresión .tgz o .zip).
Tendrás que elegir entre la versión con 'vendors' o sin 'vendors'. La primera modalidad, contiene todas las librerías de terceros (vendors) necesarias para comenzar a trabajar con el framework, mientras que la modalidad sin 'vendors', viene sin estas librerías, razón por lo que hay que instalarlas posteriormente mediante Composer.
Descarga uno de los archivos en el directorio que va a ser el raíz de tu proyecto y descomprímelo.
- Si optamos por la opción con 'vendor' , obtendremos una estructura de directorios similar a la siguiente:

Estructura de un proyecto Symfony 2

- Si hemos descargado el archivo 'sin vendors' el directorio vendors no existirá y necesitaremos ejecutar el siguiente comando (nesitamos Composer instalado) para crearlo, junto con todas las librerías de las que se compone el framework.

 $ php composer.phar install  

o si hemos instalado Composer de manera global:

 $ composer install  

Nota: Si no queremos instalar todos los 'vendors' que componen Symfony 2 podemos elegir que instalar. Para ello antes de ejecutar uno de los anteriores comandos, podemos modificar el archivo de configuración de Composer, composer.json. Este fichero se encontrará en el directorio raíz de nuestra aplicación, tras descomprimir el archivo 'sin vendors'. Por lo que este método de instalación nos proporciona la versatilidad de elegir que instalar.
Dentro de dicho fichero de configuración, la clave 'require' contiene el conjunto de paquetes a que queremos instalar:

 "require": {  
     "php": ">=5.3.3",  
     "symfony/symfony": "2.2.*",  
     "doctrine/orm": "~2.2,>=2.2.3",  
     "doctrine/doctrine-bundle": "1.2.*",  
     "twig/extensions": "1.0.*",  
     ….  
   },  

b) Instalación utilizando únicamente Composer (sin descargar archivo)

- Teniendo instalado Composer instalador de manera global:

 $ composer create-project symfony/framework-standard-edition <directorio> 2.2.x-dev  

Cambia el valor por la ruta del directorio donde quieres instalar Symfony 2.2 (no tienes que crear ese directorio, porque ya lo hace el comando). 
Este comando instala la versión de Symfony 2.2  más reciente que exista en ese momento. Si quieres instalar una versión concreta, modifica 2.2.x-dev  por el nombre de la versión deseada:

 $ composer create-project symfony/framework-standard-edition /directorio 2.2.1  

Permisos tras instalar

Si estas trabajando en Windows seguramente no tendrás problemas con los permisos, sin embargo es algo a tener en cuenta en un sistema Unix
Symfony2 solamente escribe en dos directorios de la aplicación: app/cache/  y app/logs/. Todos los demás directorios son de sólo lectura para Symfony2. El problema es que no siempre escribe el mismo usuario en esos dos directorios.
Cuando ejecutas un comando en la consola  Symfony2 se ejecuta con tu usuario de la consola. Cuando accedes a una página de tu aplicación con el navegador Symfony2 se ejecuta con el usuario del servidor web. Como estos dos usuarios normalmente son diferentes, se produce un problema cuando un usuario quiere tocar cosas hechas por otro usuario.

Opción 1.

1.  Estando dentro del directorio raíz de tu aplicación, borra todo el contenido que exista dentro de los directorios app/cache/ y app/logs/:

 $ rm -fr app/cache/*  
 $ rm -fr app/logs/*  

Recuerda que quizás tengas que usar sudo delante de cada una de las anteriores ordenes.

2.  Averigua cuál es el usuario con el que se ejecuta tu servidor web. Si utilizas Apache ejecuta el siguiente comando:

 $ ps -aux | grep httpd  

3.  Ejecuta el siguiente comando para cambiar los permisos que tiene el servidor web sobre los dos directorios de escritura de Symfony2. Antes de ejecutar el comando, cambia Usuario por el nombre del usuario con el que se ejecuta tu servidor web:

  $ sudo chmod +a "Usuario allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs  

4.  Ejecuta el siguiente comando para cambiar los permisos que tiene el usuario con el que se ejecutan los comandos de consola:

  $ sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs  

Nota: whoami indica el nombre del usuario actual.

Opción 2:

Algunos sistemas, no son compatibles con chmod +a, pero son compatibles con otra utilidad llamada setfacl. Ejecuta los siguientes comandos dentro del directorio raíz de la aplicación.

 $ sudo setfacl -R -m u:Usuario:rwx -m u:`whoami`:rwx app/cache app/logs  
 $ sudo setfacl -dR -m u:Usuario:rwx -m u:`whoami`:rwx app/cache app/logs  

Opción 3:

Si después de probar todo lo anterior el error se sigue produciendo, existe una solución alternativa que funciona siempre. Aunque esta solución sea la que se utiliza como último recurso, eso no significa que sea insegura. Los propios creadores del framework la recomiendan cuando todo lo demás falla.

Si no tienes acceso para modificar los directorios ACL, tendrás que cambiar la umask para que los directorios cache/ y logs/ se puedan escribir por el grupo o por cualquiera (dependiendo de si el usuario del servidor web y el usuario de la línea de ordenes están en el mismo grupo o no). Para ello, pon la siguiente línea al comienzo de los archivos app/console, web/app.php y web/app_dev.php:

 mask(0002); // Esto permitirá que los permisos sean 0775  
 // o  
 umask(0000); // Esto permitirá que los permisos sean 0777  


Comprobación final

Finalmente podremos pasar a comprobar que en nuestro sistema no falta ninguno de los requisitos obligatorios especificados al inicio del tutorial. Para ello ejecutaremos desde nuestro directorio raíz del proyecto (posteriormente veremos que se puede comprobar también desde el navegador).

 $ php app/check.php  

Si todo ha funcionado bien, Symfony 2.2 ya está instalado correctamente. Para comprobarlo ejecuta el siguiente comando de consola directamente en la raíz del directorio donde has instalado el proyecto Symfony 2.2:

 $ php app/console  

La consola debería mostrar una lista muy larga con todos los comandos disponibles en las aplicaciones Symfony2.

Ahora podremos acceder la página de bienvenida del framework instalado desde
http://localhost/directorio_proyecto/app_dev.php/

No hay comentarios:

Publicar un comentario