Deploiement d’une application Symfony2
« plus facile à dire qu’à faire … »
Aujourd’hui, nous allons parler un peu plus technique que d’habitude, car nous allons nous intéresser à Symfony 2, framework PHP en vogue. Nous l’utilisons depuis sa bêta 1, ce qui nous permet aujourd’hui d’avoir un certain recul sur son fonctionnement. Nous allons aborder le sujet de son déploiement sur un serveur mutualisé où vous n’avez aucun accès SSH ou autre (la suite de cet article s’appuiera sur l’hébergeur OVH, chez qui nous avons déjà déployé plusieurs applications).
Avant quoi que ce soit, assurez-vous que votre application soit bien stable dans les environnements de Développement et de Production en local. Pour l’environnement de Production, je vous conseille d’activer le mode debugger. Pour cela, il vous faut passer la variable $debug à TRUE dans la ligne 9 du fichier : /web/app.php
Vérifiez lors de l’utilisation et sur les logs (app/cache/prod) que tout se passe bien puis remettez cette variable à false.
En local toujours, vider alors le cache de l’environnement de Production et celui de Développement au passage avec un petit :
php app/console cache:clear && php app/console cache:clear –env=prod
Si vous avez des assets placés dans des bundles, il vous faut déployer ces derniers dans le dossier web avec la commande suivante :
php app/console assets:install web –symlink
(le –symlink n’est pas obligatoire, il permet juste de ne pas dupliquer les assets dans le dossier public en ne produisant que des liens).
Vérifiez aussi la configuration de votre serveur de déploiement. Pour ce faire, créez un petit fichier php contenant la fonction phpinfo() puis accédez au fichier depuis votre navigateur. Comparez cette dernière avec les « requirements » sur le site de Symfony2.
ATTENTION : Certains hébergeurs n’offrent pas la possibilité d’utiliser la version 5.3 de PHP. Il est conseillé de vérifier la configuration proposée par votre hébergeur avant d’acheter un hébergement …
En tout cas, OVH le permet ! Mais il nécessite d’être configuré à l’aide de .htaccess. Si vous ne maitrisez pas bien ce petit fichier, un petit tour sur Wikipedia réglera le problème. En ce qui concerne le cas plus particulier d’OVH, le détail peut se trouver ici.
Vous devez avoir une arborescence assez simple, composée au minimum de la racine ‘/’ et d’un dossier habituellement nommé www. Il va s’agir de reconstruire l’arborescence de votre application puis de modifier les .htaccess pour rendre le tout conforme.
Pour ce faire, deux possibilités : soit votre serveur mutualisé n’hébergera qu’une application et je vous conseille alors la première méthode ci-dessous soit non, et je vous conseille donc la seconde (dans le cas, ou un plusieurs applications tourneraient avec le même coeur de Symfony2, utilisez la méthode 1).
- Méthode 1, un seul coeur : nous allons simplement imiter l’architecture de Symfony2. Il vous faut extraire l’ensemble des fichiers (et dossiers) contenus dans le dossier /web dans le dossier /www. Les 4 autres dossier (‘/src’-/’app’, ‘/vendors’, ‘/bin’) eux vont être extraits directement à la racine.
- Méthode 2, plusieurs coeurs : Déployez le dossier de votre application sous le dossier www. rajoutez alors une redirection sur votre serveur. c’est tout !
Vérifiez que l’ensemble de vos dossiers a bien les droits positionnés à 755. (Si vous pouvez, passez les droits des dossiers /app/logs et/app/cache à 777)
Une fois fait, modifier le .htaccess de votre dossier « www », normalement, vous devez déjà avoir ce fichier possédant les lignes nécessaires à l’URL rewritée pour effacer le « app.php » de vos URLs. rajoutant ces quelques lignes en début du fichier :
SetEnv SHORT_OPEN_TAGS 0
SetEnv REGISTER_GLOBALS 0
SetEnv MAGIC_QUOTES 0
SetEnv SESSION_AUTOSTART 0
SetEnv ZEND_OPTIMIZER 1
SetEnv PHP_VER 5_TEST*
DirectoryIndex app.php
(* Attention, comme mentionné dans un commentaire, le mot TEST doit être remplacé par 2, 3 ou 4. A noter qu’à la date ou cet article est écrit la version 4 est en Release Candidate donc potentiellement instable)
Votre application Symfony2 devrait désormais marcher. Notez tous de même que le mode production est extrêmement pointilleux sur les chemins et en particulier la casse des noms de dossier et des noms de fichiers. S’il n’arrive pas à trouver une classe dans AppKernel ou autoload, ne cherchez pas plus loin, c’est la casse !
Enfin, n’oubliez pas que dans le mode de production, Symfony « cache » quasiment tout. Ainsi une modification d’un css ou d’un fichier javascript ne se verra pas tant que le cache n’aura pas été vidé.
Note : Il semblerait que Symfony2 ai besoin d’une initialisation de son cache : à la première utilisation rafraichissez deux fois de suite et vous devriez être débarrassé de l’écran blanc. Si je me trompe, n’hésitez pas à interagir dans les commentaires.
Note 2 : Si vraiment votre application ne veut pas marcher et que vous ne pouvez afficher autre chose qu’un écran blanc. Activer le mode debug. Cependant, cela va énormément impacter les performances de votre application, car de nombreuses choses telles que le cache ou les logs garderont le même comportement qu’en environnement de développement.
Morgan
14 réponses à “Deploiement d’une application Symfony2”
Wouhou ! Merci, ca me sera utile….
Ah oui! Tout s’éclaircit tout d’un coup
Mon prochain projet sera sous Symfony 2 et sur un mutualisé OVH, cet article tombe pic
. Allez hop dans mes bookmarks pour y revenir quand j’en aurai besoin
.
Merci !
Article interessant,
mais lors de la mise a jour de mon site , comment faire ??
il ne faut pas couper le site pour mettre la nouvelle version !!?
ya t’il un outil qui permet de faire ca ??
Merci
Merci Bilel.
Effectivement, cette solution n’est pas viable sur le long terme puisque la mise à jour du site est plus que compliquée. La seule méthode, il me semble, est de couper son site quelques minutes pour mettre à jour les fichiers changés.
Un autre article est en préparation sur le déploiement sur serveur dédié qui permet de mettre à jour très simplement son site.
Merci pour la réponse
j’attend tjs l’article donc
espérant qui’il ne restera pas longtemps
Un grand merci pour ce tuto efficace.
Petite précision, je ne m’étais pas rendu compte tout de suite qu’il fallait remplacer « TEST » de SetEnv PHP_VER 5_TEST par la version de PHP de votre serveur.
Salut,
avez vous une idée comment configurer l’email chez ovh version pro ??
Merci d’avance
)
//Bilel
Hello,
Excellent tuto. En le suivant a la lettre, je rencontre ce problème. Pour info je suis sur OVH pro:
/usr/local/php53/bin/php app/console
PHP Notice: Undefined index: argv in /root/iuid/vendor/symfony/src/Symfony/Component/Console/Input/ArgvInput.php on line 57
PHP Warning: array_shift() expects parameter 1 to be array, null given in /root/iuid/vendor/symfony/src/Symfony/Component/Console/Input/ArgvInput.php on line 61
PHP Warning: array_shift() expects parameter 1 to be array, null given in /root/iuid/vendor/symfony/src/Symfony/Component/Console/Input/ArgvInput.php on line 294
PHP Warning: Invalid argument supplied for foreach() in /root/iuid/vendor/symfony/src/Symfony/Component/Console/Input/ArgvInput.php on line 269
Status: 500 Internal Server Error
X-Powered-By: PHP/5.3.8-pl0-gentoo
cache-control: no-cache
date: Sat, 11 Feb 2012 08:18:08 GMT
content-type: text/html; charset=UTF-8
Le fait que je ne l »execute pas dans mon www joue t’il?
Bonjour Sam,
à quel moment rencontrez-vous ce problème ? Quand vous essayez d’accéder à votre site ?
[...] aux néophytes (et pour moi-même) en environnement et architecture PHP. Cet article fait écho au précédent sur les environnements mutualisés en s’affranchissant facilement des contraintes de ce genre [...]
[...] comme par exemple un changement du mode d’authentification. Cela dit, grâce à cet excellent tutorial, le déploiement s’est réalisé (presque) sans [...]
Bonjour,
et en terme de performance ça donne quoi ? Il me semble que APC n’est pas installé sur les mutu, est ce que ce manque ne pénalise pas trop le site ? (si vous avez une url d’un site en mutu pour voir ce que ca donne ça m’intéresse)
Merci
Olivier
Egalement ne pas oublier :
En prod. ajouter un « optimisateur » de CSS et JS tel que yuicompressor et n’oublier pas « d’installer » vos CSS et JS pour la prod à chaque déploiement.
Pour le fichier de boot (app.php), sur certaines config le fichier bootstrap.php.cache est à supprimer (car il inclut tout alors que c’est le boulot de APC ou xCache ou eAccelerator de faire ça).
Pour les droits, question : c’est bien de faire un chown www-data sur tout mon code ?