Installer un site Symfony 2 sur un hébergement OVH Pro (mutualisé)

Hello,

Récemment j’ai installé une application perso sur une offre Pro OVH et j’ai pas mal galéré ! Voici les astuces pour réussir !

Etape 1 : Souscrire à une Offre OVH Pro

Je ne détaillerais pas cette partie. Voici juste le lien vers l’offre en question : https://www.ovh.com/fr/hebergement-web/hebergement-pro.xml
J’ai choisi cette offre car elle permet d’avoir un accès SSH, indispensable pour utiliser Symfony 2.

Une fois commandé, attendez de recevoir le mail de confirmation avec votre accès FTP.

Etape 2 : Installer le site Symfony 2 sur le serveur OVH

Connectez-vous en ssh (ssh user@ftp.votredomaine.com puis Mot de passe FTP), ou via FTP :

A la racine de votre espace, vous devez avoir un dossier www.

Créez un deuxième dossier avec le nom de votre site :

mkdir monsite

Dans ce dossier vous allez déposer l’ensemble des fichiers de votre site. Pour cela 2 solutions :

  • Vous utilisez un serveur de version type git. Vous vous connectez en SSH sur le serveur : ssh user@votredomaine.com (Mot de passe : celui du FTP), puis récupérer votre application dans ce ddosier
  • Vous n’utilisez pas un serveur de version, il ne vous reste plus qu’à envoyer vos fichiers via un logiciel FTP (Filezilla par ex) dans ce dossier

Une fois l’ensemble des fichiers déposés, et toujours dans le dossier contenant les sous dossiers monsite et www, nous allons supprimer le dossier www (attention si vous avez des fichiers important à l’intérieur).

rm -rf www

Puis créer un lien symbolique de www vers monsite/web (le dossier public de Symfony2)

ln -s monsite/web www

De cette manière, vous faites pointer le dossier www directement vers le dossier web de votre application symfony 2.

Etape 3 : Configurer OVH (php CLI) afin de pouvoir utiliser les commandes Symfony 2

Lors de mes premiers tests pour vider le cache via la commande symfony, j’ai obtenu l’erreur suivante :

cd monsite
php app/console cache:clear --env=prod
X-Powered-By: PHP/4.4.9
Content-type: text/html


Parse error: syntax error, unexpected T_STRING, expecting T_CONSTANT_ENCAPSED_STRING or '(' in /home/website/monsite/app/console on line 13

Pour faire simple, cela signifie que le binaire PHP CLI n’est pas « compatible  » avec la version de Symfony que vous utilisez.

Voici la solution :

En ssh retournez à la racine de votre serveur (là ou il y a le dossier www) et faites :

nano .bashrc

Ajoutez la ligne suivante :

alias php5='php.ORIG.5_4 -c /usr/local/lib/php.ini-2'

Puis quitter nano en enregistrant : CTRL + O, Entrer, puis CTRL +X et faites la commande suivante pour recharger votre configuration :

. .bashrc

Vous venez de créer un alias qui vous permettra d’exécuter les commandes Symfony 2 sans problèmes.
Comment ?

cd monsite
php5 app/console cache:clear --env=prod

Cette configuration est permanente, vous n’aurez pas besoin de la refaire à chaque fois.

Remarque : Problème pour l’installation des assetics

Pour installer les assetics vous devez utiliser la commande :

php5 app/console assets:install --env=prod

Sauf que celles-ci retourne l’erreur :

[InvalidArgumentException] 
The target directory "web" does not exist.

Etrangement le dossier web est bien présent. La solution que j’ai trouvé est de mettre le chemin complet :

php5 app/console assets:install /homez.334/website/monsite/web/ --env=prod

Remarque : le –symlink ne semble pas marcher chez OVH
On obtient le chemin complet en allant dans le dossier et en faisant un « pwd ».

Etape 4 : Configurer l’environnement avec PHP 5.5

