Comment déployer une application symfony2 sur OVH

Exceptionally, this article is in French. I’ll talk about how to deploy a symfony2 application on an OVH server, which is a french webhost.

J’ai récemment déployé mon nouveau projet symfony2 sur mon serveur mutualisé OVH. Et c’est après quelques petites astuces que j’ai pu faire marcher tout cela sans heurt.

La première chose à savoir sur un serveur OVH, c’est comment changer la version de php. En effet la version par défaut est la 4.4.9 au moment où j’écris ces lignes, alors que symfony 2 requiert au mois la version 5.3.2.

Pour avoir la dernière version de php en ligne de commande : [cci]php.TEST.5[/cci]

Et pour activer la dernière version de PHP pour apache, mettez en tête du .htaccess :

[cc]
SetEnv REGISTER_GLOBALS 0
SetEnv MAGIC_QUOTES 0
SetEnv ZEND_OPTIMIZER 1
SetEnv PHP_VER 5_TEST
[/cc]

Comme vous pouvez le voir, j’ai rajouté quelques lignes pour avoir une configuration plus propre.

Ensuite, si comme moi vous développez en environnement Windows, vous allez avoir des erreurs signifiant que symfony n’arrive pas à charger certaines classes. Cela vient probablement du fait que vous avez oublié de respecter la case dans le nommage de vos répertoire ou bien dans le fichier [cci]/app/autoload.php[/cci].

Finalement, lors de l’utilisation de la commande [cci]assets :install web[/cci] pour le déploiement de vos ressources (images, swf…), la commande risque de vous signifier que le répertoire [cci]web[/cci] n’existe pas. Pour cela vous devez pointer vers le répertoire avec un chemin relatif au répertoire [cci]/app/[/cci]. Ce qui nous donne : [cci]assets :install ../web[/cci].

Et voilà, normalement tout fonctionne. En cas de soucis, n’oubliez pas de vérifier la configuration de la connexion à votre base de données dans le fichier [cci]/app/config/parameters.ini[/cci] et d’effacer le répertoire [cci]/app/cache/prod/[/cci].

Note : A propos de php, il est toujours possible d’avoir la liste des versions disponibles en faisant [cci]ls -l /usr/local/bin/php*[/cci] depuis la ligne de commande.

EDIT: la dernière note est devenue obsolète. De plus php.TEST.5 n’est plus utilisable, on peut maintenant utiliser php.ORIG.5.3.2.

About these ads

