Traductions de cette page?:

Installation d'Agavi / Propel sur un serveur Mutualisé (Free.fr)

Il s'agit d'installer le couple Agavi/Propel sur un serveur sans compte shell. En effet, il n'est pas forcement très pratique d'avoir chez soit un PC dédié ou de louer un serveur.

Pour que ça fonctionne il faut :

  • Le serveur ait PHP5 5.1.3 minimum
  • avoir un accès ftp
  • Pouvoir exécuter propel en local sur notre machine personnelle

Les limitations probables :

  • Il est assez rare qu'un serveur mutualisé autorise l'adresse rewriting.

Point particulier aux serveur Free.fr

  • Il n'est pas possible de modifier le chemin d'include
  • Pour cela, le répertoire include situé à la racine du site est systématiquement dans le chemin de recherche.
  • Du fait que la version de PHP n'est pas la 5.2, il n'est pas possible d'utiliser propel 1.3, nous utiliserons donc la version 1.2. Cela n'a pas d'impact importante sur le code. Par contre, les performances de la version 1.2 sont nettement en dessous de la 1.3.

Je prendrai comme exemple la dernière version du projet forumphp-v1.16.01.tar.gz, qui a servi dans le tutorial Developpement avec DbDesigner/Propel/Agavi.

Upload des runtimes

Les serveurs mutualisés, même si ils possèdent déjà pas mal de choses, n'ont pas toutes les librairies dont nous avons besoin, en particulier, il est assez peut probable qu'ils aient Propel ou Agavi. Nous allons donc commencer par uploader celles qui nous manques.

Il faut avoir sur son ordinateurs les sources décompressées d'Agavi, Propel 1.2 et Creole Creole

Sur les serveurs de free.fr, le répertoire include est systématiquement ajouté au chemin de recherche php. C'est donc dans ce répertoire que nous allons ajouter nos sources, pour les autres serveurs, il est également possible d'adopter le même répertoire et de l'ajouter dans le chemin de recherche.

Ce répertoire contiendra probablement des informations sensibles (mot de passe, code xml, etc ..). Pour éviter qu'il ne soit distribué à tout vent, on va le sécuriser en y ajoutant le fichier .htaccess suivant

deny from all

De cette manière toutes les requêtes externes vers ce répertoire seront rejetées.

Agavi

Dans le répertoire des sources d'agavi, il y a un répertoire nommé src, commencez par le renommé Agavi. Une fois cela fait, utiliser votre client ftp favori pour l'uploader dans un sous répertoire include de votre serveur.

Propel

Une fois décompressé les sources de Propel contiennent un répertoire runtime qui lui même contient un répertoire classes qui contient (enfin) un répertoire propel. C'est ce répertoire qu'il faut uploader dans le répertoire include juste à coté de agavi

Creole

Il suffit de procéder de la même manière, après avoir décompressé les source, uploader le répertoire creole dans le répertoire include

Divers

Il n'est pas totalement impossible, que vous ayez à ajouter d'autres packages manquants sur votre serveur. Il suffira de faire comme pour le package Agavi et Propel, de les décomprésser en local et de les uploader dans le répertoire include

Sur le serveur Free, par exemple il faut uploader Log

Configuration d'un projet Agavi

Maintenant, nous avons un projet Agavi tout neuf, généré en locale sur notre PC/Mac, grace au script agavi. Il va falloir éditer quelque fichiers afin de lui faire comprendre où se trouve nos runtimes.

Nous allons uploader le contenu du répertoire pub à la racine de notre site et le répertoire app dans le répertoire pear

En principe, il y a juste a modifier le fichier index.php, en modifiant les 2 premier require. Comme notre chemin include est dans le chemin par défaut, nous pouvons tous spécifier à partir de celui-ci.

<?php

// +---------------------------------------------------------------------------+
// | An absolute filesystem path to the agavi/agavi.php script.                |
// +---------------------------------------------------------------------------+
require('agavi/agavi.php');

// +---------------------------------------------------------------------------+
// | An absolute filesystem path to our app/config.php script.                 |
// +---------------------------------------------------------------------------+
require('app/config.php');

