Installation de MongoDB 1.4.4

sur Fedora 13 X86_64

 

Sommaire

 

1. Avant propos

2. Hardware

3. les packages requis

4. MongoDB

5. driver php mongo

6. Jeu de donnée

7. Script PHP

8. Changement de configuration de MongoDB

 

 

 

1. Avant propos

 

Ce tutorial, n’ai autre qu’une synthèse d’autres tutoriaux trouvé sur Internet, lors  de mon installation de MongoDB sur Fedora13  avec le driver PHP pour Apache.

Premier pas de cette recherche :
Sam Kleinman

http://library.linode.com/databases/mongodb/fedora-13

Deuxième pas :
Patrick MARIE

http://blog.monkeyz.eu/2010/06/04/mongodb-installation-et-premiers-pas/

Troisième pas :
Patrick MARIE

http://blog.monkeyz.eu/2010/06/08/installer-lextension-php-de-mongodb-et-son-utilisation/

Quatrième pas :
Michael's Blog

http://www.michaeltozzo.com/blog/2010/02/19/mongodb-php-problem/

Merci a tous pour la réalisation de ce tutorial.

2. Hardware

Pour cette installation de MongoDB sur Fedora13 , j’ai utilisais l’outils communautaire de vmware.com

vmware-player_vmware_player_3.0.1_build_227600_anglais_15594.exe

Téléchargeable a l’adresse suivante : http://downloads.vmware.com/

 

Si vous n'êtes pas enregistré, enregistrez vous.

Sur un PC ayant

1 Opteron 1224
4 Go de RAM
600 Go de HD
OS : Windows 7 pro x86_64

La Feddora 13 X86_64 elle est configurée comme ceci
un disque virtuel de 20 Go (segmentés en 2Go)
1024 Mo de RAM
Un Ethernet virtuel bridgé . La Fedora 13 a une adresse TCP/IP fixe et relayé a Internet , quel que soit la topologie de votre réseaux .

Bien évidemment il existe d’autre solution de virtualisation tel que : qemu , virtualbox etc …

La Fedora 13 est installé avec 1 partition swap de 4Go est le reste en fichier système. La taille de la partition swap indiqué, n’ai pas obligatoire. Vous pouvez garder la taille de partition par défaut lors de l’installation de Fedora13.
Bien que virtualisé , votre Fedora 13 , doit avoir accès a Internet .
A vous de configurer votre réseau et vos firewall pour que votre système soit opérationnel sur ce point.   

 

3. les packages requis

 

Apache

httpd-2.2.15-1.fc13.x86_64
httpd-tools-2.2.15-1.fc13.x86_64
httpd-manual-2.2.15-1.fc13.noarch

Git

git-1.7.0.1-1.fc13.x86_64

PHP

php-5.3.2-2.fc13.x86_64
php-ldap-5.3.2-2.fc13.x86_64
php-common-5.3.2-2.fc13.x86_64
php-cli-5.3.2-2.fc13.x86_64
php-devel-5.3.2-2.fc13.x86_64

 

 

4. MongoDB

 

MongoDB est téléchargeable à l’adresse suivante :

http://www.mongodb.org/downloads

Comme vous pouvez le constater, MongoDB est portables sur plusieurs systèmes d’exploitations. La version utilisé dans ce tutorial :
mongodb-linux-x86_64-1.4.4.tgz

Après avoir téléchargé MongoDB dans un répertoire  lancez la commande d’extraction :

tar -zxvf mongodb-linux-x86_64-1.4.4.tgz

Vous obtenez le répertoire suivant :

drwxr-xr-x.  5 infausys infausys     4096 30 juin  00:10 mongodb-linux-x86_64-1.4.4

déplacez ce répertoire vers la racine du système d’exploitation ainsi :

mv mongodb-linux-x86_64-1.4.4 /mongodb

Assurez vous après avoir déplacé le répertoire a la racine de votre système, que les droits appartiennent a l’utilisateur root

