Outils personnels
Vous êtes ici : Accueil GNU / Linux Debian Symfony sur Debian 4.0 Etch
Actions sur le document
  • Send this page to somebody
  • Print this page
  • Add Bookmarklet

Symfony sur Debian 4.0 Etch

Par Pierre-Yves Landuré - Dernière modification 17/10/2009 10:56

Symfony est un framework PHP 5 très puissant facilitant grandement le développement d'applications dans ce langage. Cet article vous guide au cours de son installation sur Debian 4.0 Etch.

En premier lieu, il faut vous identifier en tant qu'utilisateur root. Cela peut se faire avec la commande :

su -

Installation des paquets nécessaires

Nous installons les dépendances de Symfony :

/usr/bin/apt-get install php-pear php5-mysql php5-cli php5-xsl php5-xmlrpc

Pour installer et utiliser Symfony, il faut augmenter la limite d'utilisation mémoire de PHP, ainsi qu'activer les "magic quotes". Pour ce faire, exécutez la commande :

echo ";PHP settings for Symfony
memory_limit = 128M
magic_quotes_gpc = Off" > /etc/php5/conf.d/symfony.ini

Vous devez maintenant choisir votre serveur HTTP. Personnellement, j'utilise de plus en plus souvent LigHTTPd car il est très léger et suffisamment puissant pour la plupart des utilisation. Pour l'installer, suivez :

guide d'installation de LigHTTPd et PHP 5 sur Debian 4.0 Etch.

Remarque : Si vous utilisez Apache 2, pensez à activer le mod_rewrite de votre Apache 2 :
test -x /usr/sbin/a2enmod && /usr/sbin/a2enmod rewrite

N'oubliez pas de redémarrer votre serveur Web pour prendre en compte les nouvelles configurations :

test -x /etc/init.d/apache2 && /etc/init.d/apache2 force-reload
test -x /etc/init.d/lighttpd && /etc/init.d/lighttpd force-reload

Installation de Symfony

Avant d'installer Symfony, il faut mettre à jour PEAR. Pour ce faire, exécutez la commande suivante :

pear channel-update pear.php.net
pear upgrade PEAR

Vous pouvez maintenant passer à l'installation de Symfony. Pour ce faire, on commence par inscrire le canal de Symfony à la configuration de PEAR :

pear channel-discover pear.symfony-project.com

Puis on installe le framework lui-même :

pear install symfony/symfony