// +---------------------------------------------------------------------------+
// | Initialize the framework. You may pass an environment name to this method.|
// | By default the 'development' environment sets Agavi into a debug mode.    |
// | In debug mode among other things the cache is cleaned on every request.   |
// +---------------------------------------------------------------------------+
Agavi::bootstrap('development');

// +---------------------------------------------------------------------------+
// | Call the controller's dispatch method on the default context              |
// +---------------------------------------------------------------------------+
AgaviContext::getInstance('web')->getController()->dispatch();
?>

Il faut egalement supprimer l'appel a la fonction filter_var, qui ne fait pas partie des fonctions php 5.1, elle est présente dans

  • ./modules/Default/actions/CreerDiscussionAction.class.php
  • ./modules/Default/actions/CreerMessageAction.class.php

Upload

Il faut maintenant tout mettre sur le serveur. Voici le tableau représentant ce que nous devons uploader et où les mettre. Je prends comme répertoire source de base, l'endroit ou vous avez decompressé l'archive de ForumPHP, et comme répertoire de destination la racine du serveur.

DescSourceDestination
Application agavi/app/ include/app/
Index agavi/pub/index.phpindex.php
Data Public agavi/pub/modpub/modpub/

Astuce pour Free

Forcement comme beaucoup de monde .. j'ai un compte chez free et c'est avec ce fournisseur que j'ai fait mes tests. Voici les petites adaptations à faire pour qu'agavi fonctionne :

Activer php5

Par défaut Free utilise php4. Pour forcer l'utilisation de php5 sur tout le site il faut uploader un fichier .htaccess à la racine du site contenant une seule ligne :

php 1

C'est bête … et je sais pas pourquoi ils ont choisit ça .. mais ça marche :)

Version de PHP5

Il reste un point à régler .. en effet à ce jour (19/07/2008), la version de php 5 utilisée par les serveurs de Free est 5.1.3RC4-dev. Et forcement, la fonction de comparaison de version utilisée par Agavi considère que ça n'est pas une vrai 5.1.3. La solution : éditer le fichier agavi.php et spécifier que la version minimum de php est la 5.1.2.

<?php

// +---------------------------------------------------------------------------+
// | This file is part of the Agavi package.                                   |
// | Copyright (c) 2003-2008 the Agavi Project.                                |
// |                                                                           |
// | For the full copyright and license information, please view the LICENSE   |
// | file that was distributed with this source code. You can also view the    |
// | LICENSE file online at http://www.agavi.org/LICENSE.txt                   |
// |   vi: set noexpandtab:                                                    |
// |   Local Variables:                                                        |
// |   indent-tabs-mode: t                                                     |
// |   End:                                                                    |
// +---------------------------------------------------------------------------+

/**
 * Pre-initialization script.
 *
 * @package    agavi
 *
 * @author     Sean Kerr <skerr@mojavi.org>
 * @author     Mike Vincent <mike@agavi.org>
 * @author     David Zülke <dz@bitxtender.com>
 * @copyright  Authors
 * @copyright  The Agavi Project
 *
 * @since      0.9.0
 *
 * @version    $Id: agavi.php 2258 2008-01-03 16:54:04Z david $
 */

// load the AgaviConfig class
require(dirname(__FILE__) . '/config/AgaviConfig.class.php');

// check minimum PHP version
AgaviConfig::set('core.minimum_php_version', '5.1.2');
if(!version_compare(PHP_VERSION, AgaviConfig::get('core.minimum_php_version'), 'ge') ) {
        die('You must be using PHP version ' . AgaviConfig::get('core.minimum_php_version') . ' or greater.');
}

// define a few filesystem paths
AgaviConfig::set('core.agavi_dir', dirname(__FILE__), true, true);

// default exception template
AgaviConfig::set('exception.default_template', AgaviConfig::get('core.agavi_dir') . '/exception/templates/shiny.php');

// required files
require(AgaviConfig::get('core.agavi_dir') . '/version.php');
require(AgaviConfig::get('core.agavi_dir') . '/core/Agavi.class.php');
?>

Les sessions

