mardi 25 mai 2010

Symfony sur mutualisé (OVH, 1&1 etc) = La solution

Bonjour,
La solution aujourd'hui pour envoyer son site fait sous symfony sur un hébergeur mutualisé.
Pas d'accès SSH, donc pas de lignes de commandes. Il faut cependant avoir les droits minimaux sur le serveur.

Connectez-vous à votre espace de stockage par ftp.
Normalement, vous avez un dossier /www, il faut y mettre le contenu de votre dossier
/web.
Si vous n'avez pas de répertoire www, comme j'ai pu rencontrer le problème sur OVH, il faudra aller dans le panneau d'administration afin de définir le dossier /web (que vous aurez copié de votre projet initial (symfony)) comme répertoire par défaut.
Supprimez le reste

Tous les autres repertoires (apps, config, cache, ...) iront à la racine de votre espace.


Donc vous avez une architecture quasi similaire, peut être à l'exception du dossier web renommé en www


Uploadez votre installation de symfony à la racine, aux cotés des dossiers apps et config.
Je l'ai personnellement installé dans le dossier symfony-1.4.
Maintenant, il faut faire pointer vers ce repertoire.
Cela se passe dans le fichier /config/ProjectConfiguration.class.php ou il faut modifier la ligne require_one '/mon/path/local/vers/symfony';
Vous devez mettre le nouveau chemin. Il commence chez ovh par homez.{3chiffres} Mais vous n'êtes pas censé le connaitre. Pour le savoir, on peut soit générer une erreur en allant sur le site dès maintenant, php va dire qu'il y a une erreur à tel endroit, il faudra alors copier ce chemin, soit en affichant <? echo realpath("index.php"); ?> dans le fichier index.php


cela donne donc quelquechose du style :
require_once
'/homez.123/monnom/symfony-1.4/lib/autoload/sfCoreAutoLoad.class.php';


Ensuite tant qu'on est dans le fichier de conf, si vous avez un dossier www au lieu du fichier web initial, on va surcharger la variable de configuration sf_web_dir qui pointe normalement sur web.

sfConfig::set('sf_web_dir', '/homez.123/monnom/www');

Sinon, on y touche pas.
Il ne reste plus qu'une seule chose à faire pour le coté config, la base de données, c'est plutot facile aussi, l'offre de base permet d'avoir une base de données en général, il faut d'abord la créer dans le manager. Ensuite il vous donne les informations d'accès.


Ouvrez donc le fichier /config/databases.yml
Il faut juste modifier les identifiants de connexion avec les votres...


all:
  doctrine:
    class: sfDoctrineDatabase
    param:
      dsn:      mysql:host=mysql5-xx.perso;dbname=monnomdb
      username:
monnom
      password:
monpassw


SetEnv PHP_VER 5
Options  FollowSymLinks  ExecCGI

<IfModule mod_gzip.c>
mod_gzip_on Off
</IfModule>

<IfModule mod_rewrite.c>  

RewriteEngine On  

# Permettre a IE de reconnaitre le win_png.htc de retraitement des png transparents
#AddType text/x-component .htc  

#RewriteBase /~votredossierbase/  

# we skip all files with .something
RewriteCond %{REQUEST_URI} \.. $
RewriteCond %{REQUEST_URI} !\.html$
RewriteCond %{REQUEST_URI} !\.php
RewriteRule .* - [L]   # we check if the .html version is here (caching)  

# RewriteRule ^$ index.html [QSA] # Suppression du "/" pour un sous-dossier
RewriteRule ^$ /index.html [QSA]
RewriteRule ^([^.] )$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f  

# no, so we redirect to our front web controller
# RewriteRule ^(.*)$ index.html [QSA] # Suppression du "/" pour un sous-dossier
RewriteRule ^(.*)$ /index.php [QSA,L]   # hidden frontoffice controller
# RewriteRule ^(.*)$ index.html [QSA] # Suppression du "/" pour un sous-dossier
RewriteRule ^index\.php/(.*)$ /index.php [QSA,L]

</IfModule>
# big crash from our front web controller
ErrorDocument 500 "<h2>Application error</h2>symfony application failed to start properly








Plutot facile jusqu'à maintenat hein ? Hé bien c'est quasi fini, c'est vraiment trop cool symfony... :)

Maintenant, il faut
copier le repertoire sf de votre installation de symfony /homez.123/monnom/symfony-1.4/data/bin/web/sf/ sans quoi vous n'aurez pas les petites images intégrées du framework notamment utilisé par la debug bar.