Ensuite, on installe phing au besoin (je ne sais pas si c'est toujours nécessaire) :

pear channel-discover pear.phing.info
pear install --alldeps phing/phing

Remarque: Si vous souhaitez disposer de la création automatisée de la documentation, installez PhpDocumentor :

pear install PhpDocumentor XML_Beautifier

Enfin, vérifiez que Symfony est bien installé :

symfony -V

Si cette commande fonctionne, vous disposez d'une version fonctionnelle du framework Symfony. La dernière manipulation à effectuer consiste à créer un endroit où réaliser vos projets :

mkdir /home/sfprojects
chgrp users /home/sfprojects
chmod ugo+w /home/sfprojects

Création d'un projet Symfony

Nous allons maintenant créer notre projet Symfony. Vous pouvez le faire en utilisant votre utilisateur habituel. En premier lieu, choisissez un nom pour votre projet :

SYMFONY_PROJECT=askeet

Et nous créons ensuite le projet :

mkdir /home/sfprojects/$SYMFONY_PROJECT
cd /home/sfprojects/$SYMFONY_PROJECT
symfony init-project $SYMFONY_PROJECT

Une fois le projet créé, nous pouvons y créer nos applications. Pour cela, choisissez le nom de votre application :

SYMFONY_APP=frontend

Et nous créons cette application :

cd /home/sfprojects/$SYMFONY_PROJECT
symfony init-app $SYMFONY_APP

Nous pouvons maintenant passer à la configuration du serveur HTTP.

LigHTTPd

Créez le fichier de configuration de LigHTTPd pour ce projet :

/usr/bin/wget --quiet http://howto.landure.fr/gnu-linux/debian-4-0-etch/symfony-sur-debian-4-0-etch/lighttpd-symfony-configuration-template -O- \
| /bin/sed -e "s/SYMFONY_PROJECT/$SYMFONY_PROJECT/g" \
 > /etc/lighttpd/conf-available/11-$SYMFONY_PROJECT-vhost.conf

Activez la nouvelle configuration de LigHTTPd :

/usr/sbin/lighty-enable-mod $SYMFONY_PROJECT-vhost

Et enfin, rechargez la configuration de LigHTTPd :

/etc/init.d/lighttpd force-reload

Apache 2

Nous configurons le serveur Apache 2 :

su -c "echo '<VirtualHost *>
ServerName $SYMFONY_PROJECT
DocumentRoot \"/home/sfprojects/$SYMFONY_PROJECT/web\"

Alias /sf /usr/share/php/data/symfony/web/sf

<Directory \"/home/sfprojects/$SYMFONY_PROJECT/web\">
AllowOverride All
</Directory>
</VirtualHost>' \
> /etc/apache2/sites-available/$SYMFONY_PROJECT"

Et ensuite, activez le :

su -c "a2ensite $SYMFONY_PROJECT"

Vérifiez votre nouvelle configuration d'Apache :

su -c "apache2ctl -t"

et si tout est correct, rechargez la configuration d'Apache :

su -c "/etc/init.d/apache2 reload"

Accéder au site (à suivre quelque soit le serveur HTTP choisi)

Enfin, nous ajoutons une ligne à notre fichier hosts pour pouvoir accéder simplement à notre projet.

su -c "echo '127.0.0.1 $SYMFONY_PROJECT' >> /etc/hosts"

Vous pouvez maintenant commencer à travailler sur votre projet Symfony, utilisez la commande suivante pour y accéder avec votre navigateur :

firefox http://$SYMFONY_PROJECT

Par la suite

Maintenant que vous l'avez installé, je vous conseille de suivre ces 24 tutoriaux pour apprendre à utiliser Symfony.

Mise à jour de Symfony

Si par la suite, vous souhaitez mettre à jour Symfony, utilisez simplement les commandes suivantes en tant que super administrateur :

pear channel-update pear.php.net
pear upgrade --alldeps PEAR
pear channel-update pear.symfony-project.com
pear upgrade symfony/symfony

Vous pouvez aussi choisir de mettre à jour toutes les applications PEAR:

pear update-channels
pear upgrade-all

Enfin, pour chaque projet Symfony présent sur votre machine, exécutez (si nécessaire) :

symfony upgrade version.de.symfony

Générer la documentation

Si vous avez installé PhpDocumentor, vous pouvez générer la documentation de votre projet avec la ligne de commande :

phpdoc -d /home/sfprojects/$SYMFONY_PROJECT -t /home/sfprojects/$SYMFONY_PROJECT/doc

Résolution des problèmes

Impossible de mettre à jour Symfony

Si la commande pear upgrade symfony/symfony vous affiche l'erreur suivante:

ERROR: pear.symfony-project.com/symfony not installed

Et si pear install symfony/symfony ne fonctionne pas non plus, cela peut être du au fait que le registre de PEAR est corrompu. Pour régler ce problème, réinitialisez le registre de PEAR à l'aide de la commande:

rm /usr/share/php/.registry/.channel.pear.symfony-project.com/symfony.reg

Il ne vous reste plus qu'a relancer la procédure de mise à jour:

pear channel-update pear.symfony-project.com
pear upgrade symfony/symfony

Source: Merci à Sunhwan pour son article When Symfony upgrade fails using PEAR. (et merci à Sébastien Delarche pour m'avoir donné la solution à ce problème lorsqu'il l'a rencontré et que je n'ai pas su l'aider).

Remerciements

Attachements

fastcgi

Posté par CYCLOP le 17/08/2007 19:07
Bonjour,

D'abord, un grand merci pour ce tutoriel ! Je l'ai suivi à la lettre, à un petit détail prêt...

Chez moi c'est le module fastcgi qui est installé, je n'ai donc pas installé le paquet libapache2-mod-php5. Du coup lorsque je lance http://askeet/, j'obtiens l'erreur suivante :

Not Found
The requested URL /php5/php5-fcgi-starter/index.php was not found on this server.

Ma question est donc la suivante :

Comment faire tourner symfony avec le module fastcgi ?

D'avance merci pour votre aide !

FastCGI

Posté par lwolf le 17/08/2007 19:34
Bonjour,

n'étant pas un grand fan de fastcgi, je ne pourrais pas trop vous aider. Cependant, cela resemble plus à un problème de configuration d'apache que de fastcgi. Quand apache ne trouve pas le nom d'un virtual host dans sa configuration, il redirige la requete vers le premier virtual host qui lui tombe sous la main. Je trouve que votre message d'erreur ressemble beaucoup à ce problème. Maintenant, je peut me tromper. Je vous conseille fortement de faire une recherche google avec votre message d'erreur.

fastcgi

Posté par CYCLOP le 17/08/2007 23:53
Bonsoir,

Merci beaucoup de me répondre aussi rapidement, c'est très aimable de votre part.

Voilà où j'en suis... Suite à quelques recherches sur google, j'ai un peu avancé sur mon problème dans la mesure où suite à la modification de ma config Apache, j'obtiens une autre erreur :

Avant modification :

<VirtualHost *>
ServerName askeet
DocumentRoot "/var/www/symfony/askeet/web"

Alias /sf /usr/share/php/data/symfony/web/sf

<Directory "/var/www/symfony/askeet/web">
AllowOverride All
</Directory>
</VirtualHost>

Résultat :

Not Found
The requested URL /php5/php5-fcgi-starter/index.php was not found on this server.

Après modification :

<VirtualHost *>
ServerName askeet
DocumentRoot "/var/www/symfony/askeet/web"

Alias /sf /usr/share/php/data/symfony/web/sf

<Directory "/var/www/symfony/askeet/web">
AllowOverride All
</Directory>

<IfModule mod_fastcgi.c>
ScriptAlias /php5/ /var/www/fcgi/symfony/
<Directory "/var/www/fcgi/symfony">
AllowOverride None
Options +ExecCGI -MultiViews -Indexes
Order allow,deny
Allow from all
</Directory>
</IfModule>

</VirtualHost>

J'ai évidemment rajouté l'arborescence suivante dans /var/www/fcgi :
- /symfony
- /php5
- php.ini
- php5-fastcgi-starter

Contenu du fichier php5-fastcgi-starter :

#!/bin/sh

PHPRC="/var/www/fcgi/symfony/php5/"

export PHPRC
PHP_FCGI_CHILDREN=2
export PHP_FCGI_CHILDREN
PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_MAX_REQUESTS

exec /usr/bin/php5-cgi

Avec cette nouvelle configuration j'obtiens maintenant l'erreur suivante :

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
...

Dans le log d'Apache, à chaque tentative de connexion à http://askett/,j'obtiens les messages suivants :

[Fri Aug 17 23:32:51 2007] [warn] FastCGI: (dynamic) server "/var/www/fcgi/symfony/php5-fcgi-starter" has failed to remain running for 30 seconds given 3 attempts, its restart interval has been backed off to 600 seconds
[... (Idem toutes les 3 secondes, puis => ) ...]
[Fri Aug 17 23:33:21 2007] [error] [client 127.0.0.1] FastCGI: comm with (dynamic) server "/var/www/fcgi/symfony/php5-fcgi-starter" aborted: (first read) idle timeout (30 sec)
[Fri Aug 17 23:33:21 2007] [error] [client 127.0.0.1] FastCGI: incomplete headers (0 bytes) received from server "/var/www/fcgi/symfony/php5-fcgi-starter"

Il y a très certainement quelque chose qui m'échappe et que je n'ai pas fait correctement, mais je cherche maintenant depuis des heures la solution à ce nouveau problème sur google, mais malheureusement toujours sans aucun résultat...

Je précise que si j'utilise le module fastcgi, c'est parce que mon serveur tourne avec le panel ispCP Omega (http://www.isp-control.net) qui le nécessite, et j'ai bien peur que l'installation du paquet libapache2-mod-php5 ne me casse tout, or j'ai plusieurs sites qui sont hébergés dessus...

Vous l'aurez compris je ne suis pas un expert (loin s'en faut) de l'administration d'un serveur linux, on peut même dire que je débute dans ce domaine.

Si vous avez une piste à me suggérer, je vous en serais vraiment reconnaissant parce que là je commence à désespérer de parvenir à faire tourner symfony sur mon serveur.

Quoiqu'il en soit, encore un grand merci pour aide !


je crois que ca serait mieux comme ca :

Posté par lwolf le 18/08/2007 10:11
je pense que la configuration d'apache que vous avait faite serait mieux avec :

ScriptAlias /php5/ /var/www/fcgi/php5
<Directory "/var/www/fcgi/php5">
AllowOverride None
Options +ExecCGI -MultiViews -Indexes
Order allow,deny
Allow from all
</Directory>

ou, si ca ne marche pas :

ScriptAlias /php5/ /var/www/fcgi
<Directory "/var/www/fcgi">
AllowOverride None
Options +ExecCGI -MultiViews -Indexes
Order allow,deny
Allow from all
</Directory>


Bonne chance

retour à la case départ

Posté par CYCLOP le 18/08/2007 11:00
Bonjour,

c'est vraiment très gentil à vous de prendre le temps de m'aider.

Malheureusement avec l'une ou l'autre de vos deux dernières suggestions, je retombe au point de départ :

Not Found
The requested URL /php5/php5-fcgi-starter/index.php was not found on this server.

Oserais-je abuser en vous demandant si vous n'en auriez pas une troisème ;-)...?


malheureusement....

Posté par lwolf le 18/08/2007 11:27
Comme je vous l'ai dit, je ne suis vraiment pas familier de fastcgi. Je ne peut que vous conseiller de regarder les configurations de vos autres virtual hosts qui utilisent FastCGI et de vous en inspirer.

Je suis désolé de ne pas pouvoir plus vous aider.

merci quand même

Posté par CYCLOP le 18/08/2007 12:37
C'est malheureusement ce que j'ai déjà fait...

Voilà ma nouvelle configuration, calqué sur la configuration de mes autres VirtualHost, qui eux fonctionnent pourtant très bien :

<VirtualHost *>

<IfModule mod_fastcgi.c>
SuexecUserGroup www-data www-data
</IfModule>

ServerName askeet
ServerAdmin contact@cyclop-france.com
DocumentRoot /var/www/symfony/askeet/web

Alias /sf /usr/share/php/data/symfony/web/sf

<Directory /var/www/symfony/askeet/web>
Options -Indexes Includes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>

<IfModule mod_fastcgi.c>
ScriptAlias /php5/ /var/www/fcgi/symfony/
<Directory "/var/www/fcgi/symfony">
AllowOverride None
Options +ExecCGI -MultiViews -Indexes
Order allow,deny
Allow from all
</Directory>
</IfModule>

</VirtualHost>

Peut-être une nouvelle piste cependant, après saisi la commande suivante "symfony cc", j'ai obtenu le message suivant :
PHP Warning: Module 'json' already loaded in Unknown on line 0

Je suis donc allé modifier le fichier /etc/php5/cgi/php.ini pour commenter la ligne :
;extension: json.so

Je redémarre apache, je relance la commande "symfony cc" pour voir si j'ai toujours la même erreur, et... oui !(?)!

Intrigué, je fais de même avec /etc/php5/cli/php.ini, je relance apache, puis ma commande "symfony cc" et là, plus d'erreur concernant le double appel de l'extension json. J'en déduis donc naturellement que c'est ce dernier fichier php.ini qui est employé et non celui précédemment cité comme je m'y attendais initialement. Le problème c'est je ne comprends ni pourquoi, ni comment modifier ça, ni même si une telle modification aurait un impact positif sur mon accès à http://askett/ ...

Vous l'aurez compris, en fait, je n'y comprend rien... lol

Merci quand même pour votre aide, je continue à chercher...

it's done !

Posté par CYCLOP le 19/08/2007 00:08
Bonsoir,

Je suis enfin parvenu à faire tourner symfony avec le module fastcgi, comme quoi, quand on ne lâche pas le morceau, on finit toujours, tôt ou tard, par y arrivé (c'est ce que j'explique à mes enfants, je ne pouvais tout de même pas m'abstenir de me l'appliquer à moi-même ;-)...

En fait, la solution n'a rien à voir avec la dernière piste que j'évoquais dans mon précédent message.

Si ça peut aider quelqu'un et lui éviter d'y passer autant de temps que moi voilà chez moi la configuration qui va bien :

<VirtualHost *>

ServerName askeet
DocumentRoot /var/www/symfony/askeet/web

Alias /sf /usr/share/php/data/symfony/web/sf

ErrorLog /var/log/apache2/users/symfony-error.log
TransferLog /var/log/apache2/users/symfony-access.log

CustomLog /var/log/apache2/symfony-traf.log traff
CustomLog /var/log/apache2/symfony-combined.log combined

<Directory /var/www/symfony/askeet/web>
Options -Indexes Includes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>

<IfModule mod_fastcgi.c>

SuexecUserGroup vu2000 vu2000

# Apparemment n'a plus lieu d'être,
# ça fonctionne avec ou sans
# ScriptAlias /php5/ /var/www/fcgi/symfony/

<Directory "/var/www/fcgi/symfony">
AllowOverride None
Options +ExecCGI -MultiViews -Indexes
Order allow,deny
Allow from all
</Directory>

AddHandler php-fastcgi .php

<Location /php5/php5-fcgi-starter>
SetHandler fastcgi-script
Options +ExecCGI
</Location>

Action php-fastcgi /php5/php5-fcgi-starter
AddType application/x-httpd-php .php

</IfModule>

</VirtualHost>

Voilà, cette configuration est sans doute encore optimisable, toujours est-il que maintenant au moins ça fonctionne, je vais donc enfin pouvoir migrer mes projets symfony sur le serveur de production !

Encore merci pour votre aide, qui aura au moins eu le mérite de faire en sorte que je ne me sente pas trop seul face à mon problème ;-)

Remarquable tuto !

Posté par MushuWeb le 24/08/2007 11:40
Merci !

Tout ce que je recherchais !


Fatal error

Posté par FREMERY le 05/08/2008 11:39
Bonjour.
Je tiens tout d'abord à vous remercier pour ce tuto trés explicite et cohérent.
Je l'ai suivi à le lettre mais j'ai ce message d'erreur qui me bloque :

Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 1048566 bytes) in /usr/share/php/PEAR/Registry.php on line 1263