Dernier point, les sessions des serveurs Free sont stockées dans l'espace du site web, il faut donc avoir à la racine de celui-ci un répertoire sessions

N'oubliez pas d'y ajouter le fichier .htaccess

deny from all

Configuration de Propel

Préparation

Il faut au préalable créer quelques répertoires sur le serveur.

  • log ⇒ contiendra les logs de propel
  • db ⇒ contiendra la base de donnée sqlite

Dans chacun de ces répertoires il faut également créer un fichier .htaccess contenant :

deny from all

Afin de se garantir contre tout vol de données critiques

Fichiers de configurations Propel

Comme seul le driver SQLITE est installé sur les serveurs de Free.fr, il faut également spécifier que c'est cette base que nous allons utiliser.

On a donc le fichier build.properties qui devient :

# The name of the project
propel.project = forum

# The database driver
propel.database = sqlite

Et le fichier runtime-conf.xml :

<?xml version="1.0" encoding="ISO-8859-1"?>
<config>
 <log>
  <ident>propel-forum</ident>
  <level>7</level>
  <name>log/forum.log</name>
 </log>
 <propel>
  <datasources default="forum">
   <datasource id="forum">
    <!-- the Propel adapter (usually same as phptype of connection DSN) -->
    <adapter>sqlite</adapter>
    <connection>
      <phptype>sqlite</phptype>
      <database>db/forum.db</database>
    </connection>
   </datasource>
  </datasources>
 </propel>
</config>

Il suffit ensuite de générer le projet propel avec la commande propel-gen, pour obtenir les fichiers de configuration et le code associé.

Une fois ces fichiers obtenus, il faut creer la base en local avec la commande sqlite. Attention, les serveurs de free.fr, utilisent la version 2 de sqlite pour les connections non PDO.

fabrice@golgoth13-ubu:~/dev/tofree/ForumPHP-V1.16.01/propel$ mkdir log
fabrice@golgoth13-ubu:~/dev/tofree/ForumPHP-V1.16.01/propel$ mkdir db
fabrice@golgoth13-ubu:~/dev/tofree/ForumPHP-V1.16.01/propel$ sqlite db/forum.db
SQLite version 2.8.17
Enter ".help" for instructions
sqlite> .read build/sql/schema.sql
DROP TABLE [utilisateur];
SQL error: no such table: [utilisateur]
DROP TABLE [message];
SQL error: no such table: [message]
DROP TABLE [forum];
SQL error: no such table: [forum]
DROP TABLE [discussion];
SQL error: no such table: [discussion]
sqlite> .quit
fabrice@golgoth13-ubu:~/dev/tofree/ForumPHP-V1.16.01/propel$

On peut ignorer les warnings, qui proviennent de la tentative d'effacement des tables qui n'existent pas (forcément on vient juste de les créer)

On doit pouvoir maintenant utiliser notre script php de création des données par défaut :

<?php
//   Copyright (C) 2008 Fabrice Didierjean (fabrice@coredmp.net)
//   This file is part of ForumPHP.

//    Foobar is free software: you can redistribute it and/or modify
//    it under the terms of the GNU General Public License as published by
//    the Free Software Foundation, either version 3 of the License, or
//    (at your option) any later version.

//    Foobar is distributed in the hope that it will be useful,
//    but WITHOUT ANY WARRANTY; without even the implied warranty of
//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//    GNU General Public License for more details.

//    You should have received a copy of the GNU General Public License
//    along with Foobar.  If not, see <http://www.gnu.org/licenses/>.




set_include_path(get_include_path() . PATH_SEPARATOR . './build/classes/');
set_include_path('../../propel-1.2.1/runtime/classes'. PATH_SEPARATOR .get_include_path());

print get_include_path();

require_once('propel/Propel.php');
require_once('forum/Utilisateur.php');
require_once('forum/Forum.php');
require_once('forum/Message.php');
require_once('forum/Discussion.php');


Propel::init("./build/conf/forum-conf.php");

print "Utilisateurs par defaut\n";
$user=new Utilisateur();
$user->setNom("toto");
$user->setMp("titi");
$user->save();

$guest=new Utilisateur();
$guest->setNom("guest");
$guest->setMp("guest");
$guest->save();



