Symfony sur Debian 4.0 Etch
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
- Merci à Niko pour son article Installer le framework PHP Symfony sur Ubuntu Dapper Drake.
- Merci à Glooze pour son article Symfony sur lighttpd.
FastCGI
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
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 :
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
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....
Je suis désolé de ne pas pouvoir plus vous aider.
merci quand même
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 !
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 ;-)
Fatal error
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 ?
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
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
pear uninstall symfony/symfony
Desinstall symfony
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
pear install --force symfony/symfony
Ps: pear help install peut t'aider
Eureka
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é
fastcgi
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 !