drwxr-xr-x.   7 root root  4096  1 Aout  12:55 mongodb

Sinon , en vous plaçant a la racine du système , utilisez la commande suivante :

chown -R root.root  mongodb

Maintenant, il est obligatoire de créer un  répertoire data/db pour stoker les base de données :

mkdir /mongodb/data/db

Pour une bonne utilisation de MongoDB, il est préférable de créer un répertoire pour la configuration de MongoDB :

mkdir /mongodb/config

Avec un éditeur de texte, créez le fichier de configuration  mongodb dans le répertoire : /mongodb/config . Dans ce fichier, indiquez les informations suivantes :

# Configuration Options for MongoDB
# For More Information, Consider:
# - Configuration Parameters:
#  http://www.mongodb.org/display/DOCS/Command+Line+Parameters
#  - File Based Configuration:
#   http://www.mongodb.org/display/DOCS/File+Based+Configuration
dbpath = /mongodb/data/db/
logpath = /mongodb/data/db/mongodb.log
logappend = true
bind_ip = 127.0.0.1
port = 27017
fork = true
noauth = true

Comme vous pouvez le constater, le bind_ip indique un adressage TCP/IP avec un port = 27017

Le fait d’utiliser un fichier de configuration, permet d’étendre les capacités de configuration de votre serveur MongoDB . Celui-ci a de grandes capacités de configurations , tel que le cluster de serveur, vous pouvez consulter ces options avec la commande :

mongod –help

a partir du répertoire : /mongodb/bin

Téléchargez le fichier des options de MongoDB, si vous désirez activer des options particulière dans votre fichier de configuration.

Pour ce tutorial , considéré comme installation en mode développement , l’adressage TCP/IP 127.0.0.1 , est celui qui seras utilisé , avec le port MongoDB port défaut .

Dans le répertoire : /mongodb/bin , créez , avec un éditeur de texte , le fichier mongodb-stop , dans lequel , vous introduisez le code suivant :

#!/bin/bash

pid=`ps -o pid,command ax | grep mongod | awk '!/awk/ && !/grep/ {print $1}'`;
if [ "${pid}" != "" ]; then
    kill -2 ${pid};
fi

Rendez exécutable le fichier mongodb-stop  , en lancant la commande suivante :

chmod + x mongodb-stop

Dans le même répertoire  ( /mongodb/bin) , toujours avec un éditeur de texte ,  créez le fichier mongodb-start . Introduisez le code suivant :

#!/bin/sh

/mongodb/bin/mongod --config /mongodb/config/mongodb \

Rendez exécutable le fichier mongodb-start , en lancant la commande suivante :

chmod + x mongodb-start

 

Dans le répertoire : /etc/rc.d/init.d , avec un éditeur de texte créez le fichier : /etc/rc.d/init.d/mongodb
Et introduisez le code suivant :

#! /bin/sh
#
# mongodb this script starts and stops the mongodb daemon
#
# chkconfig: - 85 15
# description: MongoDB is a non-relational database storage system.
# processname: mongodb

PATH=/mongodb/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME=mongodb

test -x $DAEMON || exit 0

set -e

case "$1" in
  start)
        echo -n "Starting MongoDB... "
        /mongodb/bin/mongodb-start
        ;;
  stop)
        echo -n "Stopping MongoDB"
        /mongodb/bin/mongodb-stop
        ;;
      *)
            N=/etc/init.d/$NAME
            echo "Usage: $N {start|stop}" >&2
            exit 1
            ;;
    esac

    exit 0

 

Pour rendre exécutable le fichier, lancez la commande suivante :

chmod +x mongodb

vous devez obtenir  les droits suivant :

-rwxr-xr-x. 1 root root 737 1 aout 12:28 mongo

Pour obtenir un service automatique mongodb, lancez la commande suivante :

chkconfig --add mongodb

Pour activez le service en lancez la commande suivante :

chkconfig --level 35 mongodb on

Maintenant , vous pouvez lancer le service mongodb avec la commande suivante ;

