lindev : administration linux , développement php

Aller au contenu | Aller au menu | Aller à la recherche

Tag - haute disponibilite

Fil des billets - Fil des commentaires

02 avr. 2010

Nginx Premiers pas

nginx-logo.png''Alors voilà , je vais essayer de présenter au mieux nginx , ou tout du moins , expliquer sont installation et utilisation .
On trouve de plus en plus de documentations sur le net , et je vais donc ici essayer de regrouper les choses , pour au final avoir un serveur HTTP digne de se nom , qui pourra sans problème remplacer son homologue Apache .
Je conseillerai même Nginx sur des machine de faible capacités en mémoire et/ou processeur .''

Présentation

Bon là je ne vais pas m'éterniser , le site NginxFr vous l'expliquera certainement mieux que moi .
En gros , c'est un serveur web ( entre autre ! ) open sources , d'origine Russe , développez pour répondre à une forte charge , grâce à une gestion des requêtes asynchrone , via des process innovants .
Ses points forts sont donc , une stabilité accrue , une faible consommation de mémoire , une simplicité de configuration , qui le rend ( je trouve ) agréable à administrer .

Notez qu'il vous est possible de tester ce serveur sans casser l'existant .. il vous suffira de le faire tourner sur un autre port , exemple , le 82 !
Aller , n'hésitez plus lancez vous dans l'aventure ...

L'installation

Comme à mon habitude , je n'utiliserai pas la version des paquet de ma distribution .
Il est pour moi important de savoir ce que j'ai sous le capot , et d'en maitriser ( ou au moins essayer ) toutes les facettes .

Récupération des sources et décompactage

cd /usr/local/src
wget http://sysoev.ru/nginx/nginx-0.7.65.tar.gz
tar xzf nginx-0.7.65.tar.gz
cd nginx-0.7.65

Nous voilà prêt à lancer la compilation de la bête ...
Commençons par éditer un fichier de configuration à la compilation , ( façon débian like comme le précise le site ) , j'ai juste ajouté l'option --with-http_stub_status_module qui permet d'avoir l'équivalent du server-status d'apache .
Pour les autres options , je vous laisse voir la description de chacun d'eux qui sont tres bien documenté à cette adresse

Fichier my_configure

vim my_configure

Et voici le contenu :

#!/bin/sh

./configure \
  --conf-path=/etc/nginx/nginx.conf \
  --error-log-path=/var/log/nginx/error.log \
  --pid-path=/var/run/nginx.pid \
  --lock-path=/var/lock/nginx.lock \
  --http-log-path=/var/log/nginx/access.log \
  --http-client-body-temp-path=/var/lib/nginx/body \
  --with-http_ssl_module \
  --http-proxy-temp-path=/var/lib/nginx/proxy \
  --with-http_stub_status_module \
  --http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
  --with-debug \
  --with-http_flv_module \
  --with-http_stub_status_module

Rendons le exécutable et go ! :

chmod 777 my_configure
./my_configure
make
make install
mkdir -p /var/lib/nginx/body

warning.png Il vous faudra certainement installer des librairies manquantes ... les messages d'erreurs vous indiquerons lesquels .

Configuration

Nous allons maintenant nous attaquer à la configuration de la bête ... pour commencer .. ou ce trouve quoi !

Emplacements des éléments

Petit tour d'horizon , comme spécifié à la configuration , les principaux fichiers de conf se trouvent dans :

/etc/nginx/

Les fichiers de logs :

/var/log/nginx/

L'exécutable :

/usr/local/nginx/sbin/

Rotation des logs

Si vous ne voulez pas que vos fichiers de logs remplissent le disque en quelques mois , alors , il est préférable de faire une rotation journalière .
Nous allons dédier cette tâche à logrotate .

cd /etc/logrotate.d/
vim nginx

Et voici le contenu :

