Hébergement d’un site CakePHP chez OVH (mutualisé)
Ce tutorial est valable pour les offres d’hébergement mutualisé suivantes :
- 60 GP
- 300 GP
- 90 PLAN
- 240 PLAN
- 720 PLAN
- MEDIA PLAN
- XXL PLAN
1. Arborescence distante
Lors de la première connexion sur l’espace FTP, l’arborescence à la racine de l’hébergement est la suivante :cgi-bin/
requetes/
sessions/
www/
Le répertoire www/ est la racine du nom de domaine. Tout ce qui se trouve en dehors de www/ est inaccessible par http.
1.1 Le cœur de CakePHP
Nous téléchargeons la dernière version de CakePHP sur le site officiel (actuellement, la 1.2.1.8004), la décompressons et l’uploadons à la racine de l’hébergement. On obtient l’arborescence suivante :cake_1.2.1.8004/
cgi-bin/
requetes/
sessions/
www/
Nous allons maintenant créer un « lien symbolique », une sorte de raccourci, vers le cœur de CakePHP en nous connectant à notre hébergement par SSH. Nous suivons les instructions indiquées ici : SSH sur un serveur mutualisé OVH. Une fois parvenus sur l’invite de commande, nous tapons :
ln -s cake_1.2.1.8004 cakephp
Si nous rafraîchissons le FTP, l’arborescence fait maintenant apparaître :
cake_1.2.1.8004/
cakephp/
cgi-bin/
requetes/
sessions/
www/
L’intérêt de créer ce lien symbolique est double :
- En cas de mise à jour de la version de CakePHP, il n’est pas nécessaire de mettre à jour le fichier
{app}/www/index.phpavec le nouveau chemin, à condition que dans ce fichier nous ayons bien indiqué le chemin vers le lien symbolique et non vers le répertoire réel. - Si la mise à jour du cœur de CakePHP ne se passe pas bien, il suffit de recréer le lien symbolique vers l’ancienne version pour que tout refonctionne.
1.2 Les fichiers de l’application
Retournons dans le FTP et uploadons les dossiers de notre application à la racine de l’hébergement, nous devons obtenir l’arborescence suivante :cake1.2.1.8004/
cakephp/
cgi-bin/
config/
controllers/
locale/
models/
plugins/
requetes/
sessions/
tests/
tmp/
vendors/
views/
www/
appcontroller.php
app_model.php
Nous plaçons ensuite le contenu de notre répertoire webroot/ dans le répertoire www/ après en avoir supprimé le contenu d’attente mis par défaut par OVH :
cake1.2.1.8004/
[...]
views/
www/
- css/
- files/
- img/
- js/
- .htaccess
- css.php
- favicon.ico
- index.php
- test.php
appcontroller.php
app_model.php
2. Configuration distante
2.1. Le fichier /config/core.php
Une seule ligne à modifier dans ce fichier, la 43 :43 | Configure::write('debug', 2); |
Devient :
43 | Configure::write('debug', 0); |
Ainsi les messages d’erreurs et les avertissements n’apparaissent pas au visiteur, évitant ainsi de donner de précieuses informations à une personne mal intentionnée.
2.2. Le fichier /config/database.php
Après avoir créé une nouvelle base de données sur l’hébergement en nous connectant au Manager v3 d’OVH, nous récupérons les 4 paramètres de connexion (nom de l’hôte MySQL, nom de la base, login et mot de passe) pour les inscrire dans la variable$default du fichier, ligne 73 :
73 74 75 76 77 78 79 80 81 82 83 84 | var $default = array( 'driver' => 'mysql', 'persistent' => false, 'host' => 'nom_de_l_hote', 'port' => '', 'login' => 'notre_login', 'password' => 'notre_mot_de_passe', 'database' => 'notre_base_de_donnees', 'schema' => '', 'prefix' => '', 'encoding' => '' ); |
2.3. Le fichier /www/index.php
C’est dans ce fichier que nous devons renseigner CakePHP sur son répertoire de travail et le chemin vers les fichiers du cœur. Nous changeons uniquement la ligne 57 :
57 | define('CAKE_CORE_INCLUDE_PATH', 'C:/Program Files/CakePHP/cake_1.2.1.8004'); |
Devient :
57 | define('CAKE_CORE_INCLUDE_PATH', '/home/[notre_login_ftp]/cakephp'); |
2.4. Le fichier /www/.htaccess
Le fichier par défaut fourni par CakePHP est le suivant :
1 2 3 4 5 6 | <IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule> |
Nous le modifions pour obtenir :
1 2 3 4 5 6 7 8 9 | SetEnv PHP_VER 5
SetEnv SESSION_USE_TRANS_SID 0
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php?url=$1 [QSA,L]
</IfModule> |
La première ligne force l’exécution des scripts PHP en version 5, la deuxième évite de faire transiter les id de sessions dans les url.
Note : surtout bien penser au / devant index.php à la dernière ligne (ou ajouter la ligne Rewritebase / après RewriteEngine On), sinon tous les liens seront cassés et nous n’aurons ni images ni feuilles de style.
Commentaires
4 février 2008 à 20:56
Bonjour,
Dans le .htaccess on peut se servir de la règle :
chez OVH, ça sert souvent, je pense à SPIP par exemple.
Le coup du lien symbolique, chapeau !
4 février 2008 à 21:31
L’instruction RewriteBase / doit être équivalente à l’ajout du slash devant index.php.
7 février 2008 à 4:14
Sur lesCigales.ORG ca marche sans aucune modification du .htaccess
J’adore ce framework et je développe actuellement le control panel de mon service d’hébergement dessus.
12 février 2008 à 17:36
Pour le déploiement d’une application (CakePHP ou autre) en production, j’ai développé Fredistrano. Je ne sais pas si c’est compatible avec OVH. Si vous l’essayez, ce serait cool de nous laisser un feedback sur le forum.
12 février 2008 à 17:43
Je vais regarder cette solution de près, c’est une excellente initiative !
13 février 2008 à 11:31
Salut,
Super ce petit aide mémoire pour le mutu OVH !
Juste un ajout qui peut être utile dans le .htaccess :
SetEnv REGISTER_GLOBALS 0 car c’est pas top sécurisé d’avoir les Globales activées (par défaut elles sont à On chez OVH).
13 février 2008 à 11:43
Merci pour l’info.
25 février 2008 à 18:59
Je suis chez OVH (90P) et j’ai suivi ce tutoriel avec attention. Cependant, je ne parviens à voir afficher mes images et mes feuilles de style ne sont pas pris en compte. Une idée ? NB : lorsque je trace les variable suivante, voilà ce que j’obtiens : - ROOT:/home.10.26 - APP_DIR:babywadi
Les photos que j’inclu via $html->image(’baby-wadititle.jpg’) ont comme iemplacement d’après mon navigateur : /babywadi/www/img/baby-wadititle.jpg En réalité, cette image se trouve dans /img/baby-wadi_title.jpg
25 février 2008 à 21:38
Avez-vous bien pensé à modifier le .htaccess ? En particulier la ligne :
RewriteRule ^(.*)$ /index.php?url=$1 [QSA,L]avec le slash devant index.php.26 février 2008 à 9:35
A vrai dire, lorsque j’enlève mon .htaccess, le comportement est le même. Les droits sur le .htaccess sont 644, comme il se doit. Je n’ai pas d’autre .htaccess ailleurs.
26 février 2008 à 10:12
J’avais désactivé l’utilisation du mod_rewrite dans le core.php. Maintenant tout va bien.
Pierre-Emmanuel, merci pour ton précieux tutoriel.
En revanche, j’aurais eu tendance à mettre tous les fichiers du répertoire ‘app’ initial dans un repertoire indépendant, genre ‘/home/monsite/monapp/’, et non directement à la racine de mon compte chez OVH (’/home/monsite/).
26 février 2008 à 11:03
C’est à dire que vous avez commenté la ligne suivante dans app/config/core.php (qui est déjà commentée par défaut) :
Configure::write('App.baseUrl', env('SCRIPTNAME'));Effectivement, et cela est bien précisé dans le commentaire au dessus de cette ligne, les « pretty URLs » sont incompatibles avec le modrewrite. « En revanche, j’aurais eu tendance à mettre tous les fichiers du répertoire ‘app’ initial dans un repertoire indépendant » J’ai considèré qu’il n’était pas viable d’héberger plus d’un site sur un mutualisé, mais si c’est votre objectif, vous pouvez effectivement cloisonner les applis par ce biais.28 février 2008 à 9:42
Bonjour Pierre-Emmanuel, Je n’ai pas tout à fait le même cas de figure que décrit dans l’article. Cake est déployé sur un sous-domaine (version de dév), mais je conserve le répertoire app sur le même niveau que celui du noyau. Le core est bien appelé (index.php) mais impossible de trouver les images et css. Qu’en est-il des 2 autre fichiers htaccess dont vous ne parlez pas ? (celui de app et celui de la racine) Merci d’avance pour votre aide
28 février 2008 à 9:59
Il y a deux .htaccess en tout : - un à la racine de l’application qui ne sera analysé que si votre application se trouve elle-même dans le webroot de l’hébergement (ce qui n’est pas le cas dans ce tutorial) :
<IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^$ webroot/ [L] RewriteRule (.*) webroot/$1 [L] </IfModule>Qui devient (chez OVH le webroot s’appelle www) :RewriteEngine on RewriteRule ^$ www/ [L] RewriteRule (.*) www/$1 [L]- le deuxième .htaccess se trouve dans le webroot, c’est celui-ci que nous décrivons à la fin de l’article.28 février 2008 à 12:18
Il y a 3 htaccess en tout par défaut dans cake (?) : - celui de la racine - celui de la racine de app - celui de la racine de webroot
Voici mon arbo sur le serveur (sous-domaine) :
cake
app/ .htaccess —- webroot/ —- .htaccess
.htaccess
=================== htacces de la racine : RewriteEngine on RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
htaccess de app : RewriteEngine on RewriteRule ^$ webroot/ [L]
RewriteRule (.*) webroot/$1 [L]
htaccess de webroot : SetEnv PHPVER 5 SetEnv SESSIONUSETRANSSID 0 RewriteEngine On RewriteCond %{REQUESTFILENAME} !-d RewriteCond %{REQUESTFILENAME} !-f RewriteRule ^(.*)$ /index.php?url=$1 [QSA,L]
Le soucis, c’est lorque que j’appele une url du type : http://www.mosite.com/page il reroute vers http://www.monsite.com/home/loginftp/page
28 février 2008 à 12:37
Ca m’a l’air correct. Je regarderai plutôt du côté du fichier webroot/index.php pour voir si les constantes ROOT et APP_DIR sont correctes pour votre configuration.
28 février 2008 à 13:13
Mon erreur était dans le htaccess de la racine. Il ne faut pas oublier le slash. Merci de ta réactivité Pierre-Emmanuel
htacces de la racine : RewriteEngine on RewriteRule ^$ /app/webroot/ [L] RewriteRule (.*) /app/webroot/$1 [L]
22 janvier 2009 à 11:55
Info à noter :
CHMOD : la racine du site doit être en 705, les dossiers et les scripts en 755 au maximum. Pas de 777, sinon vous aurez droit à une « Internal Server Error » assez inexplicable.
Je viens de lutter des heures sur les .htacces alors qu’il s’agissait d’un CHMOD
30 janvier 2009 à 16:50
Autre info, il faut maintenant spécifier le répertoire ROOT pour CakePHP tel qu’on le voit en ssh (/homz.xxx/login/cakephp) au lieu de /home/login/cakephp
26 février 2009 à 8:53
Bonjour,
Merci pour le tutoriel, très utile et bien référencé.
Cependant, en ce mois de février 2009, la version de CakePHP (1.2.1.8004) me semble nécessiter beaucoup moins de configuration qu’évoqué ci-dessus. Peut-être est-il temps de dire à quelle version ce tutoriel s’applique, voire de le revoir entièrement pour coller à la réalité de la nouvelle version.
Les sections 2.1 et 2.3 par exemple sont obsolètes. Et je ne suis pas sûr que 2.2 soit encore d’actualité, vu que tout marche sans modif pour moi…
Encore merci,
Jean.
26 février 2009 à 9:42
J’ai mis à jour l’article avec le numéro de version actuel, mais les sections que tu indiques ne sont pas obsolètes du tout.
26 février 2009 à 11:26
Bonjour,
Pour faire suite aux commentaire ci-dessus…
Dans la section 2.1, la valeur par défaut dans CakePHP 1.2.1.8004 est déjà correcte:
Dans la section 2.3, la valeur par défaut dans CakePHP 1.2.1.8004 est aussi correcte, puisqu’elle est calculée dynamiquement:
Par contre il faut modifier la clé dans la ligne suivante (je ne sais pas bien pourquoi, d’ailleurs):
Ceci dit, je ne connais pas du tout ni PHP ni CakePHP, je découvre au fil du tutoriel d’IBM…
Merci pour la réponse rapide!
Jean.
8 mai 2009 à 14:22
Petite astuce pour ceux qui ne sont pas fortiches en ligne de commande, comme moi ;o)
Pour « recréer le lien symbolique » suite à un changement de version Cake, il faut d’abord le supprimer !
Cela paraît simple ou évident, mais tel que le dit le tuto, on pourrait penser qu’il suffit de repasser la ligne de commande « ln -s cake_1.2.1.8004 cakephp » en modifiant juste le nom du répertoire cake.
Donc avant de recréer votre lien symbolique, faites un bête « rm cakephp » ;o)
12 mai 2009 à 11:50
« internal server error »!
je viens de developper mon site avec cakePHP et à ma plus grande surprise, sur un env en prod jai un « error 500″ donc un « internal server error ». Jai bien suivi les recommandations de « Bastien » mais rien a faire.
Comme la souligné « jean » certaines sections ne sont peut etre plus utile. Tel que le changement de ROOT.
Je suis sur la version 1.2.3… de cake
Jai bien suivi ce tutoriel, mais j’ai l’impression que cela vient des .htaccess. J’ai tout essayé,
Avec 1, 2, ou 3 .htaccess dans les differents repertoire Racine, app/, et app/webroot/ ou (app/www/)
Si je les supprime tous, j’arrive a acceder a mon site, mais le pb est que mes liens absolus ne fonctionnent plus (/maPage.html par ex)
Cela fait des heures que je cherche la solution sur internet, par ex decommenté le « » etc
jai uploadé les fichiers avec mon compte utilisateur et non root.
bref, rien a faire. Aidez moi svp.
ma config: je suis sur un kimsufi (dedié OVH) avec gentoo. PHP5 + mySQL5
ps: en env de dev, je nutilise pas le RewriteBase / et tout marche bien !!!
6 juin 2009 à 9:25
Bonjour, je débute un peu dans cakePHP et j’ai une question
Si on veut gérer plusieurs applications (app1, appp2, ..) qui utilisent le même cœur de cakePHP, on procède comment ?
cake_1.2.1.8004/ (cœur cakePHP) cakephp/ (lien symbolique) app1/ - config/ - controllers/ - locale/ - models/ - plugins/ - [] app2/ - [] cgi-bin/ requetes/ sessions/ www/ - css/ - files/ - img/ - js/ - .htaccess - css.php - favicon.ico - index.php
Et dans ce cas ci-dessus, qu’aurait-on à changer dans les htaccess ou autres ? Ou bien faudrait-il utiliser une autre configuration ?