La machine de tests:

sarge:/usr/local# uname -a
Linux sarge 2.6.27.23-vs2.3.0.36.4.diff #1 SMP Sat May 9 15:28:27 CEST 2009 i686 GNU/Linux

sarge:/usr/local# cat /etc/issue.net
Debian GNU/Linux 5.0


Le php est installé en cli / cgi et compilé maison (comme je n'avais pas redémarré cette machine depuis un bail, elle n'est plus tout jeune...)

sarge:/usr/local# php -v
PHP 5.2.10RC2 (cli) (built: Jun 15 2009 13:50:58)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
    with Suhosin v0.9.27, Copyright (c) 2007, by SektionEins GmbH



C'est parti pour l'install:

sarge:/usr/local# wget http://downloads.mongodb.org/linux/mongodb-linux-i686-1.4.0.tgz

sarge:/usr/local# tar zxvf mongodb-linux-i686-1.4.0.tgz

sarge:/usr/local# cd mongodb-linux-i686-1.4.0

sarge:/usr/local/mongodb-linux-i686-1.4.0# less README

Ca n'est pas précisé dans le README mais les répertoires suivants sont nécessaires (au moins pour un test à l'arrache sans fichier de configuration particulier)

sarge:/usr/local/mongodb-linux-i686-1.4.0# mkdir -p /data/db

sarge:/usr/local/mongodb-linux-i686-1.4.0# bin/mongod &


sarge:/usr/local/mongodb-linux-i686-1.4.0# netstat -tpan

Connexions Internet actives (serveurs et établies)
Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat        PID/Program name
tcp        0      0 0.0.0.0:27017           0.0.0.0:*               LISTEN      22118/mongod   
tcp        0      0 192.168.0.59:3306       0.0.0.0:*               LISTEN      20837/mysqld   
tcp        0      0 0.0.0.0:110             0.0.0.0:*               LISTEN      1463/tcpserver 
tcp        0      0 127.0.0.1:783           0.0.0.0:*               LISTEN      18140/spamd.pid
tcp        0      0 192.168.0.59:143        0.0.0.0:*               LISTEN      1489/imapproxyd
tcp        0      0 192.168.0.59:8143       0.0.0.0:*               LISTEN      1407/couriertcpd
tcp        0      0 192.168.0.59:80         0.0.0.0:*               LISTEN      3806/httpd     
tcp        0      0 0.0.0.0:28017           0.0.0.0:*               LISTEN      22118/mongod   
tcp        0      0 0.0.0.0:4949            0.0.0.0:*               LISTEN      17326/munin-node
tcp        0      0 192.168.0.59:21         0.0.0.0:*               LISTEN      1443/pure-ftpd (SER
tcp        0      0 192.168.0.59:22         0.0.0.0:*               LISTEN      1159/sshd      
tcp        0      0 192.168.0.59:25         0.0.0.0:*               LISTEN      1454/tcpserver 
tcp        0      0 192.168.0.59:22         192.168.0.22:41396      ESTABLISHED 18429/0        
tcp6       0      0 :::443                  :::*                    LISTEN      3806/httpd     


sarge:/usr/local/mongodb-linux-i686-1.4.0# pecl install mongo

Là ça coince un peu. Pas de problème, on va arranger ça:

sarge:/usr/local/mongodb-linux-i686-1.4.0# cd /tmp/pear/download/mongo-1.0.6

sarge:/tmp/pear/download/mongo-1.0.6# phpize
sarge:/tmp/pear/download/mongo-1.0.6# ./configure
sarge:/tmp/pear/download/mongo-1.0.6# make
sarge:/tmp/pear/download/mongo-1.0.6# make install

J'ajoute la ligne :

extension=mongo.so dans le php.ini et je vérifie par un phpinfo.

A priori c'est tout bon.

Une interface web permet de visualiser l'état du serveur sur le port 27017.


Je crée ensuite un petit script pour insérer quelques données:

<?
$connection = new Mongo();
$db = $connection->mydb;
$doc = array( "name" => "MongoDB",
   "type" => "database",
   "count" => 1,
   "info" => (object)array( "x" => 203,
       "y" => 102),
   "versions" => array("0.9.7", "0.9.8", "0.9.9")
);
$collection = $connection->mydb->myco;
$collection->insert( $doc );
?>

Et je l'exécute depuis mon navigateur.

Les logs sur la console de la machine permettent déjà de savoir que cela se passe bien:


Sun Mar 28 15:34:14 connection accepted from 127.0.0.1:39302 #1
Sun Mar 28 15:34:14 allocating new datafile /data/db/mydb.ns, filling with zeroes...
Sun Mar 28 15:34:14 done allocating datafile /data/db/mydb.ns, size: 16MB, took 0.08 secs
Sun Mar 28 15:34:14 allocating new datafile /data/db/mydb.0, filling with zeroes...
Sun Mar 28 15:34:16 done allocating datafile /data/db/mydb.0, size: 64MB, took 1.568 secs
Sun Mar 28 15:34:16 building new index on { _id: 1 } for mydb.myco
Sun Mar 28 15:34:16 Buildindex mydb.myco idxNo:0 { name: "_id_", ns: "mydb.myco", key: { _id: 1 } }
Sun Mar 28 15:34:16 done for 0 records 0.001secs
Sun Mar 28 15:34:16 insert mydb.myco 1701ms
Sun Mar 28 15:34:16 end connection 127.0.0.1:39302


Je vérifie tout de même avec un autre petit bout de code:

<?
$connection = new Mongo();
$db = $connection->mydb;
$collection = $connection->mydb->myco;
$obj = $collection->findOne();
var_dump( $obj );
?>

Résultat dans le navigateur:
array(6) { ["_id"]=> object(MongoId)#9 (0) { } ["name"]=> string(7) "MongoDB" ["type"]=> string(8) "database" ["count"]=> int(1) ["info"]=> array(2) { ["x"]=> int(203) ["y"]=> int(102) } ["versions"]=> array(3) { [0]=> string(5) "0.9.7" [1]=> string(5) "0.9.8" [2]=> string(5) "0.9.9" } }

C'est bon.

Dernière étape: il existe un outil genre phpmyadmin : phpmoadmin disponible sur: http://www.phpmoadmin.com/

Allons-y:

sarge:/web/clients/client1/www# wget http://www.phpmoadmin.com/file/phpmoadmin.zip

sarge:/web/clients/client1/www# unzip phpmoadmin.zip && chown client1:webusers moadmin.php (mise à jour des droits oblige php s'exécutant en cgi via suphp)

Je teste dans le navigateur: evidemment c'est rustique mais gageons que ce projet a de l'avenir.


Liens:

http://code.google.com/p/phpdaemon/source/browse/trunk/app-servers/MongoNode.php

http://www.php.net/manual/en/mongo.tutorial.php

http://www.mongodb.org/display/DOCS/Downloads

http://www.mongodb.org/display/DOCSFR/Home

http://www.mongodb.org/display/DOCS/PHP+Language+Center

http://linuxfr.org/2010/03/26/26647.html