Désormais, il ne reste qu'une seule chose à faire, le .htaccess
Créez un fichier dans le dossier
/www que vous appelerez .htaccess et mettez ca dedans :Assurez vous que les dossiers
/cache et /log soient bien vides et que les droits sont bien à 775 ou 777
puis
profitez de votre site.

7 commentaires:

  1. merci pour ce petit tuto, je me posais justement la question. Je teste ça ce soir !

    RépondreSupprimer
  2. D'acc, dis moi si jamais il y a des choses qui ne fonctionnent pas !

    RépondreSupprimer
  3. Ok donc j'ai finalement réussi à installer symfony sur un mutu perso OVH en suivant ta doc.

    Par contre j'ai rencontré plusieurs petits problèmes :

    -Si je laisse dans le .htaccess ce qu'il y a sous "# big crash from our front web controller" je me retrouve avec... une erreur 500.

    -Sans ce bloc, je me retrouve ensuite avec l'erreur suivante : "Parse error: syntax error, unexpected T_STRING in /homez.xxx/xxx/apps/frontend/templates/layout.php on line 1".
    C'est du à la directive "php short_open_tag on" de OVH et le parsing de la balise <?xml du fichier layout.php qui est interprétée comme une balise ouvrante PHP.
    Vu qu'il n'est pas possible de modifier cette configuration sur un OVH mutu, la seule solution est de supprimer cette balise de l'entête de la page.

    Après ces deux petites manipulations, tout a l'air de fonctionner correctement.

    Merci à toi !

    RépondreSupprimer
  4. Salut Leny, Merci pour ce tuto.

    J'ai suivi la procedure que tu decris, cependant j'ai un probleme:

    - En mode developpement tout fonctionne bien (j'ai du faire la modif dans mon frontend_dev.php pour pouvoir l'utiliser sur un environnement de prod, c'est pas beau mais c'etait juste pour voir).
    - En revanche, en mode production, j'obtiens une erreur 404: 'The requested URL /index.php was not found on this server.'

    J'ai essayé differentes manipulations (index.php, config, .htaccess...), rien a faire. Pour info, j'utilise la cuture dans l'URL (ex: www.monprojet.com/fr/module/action...).

    Quelques points qui pourraient aiguiller:
    - en local, l'environnement de production fonctionne correctement
    - quand je tape www.monprojet.com --> erreur 404
    - quand je tape www.monprojet.com/index.php --> je suis redirigé vers www.monprojet.com/fr/ et une erreur 404 s'affiche
    - quand dans le .htaccess je mets le RewriteEngine à Off, alors si je tape www.monprojet.com/index.php/en/module/action/parameters --> je peux visualiser correctement la page (sans pouvoir naviguer car les liens internes sont écrits sans le index.php).

    Si tu as une idée de ce qui se passe, ce serait tres apprécié! Je pensais a un pb avec le htaccess ou le routing, ou la config du serveur, mais je n'ai pas reussi a isoler le soucis.

    Pour info, je suis sur un OVH plan90.

    J'espere que tu pourras me donner un coup de main, merci,

    Ced.

    RépondreSupprimer
  5. Une petite update: j'ai résolu mon probleme en jouant avec le .htaccess.

    Voici ma solution en esperant que ca puisse aider certain d'entre vous:

    .htaccess:

    SetEnv PHP_VER 5
    SetEnv SESSION_USE_TRANS_SID 0

    Options +FollowSymLinks +ExecCGI

    mod_gzip_on Off
    RewriteEngine Off


    RewriteEngine On

    # uncomment the following line, if you are having trouble
    # getting no_script_name to work
    #RewriteBase /

    # we skip all files with .something
    #RewriteCond %{REQUEST_URI} \..+$
    #RewriteCond %{REQUEST_URI} !\.html$
    #RewriteRule .* - [L]

    # we check if the .html version is here (caching)
    RewriteRule ^$ /index.html [QSA]
    RewriteRule ^([^.]+)$ $1.html [QSA]
    RewriteCond %{REQUEST_FILENAME} !-f

    # no, so we redirect to our front web controller
    RewriteRule ^(.*)$ /index.php [QSA,L]

    RépondreSupprimer
  6. Merci, c'est sympa de mettre ta réponse, ça servira surement à quelqu'un d'autre.

    RépondreSupprimer
  7. Bonjour,

    C'est une bonne documentation. Toutefois, pour ceux qui n'ont pas les permissions (Erreur 550) à la racine du FTP, là où il y a « cgi_bin », « errors », etc, ils ne pourront pas suivre la documentation car ils seront bloqué au niveau des fichiers de configuration. ;)

    Bien à vous.

    RépondreSupprimer

Bonjour,