service mongodb start

Ajoutez dans le .bash_profile de l’utilisateur root (ou de celui que vous devez utiliser ) le chemin des exécutables  MongoDB , comme ceci :

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
       . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin:/mongodb/bin

export PATH

 

 

5. driver php mongo

 

Allez dans le repertoire:/usr/src , puis lancez la commande suivante :

git clone http://github.com/mongodb/mongo-php-driver.git

A la fin du téléchargement, vous devriez obtenir le répertoire : mongo-php-driver

Positionnez vous dans le répertoire

cd mongo-php-driver

Lancez la commande :

phpize

ensuite :

./configure --enable-mongo

pour finir :

make && install

Dans le répertoire : /etc/php.d , avec un éditeur de texte , créez le fichier mongo.ini , et indreduisez lz code suivant :

extension=mongo.so

lancez la commande

php -i |grep -i mongo

voici une partie de la sortie de la commande .

mongo
MongoDB Support => enabled
mongo.allow_persistent => 1 => 1
mongo.auto_reconnect => 1 => 1
mongo.chunk_size => 262144 => 262144
mongo.cmd => $ => $
mongo.default_host => localhost => localhost
mongo.default_port => 27017 => 27017
mongo.utf8 => 1 => 1

comme l’indique php le driver MongoDB est installé

MongoDB Support => enabled

Lancez la commande suivante :

which setsebool

Si le Shell ne vous renvois pas le chemin suivant :

/usr/sbin/setsebool

Installez la commande setsebool avec YUM ou autre. Puis lancez la commande :

setsebool -P httpd_can_network_connect 1

Cette commande peut être longue  a finir , mais attendez le retour de votre Shell avant toutes actions .

 

6. Jeux de donnée

 

Si dans votre Shell actuel vous avez la commande : mongo . Lancez la !!!.

Sinon , lancez la commande suivante :

/mongodb/bin/mongo

Si le serveur MongoDB est démarré , vous obtenez la réponse suivante :

MongoDB shell version: 1.4.4
url: test
connecting to: test
type "help" for help

Pour connaître les bases existantes dans le serveur MongoDB, lancez la commande suivante :

show dbs

Pour créer une nouvelle base, utilisez la syntaxe suivante :

use [nom de la base de données]

Dans la ligne de commande qui suit, la base de donnée infausys , vas être créé .

use infausys

Créez une table nommée :  person , ayant les colonnes : name et age .Entrez directement les valeurs dans votre table ainsi :

person = { 'name': 'xin', 'age': 24 }

Le shell MongoDB vous renvoie la confirmation de votre création ainsi :

{ "name" : "xin", "age" : 24 }
>

Sauvegardez votre enregistrement ainsi :

db.infausys.save(person)

Vérifiez que votre table a étais créée. Mais, a partir de maintenant, il vous faut avoir une philosophie  NoSQL . Plus qu’une simple base de donnée avec une table et deux colonnes, vous venez de créer une collection. Lancez la commande suivante :

show collections

Le shell MongoDB vous renvoie la confirmation de votre création ainsi :

infausys
system.indexes
>

 

Maintenant , pour vérifier la sauvegarde de vos enregistrements , il vous faut utiliser la syntaxe suivante :

db.[nom de la collection].find()

Pour la collection infausys , lancez la commande suivante :

db.infausys.find()

Le shell MongoDB vous renvoie la confirmation de votre création ainsi :

{ "_id" : ObjectId("4c7fe29fdd7dfa3d6204af24"), "name" : "xin", "age" : 24 }
>

Sortez de MongoDB en lançant la commande suivante :

exit

Vous pouvez redémarré votre serveur Fedora 13 , ou , tous simplement redémarré le service mongodb , vous devez obtenir les résultats suivants :

  1. lancement de la commande : mongo
  2. lister les bases de  données dans le shell MongoDB avec la commande suivante : show dbs
  3. Entrez dans la base que vous avez créé avec la commande suivante : use [nom de la collection] Ex : use infausys  
  4. recherchez les informations avec la commande suivante : db.[nom de la collection].find() . Ex : db.infausys.find()

