Noticias

Instalación y configuración de un servidor lamp para desarrollo con Symfony2 desde cero

Symfony2 es un framework de desarrollo para php optimizado para el desarrollo de aplicaciones web. Si quieres comenzar a explorar sus posibilidades o simplemente quieres trastear con él, necesitarás configurar correctamente un entorno de desarrollo. En esta entrada te muestro como crear una instalación de las librerías que componen el framework así como los pasos necesarios para obtener un entorno listo para el desarrollo en un equipo linux basado en una distribución Debian.


Sería en primer lugar necesario contar con un servidor LAMP operativo, sino es tu caso y para no repetirme puedes ponerlo en marcha siguiendo esta otra entrada del blog tasksel la navaja suiza sadf

Una vez con un sistema básico en funcionamiento:

Con esto tenemos un sistema de desarrollo básico funcionando.

Durante la instalación habremos establecido una clave en mysql para el usuario root, es recomendable crear al menos un usuario adicional. Para ello entramos a la consola de mysql y creamos un usuario nuevo.

mysql -uroot -p 
mysql>CREATE USER 'user'@'localhost' IDENTIFIED BY 'xxxx';

Damos permisos a nuestro usuario, en nuestro caso y al tratarse de un usuario para taréas de desarrollo le daremos permisos para todas las bases de datos, si los permisos fueran para un entorno de producción se darían sólo sobre las bases de datos y con los permisos estrictamente necesarios.

Si sólo vamos a trabajar en local con la primera línea es suficiente. 

GRANT ALL ON *.* TO 'user'@'localhost'; 
GRANT ALL ON *.* TO ‘user’@’%’; 

Añadiremos nuestro usuario del sistema al grupo de apache, esto simplificará la gestión de permisos posterior: 

sudo usermod -a -G www-data user //para comprobar que el usuario está agregado ($ id user) 

Ahora vamos a bajarnos la última versión de Symfony2, la opción recomendada es via composer. Si no tienes instalado composer en tu sistema lo puedes tener disponible a través del comando curl que puede ser instalado via apt-get: 

sudo apt-get install curl

Para instalar composer ejecuta: 

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

Si quieres tener el comando disponible de forma global, ejecuta: 

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

Ahora ordenamos a composer que instale la versión 2.1.7 de la edición standar de symfony

composer create-project symfony/framework-standard-edition /var/www/dev.newSymfonyProject.es/ 2.1.7

En el paso siguiente vamos a configurar el virtual host, para ello creamos el fichero /etc/apache2/sites-available/dev.newSymfonyProject.es con el siguiente contenido

<VirtualHost *:80>
  ServerName dev.newSymfonyProject.es
  ServerAdmin admin@newSymfonyProject.es
  DocumentRoot "/var/www/dev.newSymfonyProject.es/web"
  ErrorLog /var/log/apache2/dev.newSymfonyProject.es.error.log
  <Directory "/var/www/dev.newSymfonyProject.es/web">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    allow from all
    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ app.php [QSA,L]
    </IfModule>
   </Directory>
</VirtualHost>

Activamos el dominio 

a2ensite dev.newSymfonyProject.es

Hay que dar permisos a los directorios de cache y logs: 

cd /var/www/dev.newSymfonyProject.es 
chmod 777 app/cache app/logs

Hay que apuntar el dominio de desarrollo sobre la máquina en la que estamos trabajando, en mi caso es localhost 

sudo vim /etc/hosts

y agregamos 

#dominios locales
127.0.0.1 dev.newSymfonyProject.es

Una vez seguidos estos pasos, vamos a comprobar que los requerimientos para ejecutar Symfony2 son los adecuados, para ello ejecutamos:

php app/check.php

Este es el resultado que obtengo:

********************************
*                              *
*  Symfony requirements check  *
*                              *
********************************

* Configuration file used by PHP: /etc/php5/cli/php.ini

** ATTENTION **
*  The PHP CLI can use a different php.ini file
*  than the one used with your web server.
*  To be on the safe side, please also launch the requirements check
*  from your web server using the web/config.php script.

** Mandatory requirements **

 OK       PHP version must be at least 5.3.3 (5.3.10-1ubuntu3.5 installed)
 OK       PHP version must not be 5.3.16 as Symfony won't work properly with it
 OK       Vendor libraries must be installed
 OK       app/cache/ directory must be writable
 OK       app/logs/ directory must be writable
 ERROR    date.timezone setting must be set
          Set the "date.timezone" setting in php.ini* (like Europe/Paris).

 OK       Configured default timezone "Europe/Madrid" must be supported by your installation of PHP
 OK       json_encode() must be available
 OK       session_start() must be available
 OK       ctype_alpha() must be available
 OK       token_get_all() must be available
 OK       simplexml_import_dom() must be available
 OK       detect_unicode must be disabled in php.ini
 OK       PCRE extension must be available

** Optional recommendations **

 OK       Requirements file should be up-to-date
 OK       You should use at least PHP 5.3.4 due to PHP bug #52083 in earlier versions
 OK       When using annotations you should have at least PHP 5.3.8 due to PHP bug #55156
 OK       You should not use PHP 5.4.0 due to the PHP bug #61453
 OK       PCRE extension should be at least version 8.0 (8.12 installed)
 OK       PHP-XML module should be installed
 OK       mb_strlen() should be available
 OK       iconv() should be available
 OK       utf8_decode() should be available
 OK       posix_isatty() should be available
 WARNING  intl extension should be available
          Install and enable the intl extension (used for validators).

 WARNING  a PHP accelerator should be installed
          Install and enable a PHP accelerator like APC (highly recommended).

 WARNING  short_open_tag should be disabled in php.ini
          Set short_open_tag to off in php.ini*.

Como vemos hay varios avisos y un error, pues vamos a resolverlos.

El error del date.timezone está indicando simplemente que no tenemos configurado este valor, el de short_open_tag nos indica que debemos desactivar esta opción, para poner remedio editamos los ficheros php.ini tanto el que carga apache como el que configura el cliente php de línea de comandos.

sudo vim /etc/php5/apache2/php.ini

sudo vim /etc/php5/cli/php.ini

buscar la línea ";date.timezone =" y déjala como corresponda con tu zona horaria, en mi caso los cambios realizados son: 

 date.timezone = 'Europe/Madrid'
 short_open_tag: Off

El primer warning nos dice que no está instalada la librería de internacionalización de php5, para instalarta ejecutamos: 

sudo apt-get install php5-intl

En el segundo warning se nos insta a instalar un acelerador, vamos a instalar apc 

apt-get install apache2-threaded-dev php5-dev php-pear make gcc g++
pecl install apc

ahora hay que añadirlo al php.ini 

apc extension extension=apc.so

El profiler de symfony necesitará tener instalada la extensión de php para sqlite así que como paso final: 

apt-get install php5-sqlite

Para cargar los cambios reinicia apache 

sudo service apache2 reload

Si ejecutas ahora el check.php deberías visualizar un ok en todos los puntos. Ahora si accedemos al dominio creado anteriormente dev.newSymfonyProject.es deberíamos poder ver la pantalla de bienvenida de Symfony2:

Pantalla de inicio de Symfony2

 

Pantalla de inicio de Symfony2

En otra entrada me gustaría mostrar como integrar esta instalación junto con puppet para generar máquinas virtuales con el software preconfigurado.


Enlaces de interés.


Symfony2 php


Compartir mola!!