No estoy seguro si ya se ha hecho esta consulta.
Estoy desarrollando una aplicación en Symfony. La estoy subiendo al servidor de producción para ir mirando si funciona correctamente. El servidor es Ubuntu Server 14.04, que corre en AWS.
La cuestión es que para que corra realmente Symfony no es tan fácil. Se requieren de ciertos conocimientos sobre las configuraciones del server y algunas instalaciones de algunas librerías y módulos PHP5.
El problema que tengo es que no es capaz de leer el controlador frontal app.php
. En cambio el app_dev.php
, sí. Aunque tuve que engañarlo.
¿Alguno han tenido problemas similares? ¿Saben del alguna buena documentación para instalar bien Symfony2 en Ubuntu Server?
Saludos.
Respuestas
No uso Amazon AWS, así que no te puedo ayudar con el problema que te está sucediendo. Eso sí, te puedo pasar este enlace de la documentación oficial de AWS que explica cómo deployar aplicaciones Symfony 2 en Amazon AWS Elastic Beanstalk.
Si ese enlace no te sirve, te comento las diferentes opciones que tienes para deployar aplicaciones Symfony:
- Capifony, se basa en Ruby y es una versión del proyecto Capistrano personalizada para Symfony (de ahí su nombre). Esta es la herramienta que uso en todos mis proyectos y me gusta bastante: a veces da problemas al instalarlo y las primeras veces que lo usas puede ser un poco confuso. Pero en cuanto lo controlas, es genial porque permite de verdad deployar una aplicación ejecutando un solo comando.
- Capistrano, es el proyecto original en el que se basa Capifony. Algunos lo prefieren precisamente por ser la versión original de Capifony. Muchas aplicaciones RubyOnRails lo usan para el deploy. Leer tutorial sobre como deployar con Capistrano
- Fabrik está basado en Python y es más sencillo (y genérico) que Capistrano/Capifony. Conozco varias empresas Symfony que usan Fabrik para deployar sus aplicaciones.
- Docker, aunque personalmente creo que esto está muy verde para deployar aplicaciones hoy en día, parece que en un par de años Docker será lo único que se utilice en todo el mundo. No te aconsejo para nada que lo uses hoy en día, pero si quieres echarle un vistazo, puedes ver esta presentación sobre cómo preparar las aplicaciones Symfony para Docker.
@javiereguiluz
Hola @javiereguiluz
Por favor, me podrias explicar como capifony. (Mas claro que tutoriales que encotrado)
En mi caso estoy desarrollando win7 y el servidor esta montado win2008 R2.
Gracias.
@dariongg
Gracias Javier. Todo esto fue lo que hice y funciona bien:
1. Se actualizan los paquetes de Ubuntu:
$ sudo apt-get update && sudo apt-get upgrade
2. Se instalan los paquetes para tener listo el servidor Apache con php:
$ sudo apt-get install apache2 mysql-server mysql-client php5 php5-mysql libapache2-mod-php5
3. Se instala PHPMyAdmin:
$ sudo apt-get install phpmyadmin
4. Se instala Git:
$ sudo apt-get install git-core
5. Se instala la librería cURL para php:
$ sudo apt-get install php5-curl
6. Se descarga Composer:
$ sudo curl -sS https://getcomposer.org/installer | php
Se mueve composer a una ruta global:
$ sudo mv composer.phar /usr/local/bin/composer
7. Nos dirigimos a la raíz del servidor:
$ cd /var/www/html
8. Se instala una distribución Symfony mediante Composer:
$ sudo composer create-project symfony/framework-standard-edition [el_proyecto]
9. Ajustar los algunos permisos de algunos archivos dentro de Symfony2:
$ sudo chown -R root:www-data app/cache $ sudo chown -R root:www-data app/logs $ sudo chown -R root:www-data app/config/parameters.yml $ sudo chmod -R 755 app/cache $ sudo chmod -R 755 app/logs $ sudo chmod -R 755 app/config/parameters.yml
Si vamos hasta http:[dominio]/proyecto/web/app.php
nos debe salir el siguiente error:
Oops! An Error Occurred The server returned a "404 Not Found". Something is broken. Please let us know what you were doing when this error occurred. We will fix it as soon as possible. Sorry for any inconvenience caused.
Es muestra de que todo va bien. Por ahora.
10. Por consola "le preguntamos" a Symfony si está listo para correr sobre el servidor:
$ sudo php app/check.php
Si el servidor no está correctamente instalado arrojará el siguiente aviso:
[ERROR] Your system is not ready to run Symfony2 projects Fix the following mandatory requirements date.timezone setting must be set Set the "date.timezone" setting in php.ini* (like Europe/Paris). Optional recommendations to improve your setup ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ intl extension should be available Install and enable the intl extension (used for validators). Note The command console could use a different php.ini file ~~~~ than the one used with your web server. To be on the safe side, please check the requirements from your web server using the web/config.php script.
Para solucionar el problema con el huso horario de nuestro servidor tenemos que ir a dos lugares:
$ sudo nano /etc/php5/apache2/php.ini $ sudo nano /etc/php5/cli/php.ini
Buscar y descomentar date.timezone
y poner el huso de donde nos encontramos. He puesto Mexico/General. Volvemos y le preguntamos a Symfony sobre nuestra configuración:
$ sudo php app/check.php
Symfony2 Requirements Checker > PHP is using the following php.ini file: /etc/php5/cli/php.ini > Checking Symfony requirements: ............................W....... [OK] Your system is ready to run Symfony2 projects Optional recommendations to improve your setup ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ intl extension should be available Install and enable the intl extension (used for validators).
Nos recomienda instalar la extensión intl
para php:
$ sudo apt-get install php5-intl
11. Habilitar los módulos mod_headers
, mod_rewrite
, mod_expires
, mod_deflate
:
$ sudo a2enmod headers $ sudo a2enmod rewrite $ sudo a2enmod expires $ sudo a2enmod deflate
Y restaurar Apache:
$ sudo service apache2 restart
12. Modificar el virtual host:
$ sudo nano /etc/apache2/sites-available/000-default.conf
<VirtualHost *:80> #ServerName mi-sitio.com #ServerAlias www.mi-sitio.com #SetEnv SYMFONY__DATABASE__USER "..." #SetEnv SYMFONY__DATABASE__PASSWORD "..." DocumentRoot "/Proyectos/Symfony2/mi-sitio.com/web" #DirectoryIndex app.php <Directory "/Proyectos/Symfony2/mi-sitio.com/web"> AllowOverride None Allow from All <IfModule mod_rewrite.c> Options -MultiViews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ app.php [QSA,L] </IfModule> </Directory> #CustomLog /var/log/httpd/mi-sitio.com-access.log combined KeepAlive On MaxKeepAliveRequests 200 KeepAliveTimeout 5 AddOutputFilterByType DEFLATE text/css text/plain text/html application/xhtml+xml text/xml application/xml <IfModule mod_headers.c> Header append Vary User-Agent env=!dont-vary ExpiresActive On ExpiresDefault "now plus 1 week" ExpiresByType image/x-icon "now plus 1 month" ExpiresByType image/gif "now plus 1 month" ExpiresByType image/png "now plus 1 month" ExpiresByType image/jpeg "now plus 1 month" </IfModule> </VirtualHost>
13. Reiniciamos Apache:
$ sudo service apache2 restart
14. Activamos la caché de PHP:
; activa la caché opcache.enable=1 ; no elimina los comentarios (imprescindible para que funcionen las anotaciones) opcache.save_comments=1
@cristian_angulo
@cristian_angulo muchas gracias por publicar una guía tan detallada de los pasos que has seguido. Me gustaría hacerte varias sugerencias, pero antes que nada, una aclaración: que nadie piense que son necesarios todos estos pasos para pasar una aplicación Symfony a producción. Lo que aquí se explica es cómo preparar un servidor desde cero y después, instalar una aplicación Symfony.
Y ahora mis comentarios:
1. En vez de instalar Symfony con Composer, te recomiendo que utilices el nuevo Instalador de Symfony. Llevamos varios meses probándolo y pronto lo presentaremos públicamente. Gracias a este instalador, desacrgar Symfony y crear el proyecto es tan fácil como ejecutar lo siguiente:
$ symfony new mi_proyecto
Este instalador incluso ejecuta el php app/check.php
después de instalar Symfony, por lo que no te tendrás que preocupar de el. Además, mientras que instalar Symfony con Composer te costará varios minutos, instalarlo con este nuevo instalador te costará unos 10 segundos.
2. En el punto 9 muestras cómo solucionar el problema de los permisos de Symfony. Siempre que sea posible, es mejor hacer que el servidor web se ejecute con el mismo usuario que el que utilizas en la consola (obviamente no el usuario root
). Así no tendrás que hacer jamás nada para resolver el problema de los permisos en ningún otro proyecto Symfony.
3. En realidad, después de todos estos pasos lo que has hecho es crear un proyecto Symfony vacío, pero lo que normalmente quieres es instalar en el servidor un proyecto Symfony que estás desarrollando localmente en tu propio ordenador. Para hacerlo, necesitarás alguna de las herramientas que te he comentado antes: Capifony, Capistrano, Fabrik, Docker, etc.
@javiereguiluz
@dariongg te recomiendo el siguiente tutorial que es muy nuevo y explica bastante bien cómo instalar una aplicación Symfony utilizando Capifony:
How to Deploy Symfony Apps with Capifony
@javiereguiluz
Javier, de hecho fue la única forma como me funcionó un paquete de Symfony sobre Ubuntu en AWS. Levanté polvo de internet y no encontraba nada en concreto. Los 12 ó 13 pasos es la recopilación de algo por aquí y de allá.
Para desplegar la aplicación, y mientras me funcionaba uso Github. Creo las llaves públicas y luego clono el repositorio. Actualizando inmediatamente los vendors. Sí, lo sé. Es una forma arcaica, pero... ando corriendo :D...
Para @dariongg, para deployar puedes usar Magallanes. No se apega a ningún framework. Está escrito en php. Por si tienes otros proyectos, fuera de Symfony, te servirá mucho...
Saludos!
@cristian_angulo
-_- por qué no había avisado del instalador. Lo probaré en el acto!!!
@cristian_angulo
Regresé a dejar esto por acá. No puede ser más fácil desplegar una aplicación PHP, con Magallanes: http://acilia.es/wp-content/uploads/2014/05/Magallanes-Presentacion-PHP-MeetUp-Mayo-2014.pdf
Saludos!
@cristian_angulo