J'ai pourtant modifié mon fichier php.ini comme indiqué sur votre tuto.
Auriez vous une suggestion à me faire.
En attendant encore merci pour ce tuto
Gérald

mémoire insufisante ?

Posté par Pierre-Yves Landuré le 05/08/2008 11:48
Je n'ai pas mis à jour ce tuto pour Symfony 1.1, et il est possible que 16 Mo ne soient plus suffisants.

Essaye après avoir utilisé cette ligne de commande qui augmente la limite à 32 Mo:

sed -i -e 's/memory_limit = .*/memory_limit = 32M/' /etc/php5/cli/php.ini

Bon courage.

ps: Si ca ne marche toujours pas, essaye avec 64 Mo.

mémoire

Posté par FREMERY le 05/08/2008 12:12
Super pour cette réponse hyper rapide.
Le pb est lorsque je relance l'install de symfony j'ai ce message d'erreur :
Ignoring installed package symfony/symfony
Nothing to install

Je me suis dit qu'à cela ne tienne faisons une désinstallation avec un coup de
pear uninstall symfony

Mais cela ne lui convient pas
pear/symfony not installed

Je sais qu'i y a un fichier à modifier pour reprendre l'install mais pas moyen de le retrouver, si vous saviez lequel c'était ça me ferais avancer.
Encore merci

désintallation

Posté par Pierre-Yves Landuré le 05/08/2008 12:22
essaye avec :

pear uninstall symfony/symfony


Desinstall symfony

Posté par FREMERY le 05/08/2008 12:27
C'est pareil sauf une variante dans le message :

No package to uninstall given

Et virer à la mano tous les fichiers c'est un peu lourdingue et surtout bestial.
Si je pouvais éviter.

forcage

Posté par Pierre-Yves Landuré le 05/08/2008 12:32
essaye en forcant l'install:

pear install --force symfony/symfony

Ps: pear help install peut t'aider

Eureka

Posté par FREMERY le 05/08/2008 12:42
Super cette commande m'a débloqué la situation.
Je ne suis pas un grand utilisateur de pear. C'est un produit que je découvre.
le coup du pear help install je ne connaissais pas.
Encore un grand merci pour votre aide, et pour votre tuto.
Je viens de débuter un forum sur lequel je mets toutes les solutions à mes pbroblème, sur mon prochain article "install SYMFONY" j'y ferais une référence qui pointera sur votre site.
Gégé

BlogBang
Navigation
 

Réalisé avec Plone

Ce site respecte les normes suivantes :

Wikio