/var/log/nginx/*.log {
        daily
	missingok
	rotate 5
	compress
	delaycompress
	notifempty
	create 640 root adm
	sharedscripts
	postrotate
    	if [ -f /var/run/nginx.pid ]; then
    		/usr/local/nginx/sbin/nginx -s reload > /dev/null
    	fi
   	endscript

}

download.pngOu si vous préférez en format à dl : nginx_logrotatenginx

Configuration principale

Le fichier de configuration principale se trouve donc là : /etc/nginx/nginx.conf
Nous allons sauvegarder la version originale , et démarrer de 0 , enfin presque ..

cd /etc/nginx/
mv nginx.conf nginx.conf.old
vim nginx.conf

warning.png Si vous souhaitez faire tourner votre serveur nginx sur un autre port , n'oubliez pas de le modifier ( directive listen ) . De même que l'utilisateur que j'utilise www-data n'est pas forcément le même pour vous .. adaptez à votre conf.

download.pngJe vous met le fichier de conf à dispo , ici : nginx.confnginx.conf

Pour ce qui est des explications sur chaque option , les utilisateurs d'apache trouverons tres vite leurs marques , de plus la documentation est compléte ici.

les Vhosts

Vous l'avez certainement remarqué , dans nginx.conf , il y a la ligne

include /etc/nginx/site-enabled/*;

Qui permet de gérer les vhosts de façons structuré , tous les fichiers de conf présents dans ce répertoire seront analysé par nginx à sont lancement .

Préparons le terrain avant de creer notre premier vhost .

mkdir site-available
mkdir site-enabled

Voici maintenant la création d'un vhost type , le plus simple du monde .

cd /etc/nginx/site-available
vim monsite.com

Et voilà le contenu type :

server {
        listen       80;
        
        server_name  monsite.com  www.onsite.com;

        location / {
            root   html;
            index  index.html index.htm;
        }
    }

Vous pouvez donc spécifier un ou plusieurs ports par vhost , ensuite définir des options propre à chaque location .
Nous verrons par la suite comment par exemple ajouter des régles de cache pour les données statics , ou rediriger en fonction de l'ip ect ... mais ne brulons pas les étapes .
Activons notre vhost !

ln -s /etc/nginx/site-available/monsite.com /etc/nginx/site-enabled/

Start Nginx

Pour la première fois nous allons donc lancer nginx afin de tester la conf de base , pour celà il faut vous rendre dans le répertoire contenant l'exécutable .

info.pngl'executable nginx s'utilise de cette façon :

nginx -s [ stop | quit | reopen | reload ] 

Pour démarrer :

cd /usr/local/nginx/sbin/

Et go

./nginx


Il ne doit y avoir aucun message au lancement , vous pouvez vérifier au niveau des logs si tout se passe bien ,

tail -f /var/log/nginx/error.log

Si tout est ok , alors vous voilà prêt à servir des page statiques .. testez avec votre navigateur !

http://localhost:80

Démarrage automatique

Vous avec votre serveur dans sa configuration de base prêt à l'emploi , mais au prochain redémarrage , celui-ci ne sera pas automatiquement lancé , nous allons donc créer de quoi automatiser tout ça ( debian like ).

Rendez-vous dans /etc/init.d/ et éditer le fichier nginx

cd /etc/nginx
vim nginx

Je vous met donc à disposition le script de démarrage ici : nginxnginx

warning.pngLe fichier que je vous donne est adapté à la configuration donné dans ce tuto , si vous avez modifié des choses à la compilation , n'oubliez pas d'adapter ce script au besoin .

Nous allons maintenant le rendre exécutable , puis le déclarer dans les RC

chmod 777 nginx
update-rc.d nginx defaults

Fin de la première partie ..

Et oui , bilan , vous avez un serveur web http , qui peut dés à présent servir du contenu statique , vous savez créer des hôtes virtuels , et votre serveur démarre automatiquement à démarrage de votre machine .
Ouf ... et bien il nous reste plus qu'à prendre en charge les scripts php , et - ou perl , qui sera le sujet de la deuxième partie .. ( rédaction en cours )

01 fév. 2010

couchDB par la pratique

C'est quoi couchDB

couchDB.png

CouchDB est un serveur de base de données orienté Document et accessible via une API REST HTTP/JSON.
Sans schéma, sans tables, ce qui offre une flexibilité sans limite de vos documents.

Comment , simplement car couchDB est une base qui n'est pas relationnel , il n'y a donc pas de structure qui fige les documents .

Comment l'utiliser

CouchDB utilise le protocole HTTP , avec des entêtes en GET , PUT , POST , DELETE , COPY.

Avec une possibilité d'activer l'authentification HTTP pour restreindre les accès selon vos souhaits
Pour vous simplifier la vie , j'ai développé une librairie qui réuni les méthodes indispensables pour utiliser une base couchDB , cette librairie vous permettra les action suivantes :

 * Création / suppression de bases
 * insertions de documents
 * suppressions .. 
 * copie
 * déplacements
 * réplication 
 * lecture
 * etc ..


Pour la documentation complète , voir le wiki .

oscar_couchDB

Nous allons quand même ici expliquer l'utilisation basic d'une base couchDB avec cette librairie

initialisation

Comme le précise la doc , il nous suffit d'inclure simplement la lib :

require_once 'Oscar_couchDB.php';

Nous allons ensuite récupérer une instance de la classe :

$Ocdb   =   Oscar_couchDB::getInstance();

Commençons par configurer l'accès au serveur principal , qui a comme adresse ip 10.0.0.220:

$Ocdb->set_host('10.0.0.220');
$Ocdb->set_port(5999);

Nous voilà fin prêt à attaquer ....

Commençons par créer notre table

if( ! $Ocdb->add("mabase") ){
   echo "Échec à la création de la base de données";
}

Une fois notre base crée , nous allons pouvoir la remplir avec des documents , pour créer un document , il faut de nouveau faire appel à la méthode add().

$doc = array("NOM"=>"Document A","TYPE"=>"texte");
 
$retour = $Ocdb->add("mabase","0001",$doc);
if(  $retour == false ){
    echo "Erreur à la création du document , erreur : $retour";
}else{
    echo "Document crée avec succès , <br>ID: ".$retour['id']."<br>REVISION: ".$retour['rev'].";
}

Comme vous l'aurez remarqué un document possède à sa création une révision , cela permet par exemple lors d'une modification non volontaire , de revenir en arrière .
Cependant , cela reste limité en temps , car si l'on compacte la base , seule la dernière révision est disponible .

Pour connaitre les révisions d'un document , vous pouvez faire appel à cette méthode :

$Ocdb->all_revs("mabase", "0001");

0001 étant l'id du document qui se doit d'être unique .

Et pour compacter la base pour un gain de place :

$Ocdb->compact_database('mabase');

Maintenant , comment récupérer notre enregistrement ?
Nous allons simplement utiliser la méthode get()

$mondocument = $Ocdb->get("mabase","0001");

Vous voilà avec un tableau $mondocument qui contient toutes les données que vous y avez entrées ainsi que son id et sa révision .

Pour lire une révision spécifique , il est possible de préciser celle-ci comme-ceci :

$mondocument = $Ocdb->get("mabase","0001",$revision);

Dans l'ordre des choses , nous allons supprimer ce document , voici la méthode :

$database = 'mabase';
$iddocument = '0001';
$revdoc = '1-872c3e4693b3e608148fb85b3f64df74';

$Ocdb->delete($database, $iddocument, $revdoc);

Ici la révision du document est obligatoire .



Voilà pour ces quelques exemples , il y a encore de nombreuses autres méthodes aussi simples les unes que les autres à utiliser , je vous laisse les découvrir via la documentation ici

replication

Il y a un point important , car c'est un avantage non négligeable de couchDB , la replication , qui est d'une simplicité étonnante .

Dans la librairie , il y a donc une méthode qui vous permet de répliquer vos données , de façon manuelle , mais aussi automatique , voici sa mise en place .

Commençons par paramétrer les coordonées des serveur A et B

$Ocdb->set_replication('10.0.0.220','10.0.0.221','5984','mabase','mabase_Repli');

Nous avons donc ici spécifié l'adresse du serveur source , suivi de celle du serveur cible , le port du serveur cible , la base de données source , et pour finir la base de données cible , qui n'est pas obligatoirement du même nom.

De plus si les base source/cible n'héxiste(s) pas , la librairie tentera de la/les créer .
Le réplication paramétrée , activons l'automatisme pour être certains que chaque action faite sur le serveur source soit immédiatement faite sur le serveur cible.

$Ocdb->auto_replique(TRUE);

Et voilà , plutôt simple non ?

Si le serveur cible n'est pas disponible , ce n'est pas grave , la réplication se faisant sur les logs binaire , il rattrapera automatiquement son retard lorsqu'il sera de nouveau disponible .
De plus , si le serveur source , tombe , vous pouvez attaquer directement sa réplication , en changeant les paramètres via set_replication , et lorsque le serveur sera de nouveau disponible , il se mettra automatiquement à jour , toujours grâce au logs binaires .

utile

Nous avons vue ici l'utilisation de quelques méthodes de la librairie Oscar_couchDB , mais il faut savoir que vous pouvez creer des vues en javascript qui vous permettent de faire des requêtes , filtres ect sur les documents en base , je vous donne un lien complet pour apprivoiser celà .
unixGarden

La librairie est disponible à plusieurs endroits :

 *  phpClasses
 *  dans les libs de mon fw fw-oscar.fr

- page 1 de 3