print "Forums par defaut\n";
$forums=array(array("Acceuil","Ici on acceuil"),array("Auberge","Ici on mange"),array("Amelioration","Ici on améliore"));
foreach($forums as $forum) {
        $for=new Forum();
        $for->setTitre($forum[0]);
        $for->setResume($forum[1]);
        $for->save();
}

/* On va creer un message d'acceuil dans le forum "Acceuil" */
$for=ForumPeer::retrieveByPK(1);

/* Creation d'une discussion */
print "Creation d'une discussion\n";
$discussion=new Discussion();
$discussion->setUtilisateur($user);
$discussion->setForum($for);
$discussion->setSujet("Bienvenu sur ForumPHP");
$discussion->setMessage("Ce forum a ete realiser grace a Agavi/Propel");
$discussion->setDate(Date('c'));
$discussion->save();


/* Creation d'un message */
print "Creation d'un message\n";
$message=new Message();
$message->setUtilisateur($guest);
$message->setDiscussion($discussion);
$message->setMessage("Ouais c'est tip top");
$message->setDate(Date('c'));
$message->save();



print "Fin\n";
?>

Il a juste été un peu adapté pour le forcer à utiliser la version 1.2.1 de propel.

Execution :
fabrice@golgoth13-ubu:~/dev/tofree/ForumPHP-V1.16.01/propel$ php createdefault.php
Utilisateurs par defaut
Forums par defaut
Creation d'une discussion
Creation d'un message
Fin

Fichier de configuration d'agavi

La version 1.2 de propel, ne sait pas faire l'autoloading dess fichiers includes. Il faut donc prévenir Agavi de où et comment charger ceux-ci. Il faut éditer le fichier autoload.xml, situé dans le repertoire config de notre application agavi :

<?xml version="1.0" encoding="UTF-8"?>
<configurations xmlns="http://agavi.org/agavi/1.0/config" parent="%core.system_config_dir%/autoload.xml">
    <configuration>

        <autoload name="ProjectBaseAction">%core.lib_dir%/action/ProjectBaseAction.class.php</autoload>
        <autoload name="ProjectBaseModel">%core.lib_dir%/model/ProjectBaseModel.class.php</autoload>
        <autoload name="ProjectBaseView">%core.lib_dir%/view/ProjectBaseView.class.php</autoload>
        <autoload name="UtilisateurPeer">forum/UtilisateurPeer.php</autoload>
        <autoload name="Utilisateur">forum/Utilisateur.php</autoload>
        <autoload name="DiscussionPeer">forum/DiscussionPeer.php</autoload>
        <autoload name="Discussion">forum/Discussion.php</autoload>
        <autoload name="MessagePeer">forum/MessagePeer.php</autoload>
        <autoload name="Message">forum/Message.php</autoload>
        <autoload name="ForumPeer">forum/ForumPeer.php</autoload>
        <autoload name="Forum">forum/Forum.php</autoload>
        <autoload name="Criteria">propel/util/Criteria.php</autoload>
    </configuration>
</configurations>

Penser à l'uploader sur le serveur dans la configuration Agavi

Upload sur le serveur

Il suffit maintenant d'uploader sur le serveur la base et les fichiers generer pour que tout fonctionne.

  • db/forum.db ⇒ db/
  • builds/classes/forum ⇒ include/

Conclusion

Voila vous avez maintenant une application Agavi/Propel sur un serveur mutualisé Free.

J'ai fait le choix d'utiliser sqlite, mais rien ne vous empêche d'utiliser postgres ou mysql, il suffit de modifier le fichier de configuration de propel. Noter que si nous n'avions pas utiliser Propel, il aurait fallut récrire totalement l'application (du moins celle communiquant avec la base). De la même manière le changement de version de propel (qui pourtant était un downgrade) c'est fait sans soucis (faut dire que l'application est simple).

L'application d'exemple tourne ici : http://coredmp95.free.fr

 
/opt/dokuwiki/data/pages/doc/installmutu.txt · Dernière modification: 2008/11/21 15:59 (modification externe)
 
RSS - 2007 © CoreDmp