25 thoughts on “Comment déployer une application symfony2 sur OVH

  1. Vincent says:

    Bonjour,

    Lors de mon déploiement sur ovh, j’ai utilisé la commande php.ORIG.5.3.2 app/console cache:clear et j’ai ce message :
    Notice: Use of undefined constant STDIN – assumed ‘STDIN’
    mon projet utilise la dernière version de symfony, tandis qu’un autre de mes projets qui utilise l’une des dernière pre release de symfony ne rencontre pas ce problème
    J’ai vu que vous aviez fait unfix sur STDIN : https://github.com/symfony/symfony/pull/1877

    Est ce que vous avez rencontré le même problème ?

    • Bonjour Vincent,
      J’ai en effet rencontré le même problème et le fix que j’ai soumis règle le problème ;)
      Il te suffit juste de mettre a jour jour ton deps.lock avec l’ID de mon commit.
      Michel

  2. Vincent says:

    Merci pour ta réponse,

    Je ne suis pas sûr d’avoir compris ce qu’il fallait faire, dans mon deps.lock, j’ai remplacé la ligne concernant symfony par ça :
    symfony 07298ac699a648e67095575f5fa2004359dbf7a9
    mais à chaque fois que je fais php bin/vendors update, la ligne est remplacé par
    symfony c3ebdbf9cceddb82cd2089aaef8c7b992e536363

    Finalement, j’ai reporté ta modification sur mon fichier src/Symfony/Component/Console/Helper/DialogHelper.php, ce qui m’a permis de déployer correctement mon application.

    Je te remercie pour ton aide, pourrais tu m’expliquer ce que je fais mal ?

    Merci d’avance

    • Pour pouvoir installer des vender en tenant compte du deps.lock il faut faire un [cci]php bin/vendors install[/cci] et non un [cci]php bin/vendors update[/cci] ;)

  3. Bonjour,

    J’ai un hébergement mutualisé OVH PRO et j’ai installé la version 2.0.1 de Symfony. J’ai vu que dans cette release, le problème du STDIN avait été fixé.
    Or, je rencontre toujours cette erreur en faisant un :
    php app/console generate:bundle
    Erreur :
    [ErrorException]
    Notice: Use of undefined constant STDIN – assumed ‘STDIN’ in …/src/Symfony/Component/Console/Helper/DialogHelper.php line 38

    Que dois-je faire ?

    Merci

      • Voici ce que j’ai :
        class DialogHelper extends Helper
        {
        private $inputStream;

        /**
        * Asks a question to the user.
        *
        * @param OutputInterface $output
        * @param string|array $question The question to ask
        * @param string $default The default answer if none is given by the user
        *
        * @return string The user answer
        */
        public function ask(OutputInterface $output, $question, $default = null)
        {
        $output->write($question);

        $ret = fgets($this->inputStream ?: STDIN, 4096);
        if (false === $ret) {
        throw new RuntimeException(‘Aborted’);
        }
        $ret = trim($ret);

        return strlen($ret) > 0 ? $ret : $default;
        }

      • Je viens de trouver la solution de mon problème.
        J’en dû rajouter :

        define(‘STDIN’,fopen(“php://stdin”,”r”));

        après : use SymfonyComponentConsoleOutputOutputInterface; dans le fichier DialogHelper.php

      • J’ai rajouté define(‘STDIN’,fopen(“php://stdin”,”r”)); après : use SymfonyComponentConsoleOutputOutputInterface; dans le fichier DialogHelper.php et ça l’a régle mon problème de STDIN

  4. Max says:

    Bonjour,

    Je suis un newbie en terme de Framework, MVC et donc de Symfony.

    J’ai modifié le HTACCESS en focntion de ce que j’ai lu plus haut

    SetEnv REGISTER_GLOBALS 0
    SetEnv MAGIC_QUOTES 0
    SetEnv ZEND_OPTIMIZER 1
    SetEnv PHP_VER 5_TEST

    Par contre j’obitnes le message d’erreur :
    This script is only accessible from localhost.

    une idée ??

    (d’ailleurs je n’ai toujours pas compris si il etait besoin d’installer symfony 2 sur le serveur ou si on pouvait simplement uploader les fichiers php générés par Symfony sur le serveur. C’est vous dire si je suis un newbie en la matière :) )

    Merci

    • Bonjour,

      Pour répondre à ta premiere interrogation, le message d’erreur que tu reçois te vient simplement du fichier app_dev.php qui interdit des connexion à la page depuis le net (question de sécurité évidente puisque c’est l’environnement de développement). Tu dois donc utiliser le app.php pour utiliser ton application.
      Ensuite il faut bien évidement tous les fichiers de symfony sur lesquel ton application repose pour que tout fonctionne bien.

  5. Chinoisfurax says:

    Bonsoir.
    Cet article m’a bien aidé, cependant, j’ai un problème avec Doctrine.
    Lorsque je rentre en SSH :
    php.ORIG.5.3.8 app/console doctrine:schema:create
    j’ai droit à un
    [PDOException]
    SQLSTATE[HY000] [2002] Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)

    Auriez-vous une idée pour régler ce problème ? Vous m’enlèveriez une épine du pied.

  6. Fred says:

    Je n’arrive pas à l’installer, j’ai copier mon projet symfony à la racine principale, mais je suis sur un hébergement mutualisé d’ovh, et le répertoire www est obligatoire pour le domaine principal. Comment je peux faire pour qu’il prenne le répertoire web ?

      • Fred says:

        Bonjour,

        J’ai résolu mon problème, j’ai du créér un sous-domaine, ainsi je pointe sur le répertoire web, et mon domaine principal j’ai fait un redirect permanent sur mon sous-domaine.

        Mon soucis actuel est que je n’arrive pas à me connecter à la base de données, j’ai utilisé putty pour créer mes tables tout fonctionne. Mais lorsque je clique sur un lien qui récupère des données dans la base de données, j’obtiens l’erreur suivante : SQLSTATE[42S02]: Base table or view not found: 1146 Table ‘focalemefocale.photo’ doesn’t exist .
        J’ai bien paramétrer le fichier parameters.ini et config.yml. Où est mon erreur ?
        Merci

      • Fred says:

        Serait ce nu que mon entity est Photo ainsi que dans la base de données et que l’erreur indique la table avec un p minuscule ?

      • Fred says:

        Cela vient du fait qu’il fait appelle une table photo avec un p minuscule alors que mes entités et mes tables de la base commencent toutes par une lettre majuscule. J’ai créé une table photo dans la base et là plus d’erreurs, comment faire pour résoudre le problème ?

  7. Dans la série problème avec les majuscule il y a aussi le nom des tables qui peut poser problème.
    Je n’avais aucun soucis en Local et une fois en ligne j’avais des erreurs du genre “Base table or view not found”.
    L’astuce est de spécifier un nom à la table dans vos entité comme ceci:
    @ORMTable(name=”contact”)

  8. Ziemelitis says:

    Bonjour,

    Depuis peu je n’arrive plus utiliser php en ligne de commande php.ORIG.5.3.2 sur OVH.
    Il y a en changement? Comment je peux continuer utiliset la dernière version de php en ligne de commande???

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s