Vous pouvez ajouter de nouveau  enregistrements dans le Shell de MongoDB ainsi :

person = { 'name': 'patrick', 'age': 28 }

Enregistrez ces nouvelles données ainsi :

db.infausys.save(person)

Maintenant, visualisez les données avec la commande suivante :

db.infausys.find()

Le Shell MongoDB vous renvoie la confirmation de votre création ainsi :

{ "_id" : ObjectId("4c7fe29fdd7dfa3d6204af24"), "name" : "xin", "age" : 24 }
{ "_id" : ObjectId("4c7ff194f77c0ac3a8fc2e59"), "name" : "patrick", "age" : 28 }
>

 

 

7. Script PHP

 

Vous trouverez l’essentielle du manuel mongodb avec PHP à l’adresse suivante :

http://fr.php.net/manual/en/mongo.manual.php

Pour mettre en application en PHP le jeu de donnée créée avec la base infausys et la collection infausys , vous avec démarré le serveur apache . L'emplacement de vos sripts PHP dans votre configuration Apache , vous ai connue .
Commencez votre scripte PHP ainsi :

<?php
try {
$conn = new Mongo();

Comme l’indique le manuel PHP http://fr.php.net/manual/en/mongo.connecting.php

new Mongo();

représente une connexion par défaut . Cette connexion est relative a ce que contient le paramètre : bind_ip dans le fichier de configuration mongodb situé dans le répertoire : /mongodb/config . Si le paramètre bind_ip change de valeur tel que celle-ci : bind_ip  = 192.168.0.102, il vous frauderas changer la chaîne de connexion ainsi :

$conn = new Mongo('192.168.0.102:27017');

Dans la suite du scripte PHP , vous allez utiliser la connexion a la base de données infausys ainsi :

$db = $conn->infausys;

Accédez a la collection infausys ainsi :

$collection = $db->infausys;

Maintenant , collectez toutes les données de la collection dans un tableau PHP .

$cursor = $collection->find();

Pour afficher dans une page PHP  les données de la collection par leurs noms de tables , utilisez le code suivant :

 

foreach ($cursor as $obj)
{
echo 'Name: ' . $obj['name'] .' '.'Age : ' .$obj['age'].'<br/>';
echo '<br/>';
}

Fermez la connexion a la base de donnée ainsi :

$conn->close();

Fermez votre scripte , avec la gestion des erreurs ainsi :

}catch (MongoException $e) {
die('Error: ' . $e->getMessage());
}
?>

Maintenant, votre script PHP ressemble a ceci :

<?php
try {
$conn = new Mongo();
$db = $conn->infausys;
$collection = $db->infausys;
$cursor = $collection->find();
foreach ($cursor as $obj)
{
echo 'Name: ' . $obj['name'] .' '.'Age : ' .$obj['age'].'<br/>';
echo '<br/>';
}
$conn->close();
}catch (MongoException $e) {
die('Error: ' . $e->getMessage());
}
?>

Testez le script dans votre navigateur . Vous pouvez telecharger ce script PHP ici .

 

8. Changement de configuration de MongoDB

 

Vous avez testé le fonctionnement de votre script PHP .
Testez le changement de configuration de MongoDB , en prenant l'adresse TCP/IP fixe de votre Fedora 13.
Dans mon cas l'adresse TCP/IP est :

bind_ip  = 192.168.0.102

Redémarrez le service mogodb ou Redémarrez votre Fedora 13 . Lancez la connexion a votre serveur MongoDB ainsi :

mongo 192.168.0.102:27017

En suivant les étapes précédentes , concernant le Shell MongoDB  , vous pouvez constater que vous retrouvez votre base de donnée ainsi que votre collection , comme dans cette exemple vous le montre (script Shell MongoDB).N’oubliez pas que le caractère > , indique  l’invite de commande MongoDB .