A la racine de votre espace créé un fichier .ovhconfig contenant ces informations :

app.engine=php
app.engine.version=5.5
http.firewall=none
environment=production

Ceci permettra à votre site d’utiliser php 5.5.

Bonus : Configuration Swiftmailer sur OVH avec un compte mail OVH

En bonus, voici la config pour swiftmailer qui fonctionne sous OVH avec un compte mail OVH :

# app/config.yml
swiftmailer:
    transport: "%mailer_transport%"
    auth_mode: "%mailer_auth_mode%"
    host:      "%mailer_host%"
    port:      "%mailer_port%"
    username:  "%mailer_user%"
    password:  "%mailer_password%"

parameters:
    mailer_transport:  smtp
    mailer_auth_mode:  login
    mailer_host:       smtp.votresite.com
    mailer_port:       587
    mailer_user:       votreemail@votresite.com
    mailer_password:   motdepassedevotreemail

31 réponses à “Installer un site Symfony 2 sur un hébergement OVH Pro (mutualisé)

  1. N’as-tu pas rencontré des problèmes de performance ? Je parle ici du temps de chargement des pages et de l’exécution des scripts ? Je suis en train de développer un portail de news et j’appréhende le déploiement en prod sur une offre Pro OVH !

  2. Super !
    Merci Johann. Tout à marché comme sur des roulettes ! ça m’a fait gagner un temps fou.
    Encore merci à toi 😉

  3. Bonsoir Djoo.

    Merci pour l’article. il tombe pile poils car je dois actuellement déployer un site sur OVH mais en serveur dédié.
    y a t-il une configuration particulière pour le faire ou je peux également utiliser celle là pour l’installer?

    Cordialement =D

  4. Merci pour ton commentaire. Malheureusement je n’ai jamais utilisé un serveur dédié OVH. Je ne pourrais donc pas répondre à ta question. Mais je serais content d’avoir ton retour d’expérience 😀

  5. Bonsoir, Merci pour ce petit tutoriel. Une question de mon côté. Mon site s’appuie sur Symfony mais PHP 7… connaîtrais-tu la version de l’alias à ajouter dans le .bashrc?

  6. Bonjour,

    j’ai installé mon projet sur le serveur ovh tous marche sauf l’authentification avec fosuserbundle et les requetes Ajax.

    pour l’authentification elle marche une fois sur 10 et me redirige vers la page d’accueil, et dans le cas ou çà marche pas je reste sur le formulaire de login sans aucune erreur particulière, dans les logs symfony j’ai rien d’alarmant aussi.

    – pour les réquêtes Ajax, dans le cas ou je réussie à m’authentifier si je fais appel à Ajax ca me renvoie en réponse le formulaire d’authentification. et parfois j’ai le réponse correcte.

    je ne comprend pas ce fonctionnement bizarre. et c’est bloquant vu je suis passé en production.

    en local ou intégration tous marche normalement

  7. Hello,
    Difficile de te dépanner comme cela. Il n’y a vraiment rien d’anormal dans les logs de production ?
    Est-ce que tu as des erreurs dans la console javascript de ton navigateur ? Ou des erreurs sur les requêtes appelées en Ajax ?

  8. Bonjour DJOO,

    Tout d’abord merci pour ton tuto clair et efficace.

    Je me permets de te demander ton avis pour un problème que je rencontre avec avec un projet Symfony 2.5 qui est hébergé chez OVH.
    Au chargement du site, il y a un petit moment de blocage, et après ça passe. Au bout de quelques temps (2 jours, 1semaines, 2 semaines..), ça finit par planter. Je vide le cache Symfony, et ça repart.
    Dans les logs, à part des « Username was reloaded from user provider. », rien ne me guide.

    J’ai essayé d’héberger chez moi le site (sur un Debian), et là aucun problème, tout roule. J’ai contacté OVH qui me dit que tout est Ok chez eux. J’ai retourné le pb dans tous les sens mais rien n’y fait…

    Aurais-tu déjà entendu parlé de ce genre de pb ou un avis sur la question ?

    Bon voyage !

    Thomas

  9. Hello Thomas, peux tu m’en dire plus sur ton moment de blocage. Tu as une page blanche ? Rien ne se charge ? Et ensuite qu’est ce qu’il se passe quand le site plante ? As tu essayé de passer en mode développement sur le serveur de prod ?

  10. Salut Johann,

    Tout d’abord, merci de m’avoir répondu !

    En fait ça bute quelques secondes (page blanche avec la barre de progression qui fige sur smartphone, mouline dans le vide sur ordi), et ensuite ça charge le site (tu peux faire le test : http://www.rezofresh.com).
    Au fur et à mesure, de jour en jour, ce temps devient de plus en plus long. Je vide le cache et ça repart (mais toujours avec un petit blocage comme s’il cherchait quelque chose qu’il ne trouve pas).
    J’ai essayé avec le controleur dev et avec les tests activés, mais ça fait pareil.
    Sur la version que j’avais installé sur un serveur test, accessible de l’extérieur, aucun problème.

    Dans les logs, j’ai ce genre de lignes :

    [2016-10-11 18:56:58] request.ERROR: Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: « No route found for « GET /rezofresh/web/img/bg-container.gif » (from « http://www.rezofresh.com/rezofresh/web/fr/terms ») » at /home/rezofresll/www/app/cache/prod/classes.php line 1985 {« exception »: »[object] (Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException(code: 0): No route found for \ »GET /rezofresh/web/img/bg-container.gif\ » (from \ »http://www.rezofresh.com/rezofresh/web/fr/terms\ ») at /home/rezofresll/www/app/cache/prod/classes.php:1985, Symfony\\Component\\Routing\\Exception\\ResourceNotFoundException(code: 0): at /home/rezofresll/www/app/cache/prod/appProdUrlMatcher.php:1776) »} []

    Ça me donne l’impression qu’il ne met pas tout correctement en cache, et que du coup il ne retrouve pas les fichiers. Mais est-ce une config OVH avec laquelle je ne serais pas raccord ? Est-ce un pb de chemin trop long, mais je ne serais pas le seul dans ce cas ? Fichtre..

    Si tu as une idée……

    Thomas

  11. Hello, désolé je n’ai pas pu regarder avant. Je viens de faire des tests et je n’ai rien trouvé d’anormal. Le site semble plutôt rapide même si là ou je me trouve je n’ai pas une connexion de fou (désert Australien ^^). En même temps il n’y a pas beaucoup de contenu sur la home. Si tu as un problème de cache, et que le site répond mieux quand tu le vides. Prévois peut être de mettre une routine dans ton crontab qui vide automatiquement le cache à une heure précise (un moment ou il n’y a pas beaucoup de visiteurs).

  12. Salut Johann,

    En effet depuis le dernier clear cache, ça fonctionne plutôt bien. J’ai changé la version de PHP chez OVH, ça y fait peut-être. Je vais surveiller et éventuellement mettre une tâche cron pour vider le cache régulièrement, ça me semble être une très bonne idée.

    Merci encore de m’avoir donné ton avis, et bon séjour dans le désert Autralien !

    A+

    Thomas

  13. Bonjour Johann,
    Merci pour votre explication ,j’ai eu du mal à comprendre la hiérarchie quand doit mettre dans le serveur et j’arrive pas a créer le lien symbolique vers le dossier web.
    Merci

  14. Merci pour ton super tutoriel !

    Après j’ai deux petites questions … En fait j’ai un serveur chez ovh mutualisé et une application sous symfony 3.1.9 et je cherchais justement un tutoriel pour la mettre en production car 10 000 fichiers via filezila c’est un peu long xD
    Mes problèmes sont les suivants :
    1) J’ai mon site sur git sur visualstudio et je ne comprends pas trop la partie :
    « Vous utilisez un serveur de version type git. Vous vous connectez en SSH sur le serveur : ssh user@votredomaine.com (Mot de passe : celui du FTP), puis récupérer votre application dans ce ddosier »…

    J’ai essayé de faire un git clone étant connecté en ssh via zoc à mon serveur mais ca me dit « Network is unreachable » si je met le lien ssh ou alors « error: bad index file sha1 signature
    fatal: index file corrupt » si je mets le lien https.

    2)Mon site ne marchant pas j’ai trouvé l’erreur : quand j’execute php bin/console symfony_requirements il me dit que ma version php est 5.4.45 alors qu’il me faut la version 5.5.9 pour exécuter symfony. Et bien entendu l’alias que tu as donné ne fonctionne pas si on le remplace par « alias php5=’php.ORIG.5_6 -c /usr/local/lib/php.ini-2′ » …

    Donc, pour moi et tous les autres qui vont tomber sur ton super article, pourrais-tu éclaircir ces points stp ?

    Un grand merci 🙂

  15. Hello Viktor,

    Etrange ton histoire de git clone qui ne fonctionne pas. Tu as quelque chose du genre : git clone https://johann@bitbucket.org/johann/mon-projet.git ?

    Pour le deuxième point je crois que tu peux maintenant le faire depuis le manager : https://docs.ovh.com/fr/fr/web/hosting/mutualise-configurer-la-version-de-php-depuis-votre-espace-client/ ?
    Sinon il doit aussi y avoir cette possibilité : https://docs.ovh.com/fr/fr/web/hosting/activer-loptimisation-php-sur-son-hebergement-mutualise-ovh/ ?

    Tiens moi au courant 🙂

  16. Alors je n’ai pas de .git en fait j’ai les liens suivants : https://keystonesolutionsdev.visualstudio.com/_git/panade et ssh://keystonesolutionsdev@keystonesolutionsdev.visualstudio.com:22/_git/panade… Mais bon j’ai envoyé une demande d’assistance chez OVH on verra ce qu’ils vont me dire. J’ai jamais travaillé avec le git de visualstudio peut-être c’est ça qui cloche… En tout cas mon IDE PHPSTORM arrive à faire un git commit & push sur ces addresses et je retrouve bien mon code sur visualstudio.com.

    Pour le deuxième point, en effet tu peux configurer la version globale de PHP qui est à 5.6 chez moi (qu’on peut vérifier dans .ovhconfig) mais ce n’est pas la même version que la version en console… Et entre temps j’ai trouvé le moyen de voir quelles sont les versions PHP disponibles en console et sur mon serveur il y a de la version 4.4 à la version 5.4 et pas la version 5.5 ni la 5.6 donc j’ai ouvert un ticker chez OVH.

  17. Salut et merci pour le tuto. Je tourne en rond depuis quelques jours. Mon site fonctionne nikel en local mais dès que je le déploie sur OVH j’ai une erreur après avoir passé mon login et password

    Catchable Fatal Error: Argument 4 passed to Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken::__construct() must be of the type array, null given, called in /home/gestiondwt/www/vendor/symfony/symfony/src/Symfony/Component/Security/Core/Authentication/Provider/UserAuthenticationProvider.php on line 96 and defined

    J’ai fait une copie de base entre mon poste et celle d’OVH car je pensais qu’il pouvait y avoir un pb sur la table utilisateur. MAis toujours le même pb. Je ne comprends pas pourquoi j’ai une différence de comportement. As tu déjà rencontré ce genre de pb ?

    Merci !

  18. J’ai déjà eu des problèmes du même genre. Ok en dev mais pas en prod. As-tu la même version de php sur les 2 environnements ?
    D’après ton erreur j’imagine que tu as créé ta propre classe utilisateur. Essaye d’ajouter ceci :

    public function getRoles()
    {
    return $this->roles->toArray();

    }

Laisser un commentaire