Sunteți pe pagina 1din 39

Yohan Azoulay

Licence MI2E
Université Paris Dauphine

Rapport de Stage a l’UNEP (United Nations Environment


Programme)

Etude d’une migration d’un site web Asp / Sql Server


vers Php / Mysql

Année 2006

1
Résumé

Ce rapport a été réalisé dans le cadre de mon stage de fin d’études de licence MI2E à
l’université Paris-Dauphine. Celui-ci s’est déroulé au sein de la division Technologie,
Industrie et Economie de l’Unep (Union Nations Environement Programme) du 15 mai
au 15 septembre 2006 à Paris.

Unep est une organisation qui a pour mission de montrer la voie à suivre afin de
protéger l’environnement. Elle se doit aussi d’être une source d’inspiration et
d’information pour les États et les populations, et un instrument leur permettant
d’améliorer la qualité de leur vie sans toutefois compromettre celle des générations à
venir.

Le but de ce stage était d’étudier les possibilités de migration d’un site web
http://www.estis.net utilisant le couple ASP / Sql Server (Technologie de Microsoft)
vers PHP / Mysql (Technologie Open Source).
Avant de débuter la migration, j’ai du faire une analyse de l’existant d’Estis afin de
visualiser les différentes difficultés du projet, et ainsi me faciliter la tâche lors de la
migration. J’ai donc commencé par vérifier que toutes les options utilisées avec Sql
Server et Asp étaient disponibles de l’autre côté, en Open Source.

Une fois ces faits démontrés, j’ai dans un premier temps commencé à étudier le
monde des portails open source pour voir si un équivalent d’Estis était présent, pour
finalement commencer à recoder Estis en Php / Mysql.

Le fait de migrer Estis permettra de dégager d’énormes économies liées aux coûts
des différentes licences.

Ce rapport sera composé de deux parties :


L’observation de l’UNEP
Le projet informatique

Mots clefs :
Php, Mysql, Réplication, unicode

2
Remerciements

Je tiens à remercier ***** pour m’avoir proposé ce stage au sein de l’organisation


UNEP et par la même occasion de m’avoir permis d’acquérir énormément de
connaissances concernant le monde Open Source.

Je tiens aussi à remercier l’ensemble du personnel de l’UNEP et plus particulièrement


René Coignaud pour leur accueil sympathique et chaleureux, ainsi que leur
disponibilité, leur écoute et leur bonne humeur qui durant ces quatre mois de stage
ont contribué à rendre ce stage si intéressant et enrichissant.

Je remercie aussi l’ensemble de la communauté des logiciels libre sans qui les
technologies utilisées au cours de ce stage n’auraient jamais vu le jour.

Enfin, je désire remercier l’ensemble de mes professeurs que j’ai pu avoir lors de ma
scolarité.

3
Sommaire

Rapport de Stage a l’UNEP (United Nations Environment Programme)........................1


Etude d’une migration d’un site web Asp / Sql Server vers Php / Mysql.......................1

4
Introduction

Dans le cadre de ma formation, en vue de l’obtention de ma Licence Mi2E à


l’université Paris Dauphine, J’ai effectué un stage de quatre mois afin d’acquérir une
ébauche d’expérience professionnelle, et ainsi valider mon diplôme.

Dans cette perspective, j’ai décidé d’orienter mon choix vers une organisation à
caractère humain et qui cherche à améliorer nos vies chaque jour qui passe. J’ai par
conséquent postulé dans plusieurs branches des nations Unies pour finalement être
retenu au programme des nations unies pour l’environnement.

J’ai choisi le PNUE, car d’emblée, l’enjeu du stage proposé m’a semblé
particulièrement intéressant par le fait que l’on me confiait un gros projet avec de
nombreux objectifs à réaliser. D’autre part, la mise à l’épreuve du savoir théorique
dans ce projet relevait de l’innovation, de la créativité et de mon savoir faire. Mais
surtout de ma capacité à rechercher l’information par moi-même et de savoir
l’appliquer sans la nécessité de guide ou bien de professeur.

L’objectif du stage qui m’a été proposé consistait donc en la migration du site Estis
dont les principaux objectifs étaient:
La réplication des données, le support multilingue par le biais de l’unicode,…

L’envie de faire tourner Estis sous les technologies libres a toujours séduit le
directeur du service informatique mais lors de la réalisation de celui-ci, il y a environ
8 ans, Mysql n’offrait pas encore la possibilité de répliquer des données entre
plusieurs serveurs. Depuis Mysql n’a cessé d’évoluer, Php la technologie concurrente
d’ASP est reconnue par tous et est de plus en plus utilisée pour de gros projets, c’est
ainsi que les nations unies pour l’environnement ont décidé de réaliser une nouvelle
expertise afin de savoir s’il était aujourd’hui possible de migrer Estis et ainsi dégager
d’énormes économies liées aux coûts des différentes licences.

A travers mon rapport, je présenterai tout d’abord la structure dans laquelle j’ai
évolué. Puis je présenterai les différentes technologies employées lors de mon stage,
et enfin, je décomposerai chaque grande étape du projet qui m’a été confié, de la
phase analyse à la phase codage, pour enfin terminer par la phase de test.

5
LE PNUE

1 – Présentation de l’organisation
A – Que fait le Pnue ?
Le Programme des nations unies pour l’environnement joue le rôle de catalyseur, de
défenseur, d’instructeur et de facilitateur œuvrant à promouvoir l’usage avisé et le
développement durable de l’environnement mondial. Pour cela :
• Il évalue les conditions et les tendances environnementales mondiales, régionales
et nationales ;
• Il développe des instruments environnement aux nationaux et internationaux ;
• Il renforce les institutions pour une bonne gestion de l’environnement ;
• Il intègre le développement économique et la protection de l’environnement ;
• Il facilite le transfert des connaissances et de technologies pour le développement
durable ;
• Il encourage de nouveaux partenariats et de nouvelles attitudes dans la société
civile et le secteur privé.

A cette fin, le PNUE collabore avec de nombreux partenaires, dont les autres organes
des Nations Unies, des organisations internationales, des gouvernements nationaux,
des
Organisations non gouvernementales, le secteur privé et la société civile.

B – Le Pnue à travers le monde


Le siège du PNUE est à Nairobi (Kenya).
Etant basé en Afrique, le PNUE est très
proche des problèmes auxquels sont
confrontés les pays en voie de
développement.

Afin d’assurer son efficacité au niveau


mondial, le PNUE dispose de six bureaux
régionaux :
• Afrique : Nairobi, Kenya
• Amérique du Nord : Washington DC,
Etats-Unis
• Amérique latine et Caraïbes : Mexico,
Mexique
• Asie et Pacifique : Bangkok, Thaïlande
• Asie occidentale : Manama, Bahreïn
• Europe : Genève, Suisse

6
LE
PNUE

La Division Technologie, Industrie et Economie du PNUE est basée à Paris (France) et


dispose de branches à Genève (Suisse) et à Osaka (Japon). Le PNUE a également des
bureaux de liaison à Brasilia (Brésil), Bruxelles (Belgique), Moscou (Russie), New York
(Etats-Unis) et Pékin (Chine).
Le PNUE soutient un réseau grandissant de centres d’excellence, tels que :
• Le Centre de collaboration du PNUE en matière d’énergie et d’environnement
(UCCEE);
• Le Centre mondial de surveillance de la conservation de la nature (UNEP-WCMC)
• Les Centres de données sur les ressources environnementales du monde

C – Comment fonctionne le Pnue ?


Le PNUE comprend huit divisions chargées de promouvoir et de faciliter une gestion
avisée de l’environnement en faveur du développement durable :
• la Division de l’Alerte rapide et de l’Evaluation
• la Division de l’Elaboration des politiques et du Droit de l’environnement
• la Division de la Communication et de l’Information
• la Division de la Coopération régionale
• la Division de la Coordination du Fonds pour l’environnement mondial
• la Division de la Mise en œuvre des politiques environnementales
• la Division des Conventions sur l’environnement
• la Division Technologie, Industrie et Economie

D – Histoire du Pnue ?
1972 : Le PNUE est créé à l’issue de la Conférence des Nations Unies sur
l’environnement humain
1973 : Adoption de la Convention sur le commerce international des espèces de
faune et de flore sauvages menacées d’extinction (CITES)
1975 : Plan d’action pour la Méditerranée, premier de treize plans d’action régionaux
mis en œuvre dans le cadre du programme du PNUE ayant trait aux mers régionales
1979 : Convention de Bonn sur les espèces migratoires
1985 : Convention de Vienne relative à la protection de la couche d’ozone
1987 : Protocole de Montréal relatif aux substances qui nuisent à la couche d’ozone
1988 : Groupe d’experts intergouvernemental sur l’évolution du climat 1989 :
Convention de Bâle sur le contrôle des mouvements transfrontières des déchets
dangereux
1992 : Convention sur la diversité biologique
1995 : Programme d’action mondial, lancé dans le but de protéger le milieu marin
contre la pollution due aux activités terrestres
1998 : Convention de Rotterdam sur la procédure de consentement préalable
2000 : Protocole de Carthagène sur la prévention des risques biotechnologiques
2000 : Déclaration de Malmö : un appel à l’action lancé par le premier Forum
ministériel mondial sur l’environnement
2000 : Déclaration du Millénaire : assurer un environnement durable devient un des
huit Objectifs du Millénaire pour le développement
2001 : Convention de Stockholm sur les polluants organiques persistants (POP)
2002 : Le Sommet mondial sur le développement durable réaffirme le rôle central du
PNUE dans la lutte internationale en faveur du développement durable
2005 : Plan stratégique de Bali pour l’appui technologique et le renforcement des
capacités, adopté par le Conseil d’administration du PNUE et mandatant
l’organisation de soutenir les pays en voie de développement au niveau national
2005 : Le Sommet mondial souligne l’importance de l’environnement dans la
réalisation du développement durable

2 – Division Technologie, Industrie et Economie à Paris


A – Présentation de la division

7
Depuis 30 ans, la division technologie, industrie et économie à Paris travaille avec le
monde des affaires, celui de l’industrie et d’autres institutions pour protéger le
patrimoine naturel des ressources de la planète en soulignant la nécessité d’un
développement durable.

La mission de la division est d’encourager les décideurs à intégrer l’environnement


dans leur processus décisionnel et de promouvoir des politiques, des modèles
stratégiques et des pratiques qui traduisent leur préoccupation pour l’homme et
l’environnement.

Les activités de la DTIE sont axées sur la sensibilisation, l’amélioration des transferts
de connaissances et d’information, la promotion de la coopération technologique et
des partenariats ainsi que la mise en oeuvre des conventions et accords
internationaux.

B – Structure de la division
De Paris, la direction définit la politique générale et le programme de travail de la
DTIE, coordonne les activités, assure la liaison avec les autres divisions du PNUE et
favorise les activités qui élargissent la participation des parties prenantes. La division
comprend un centre et cinq services (voir plus bas). En outre, des responsables
Industrie et Ozone dans quatre des six bureaux régionaux du PNUE —Afrique (ROA),
Amérique latine et Caraïbes (ROLAC), Asie et Pacifique (ROAP) et Asie occidentale
(ROWA) — assurent la continuité des activités de la division dans les régions.

Le Centre international d’éco-technologie (IETC)


Met en oeuvre des programmes de gestion intégrée des déchets, de l’eau et des
catastrophes, en Asie plus particulièrement.

Le service Production et Consommation


Encourage des modes de consommation et de production durables afin de contribuer
au développement humain par le biais du marché.

Le service Substances chimiques


Favorise le développement durable en agissant comme catalyseur à l’échelle
mondiale des actions conduisant à la gestion rationnelle et sûre des substances
chimiques dans le monde.

Le service Energie
Préconise des politiques de l’énergie et des transports favorisant le développement
durable.

Le service ActionOzone
Aide les pays en développement ou à économie en transition à éliminer les
substances qui appauvrissent la couche d’ozone afin d’assurer la mise en oeuvre du
Protocole de Montréal.

Le service Economie et Commerce


Renforce la capacité des pays à intégrer les considérations environnementales dans
les politiques commerciales et économiques.

8
Durant mon stage, notre directrice étant nommée pour une période de trois ans à la
tête du Conseil du Fonds pour l’Environnement Mondial (FEM), son poste est désormais vacant.

Article : http://www.unep.org/Documents.Multilingual/Default.asp?
DocumentID=480&ArticleID=5296&l=fr

3 – Déroulement du stage
A – Mon lieu de travail
Arrivé juste après la semaine d’examen j’ai de suite été placé dans un bureau
composé uniquement de stagiaires. En effet, à la division de Paris, les stagiaires sont
regroupés entre eux dans un même bureau. Avec un tel système, l’ambiance ne
pouvait être qu’agréable. Cependant, le problème d’un tel système est que nous
étions cloîtrés dans notre bureau. Par conséquent, nous étions séparés de notre
responsable de stage et nous ne connaissions aucun membre du personnel du Pnue.

La durée du stage de chaque stagiaire était de quatre mois minimum, et dès qu’un
stagiaire s’en allait, il était immédiatement remplacé par un autre stagiaire le
lendemain, chose qui m’étonna énormément. Etant donné que le Pnue a un caractère
international, les stagiaires étaient de nationalités différentes : Canadienne,
Péruvienne, Colombienne ; Américaine, Russe…

Concernant le niveau d’étude des stagiaires, la plupart avait au minimum un bac +5


en poche, j’étais donc le plus jeune des consultants présents lors de mon stage.

Ma première semaine fut relativement calme car afin de réaliser ma mission je me


devais de programmer sous linux et non sur Windows chose que vous comprendrez
en lisant la partie technique de ce rapport. Pour remédier a ce problème j’ai dû
télécharger à mon domicile une version de linux puis l’installer sur les trois PC mis à
ma disposition.

9
10
LE PROJET INFORMATIQUE

1 – Présentation de la mission
A – Objectifs

Mon travail consistait à dire, dans un premier temps, si une migration du portail
internet Estis réalisé en Asp et relié à une base Sql Server était faisable en Php avec
une base Mysql.

Pour information, Estis « Environnementaly Sound Technology Information System »


est un portail qui permet aux gouvernements des pays en voie de développement de
réaliser un site internet multilingue avec des fonctions puissantes. L’administrateur
du site n’a besoin d’aucune connaissance en informatique. Tout se fait facilement par
formulaire.

Lors de la réalisation de Estis en 1999, beaucoup de fonctionnalités présentes sous


Sql Server et utilisées par Estis n’existaient pas encore sous Mysql, je parle ici entre
autres de la réplication multi master, qui est la fonction principale du portail.

Mon premier objectif, difficulté lors de ce stage a été de montrer qu’il était possible
de contourner ce problème. Et cela par le biais d’une tâche Cron et d’un script.

Suite à cela, mon maître de stage m’a alors demandé de réaliser une seconde
analyse avec pour thème : Est-il plus intéressant pour l’Unep d’utiliser un portail /
Cms déjà existant puis de le modifier pour l’adapter à nos besoins ou bien de
reconstruire le portail de A à Z ?

Suite à mon analyse, la direction pris la décision de suivre mon avis, et par
conséquent de redévelopper Estis en interne sans partir d’un portail open source
existant.

Ma nouvelle tâche était donc de partir d’Estis en Asp puis de modifier le code de
celui-ci pour le retranscrire au langage Php, tout en apportant différentes
améliorations lors de la retranscription.

Afin de réaliser ce challenge, j’ai commencé par réaliser une analyse de l’existant
d’Estis pour en comprendre les difficultés. La migration s’est fait par étape, et de
façon méthodique. Une fois un module redéveloppé, la direction se réunissait afin de
savoir comment améliorer l’existentiel. Il était inconcevable de proposer aux
utilisateurs d’Estis une nouvelle version, sans de nouvelles fonctionnalités.

11
B – Mes défis au sein du Pnue
Le Pnue n’étant pas une organisation à but lucrative, elle se doit par conséquent de
maîtriser les coûts et de les diminuer dès que cela peut être possible.

Depuis le début, l’équipe dirigeante d’Estis souhaitait développer ce service avec des
outils Open Source afin de se décharger du coût des licences de Microsoft SQL
Server. Concernant Php, il bénéficie des mêmes fonctionnalités qu’Asp, par
conséquent il n’y a jamais eu de blocage envers cette technologie. Le problème
venait donc de Mysql.

Sachant qu’aujourd’hui, Mysql rattrape peu à peu son retard face à ses concurrents
comme Oracle ou Microsoft Sql Server, il était temps pour la direction de réaliser une
seconde expertise.

Lors de mon arrivé, j’ai par conséquent commencé à faire une étude approfondie
d’Estis, dans le but d’en dégager les spécificités. Pourquoi Estis est unique ?

PARTAGE
D’INFORMATION

REPLICATION
MULTIILINGU BASE DE
E DONEES

FACILE
EDITEUR
D’ACCE WYSYWYG
S

Après analyse, voici les principales difficultés qui sont apparues.


- Les utilisateurs d’Estis proviennent de pays de tout horizon, la plus part ne
maîtrise pas l’anglais. Le site se devait donc d’être disponible dans plusieurs
langues, pour la simple et bonne raison qu’Estis doit être accessible à tout le
monde. De plus les sites créés par les utilisateurs peuvent contenir des
caractères arabes, japonais, latin, russe… L’Unicode devait donc être utilisé
sur l’affichage des pages, mais aussi dans le stockage des données sous
Mysql.

- Les utilisateurs d’Estis proviennent de pays de tout horizon, la majorité des


utilisateurs proviennent des pays en voie de développement qui ne dispose
pas de budget pour mettre en ligne leur site internet. Et qui dispose
également de connexion très bas débit, c’est pourquoi des serveurs Estis sont
installés dans ces pays, lorsqu’un utilisateur se connecte, il modifie son site
sur le serveur le plus proche, l’utilisateur a ainsi l’impression de travailler en
locale. Les données mis à jours sont ensuite répliqués sur tous les autres
serveurs.

12
- Les utilisateurs d’Estis n’ont aucune compétence en informatique, ils ne
connaissent pas le Html, c’est pourquoi, tout doit être accessible sans que
l’utilisateur n’aie à se poser de questions. Ils doivent pouvoir rédiger des
articles, navigués dans leurs dossiers avec des interfaces qu’ils connaissent
bien. Tout cela dans le seul souci que l’utilisateur ne se retrouve pas perdu.

- Les utilisateurs d’Estis ont la possibilité de partager leurs informations. C'est-


à-dire qu’un site internet hébergé sur Estis peut partager certaines de ses
pages / fichiers avec d’autres sites internet présents sur Estis. Cette gestion
de communauté est unique à Estis.

Les modules seront détaillés dans la partie module du rapport.

13
2 – L’environnement

Après le recueil des besoins, je n’ai pas eu à choisir les différents logiciels ou
technologies à utiliser. Tout m’a été fixé par mon responsable de stage.
Le développement s’est fait sous 3 ordinateurs sur lesquels j’ai installé le système
Linux Debian Sarge. Sur ces différentes machines, j’ai par la suite installé et
configuré Apache 2, Php 5 ainsi qu’une libraire permettant de gérer les images Gd2,
et Mysql 5.

A – Logiciels et matériels

Bluefish Editor
Bluefish est un puissant éditeur qui reconnaît les syntaxes Php
et html entre autres. Il permet de rendre le code agréable et
plus compréhensible avec sa colorisation syntaxique.
BlueFish fonctionne sous Debian.

Mysql 5
MySQL est la base de données la plus couramment
rencontrée chez les éditeurs de logiciels, les VAR (revendeurs
à valeur ajoutée), les constructeurs de matériel et les
fabricants de dispositifs réseaux qui souhaitent intégrer
à leurs produits une base de données relationnelle à hautes performances ou la
vendre en offre groupée avec leurs produits, cela à moindre coût.

Debian est un système d'exploitation libre pour votre


ordinateur. Un système d'exploitation est la suite des
programmes de base et des utilitaires qui permettent à un
ordinateur de fonctionner. Debian utilise le noyau Linux (le cœur d'un système
d'exploitation), mais la plupart des outils de base du système proviennent du projet
GNU ; d'où le nom GNU/Linux.

Au cours de mon stage, j’ai travaillé avec trois machines. Ces trois machines
possédaient la même configuration afin de travailler avec le mode réplication de
Mysql.

14
B – Langages de programmation

HTML ET CSS
CSS a été utilisé pour définir les couleurs, les polices, le rendu, et
d'autres caractéristiques liées à la présentation d'un document.

L'objectif était de bien séparer la structure (écrite en HTML ou


similaire) et la présentation (en CSS) du document. Cette
séparation a fourni un certain nombre de bénéfices, permettant
d'améliorer l'accessibilité, de changer plus facilement de structure
et de présentation, et de réduire la complexité de l'architecture
d'un document.
HTML ne décrivant que l'architecture interne, et CSS tous les aspects de la
présentation.

Ainsi, les avantages des feuilles de style sont multiples :


- La structure du document et la présentation sont gérées dans des fichiers séparés.
- La conception d'un document se fait dans un premier temps sans se soucier de la
présentation, ce qui permet d'être plus efficace.
- Dans le cas d'un site internet, la présentation est uniformisée : Les documents
(pages « html ») font référence à la (aux) même(s) feuille(s) de styles. Cette
caractéristique permet de plus un "relookage" rapide.
- Un même document peut donner le choix entre plusieurs feuilles de style
(impression ou lecture à l'écran par exemple).
- Le code HTML est considérablement réduit en taille et en complexité, puisqu'il ne
contient plus de balises de présentation.

JAVASCRIPT
Le Javascript est un langage de script incorporé dans un document
HTML. Historiquement, il s’agit même du premier langage de script
pour le web. Ce langage est un langage de programmation qui
permet d’apporter des améliorations au langage HTML en
permettant d’executer des commandes du côté client, c’est à dire
au niveau du navigateur et non du serveur web.

Ainsi le langage Javascript est fortement dépendant du navigateur


appelant la page web dans laquelle le script est incorporé, mais en contrepartie il ne
nécessite pas de compilateur, contrairement au langage java, avec lequel il a
longtemps été confondu.

PHP

PHP est une technologie, ou plus exactement un langage de


scripts généraliste et Open Source, spécialement conçu pour le
développement d'applications web. Ainsi une page web PHP
(fichier repérable par l’extension .php) aura un contenu pouvant
être différent selon certains paramètres (des informations
stockées dans une base de données, les préférences de
l’utilisateur, …) tandis qu’une page web classique en html affichera continuellement
la même information.

15
Les pages PHP tout comme ASP sont donc exécutées du côté serveur et non du côté
client (Javascript cf ci-dessus). Les scripts PHP sont donc intégrables au sein d’une
page web en HTML à l’aide de balises spéciales permettant au serveur web de savoir
que le code compris à l’intérieur de ces balises doit être interprété afin de renvoyer
des données (généralement du code HTML) au navigateur du client.

SQL
SQL (Strcutured Query Language) est un langage permettant de
manipuler les données se trouvant sur des bases de données
relationnelles.
Par manipulation de données, cela signifie qu’il permet de
sélectionner, insérer, modifier ou supprimer des informations dans
une base de données.

Le langage SQL m’a permis au cours de mon stage d’inclure des


requêtes SQL dans mes propres pages php, ainsi que d’envoyer des envoyer,
modifier ou supprimer des informations sur le SGBDR.

METHODE MERISE
La conception d’un système d’information n’est pas évidente car il
faut réfléchir à l’ensemble de l’organisation que l’on doit mettre en
place. La phase de conception nécessite des méthodes permettant
de mettre en place un modèle sur lequel on va s’appuyer.
La modélisation consiste à créer une représentation virtuelle d’une
réalité de telle façon à faire ressortir les points auxquels on
s’intéresse.
Ce type de méthode est appelé analyse.

16
3 – Structure du site
Lors de la migration du site internet, la direction souhaitait garder la mise en forme
déjà existante. Mais souhaité que le graphisme soit séparé du code Html, c’est donc
une des raisons pour laquelle j’ai utilisé le CSS.

Concernant la mise en place, tout se fait par des includes Php, J’ai choisi ce concept
car il permet de gagner un temps appréciable au niveau de la maintenance et
également dans le travail d’intégration.

Regardons de plus près ce concept en regardant la structure des pages du site.

D’après l’image ci-dessus, on remarque que cette page intitulé index comprend 4
pages. La page haut et menu sont fixes, c’est à dire qu’elles ne bougent pas pendant
la navigation du site. Seul la page « contenu » et « aide » changent en fonction de la
page demandée par le biais du menu.

4 – Présentation des modules


A – Module réplication

La réplication est l’outil essentiel au bon fonctionnement d’Estis.


Estis étant un service utile pour les pays en voie de développement, il se doit par
conséquent d’être accessible de partout.
Pour cette raison, Estis a placé des serveurs aux quatre coins du monde Bénin,
Jordanie, Irak, Japon, France, Vietnam…

17
Ainsi lorsque l’on se connecte à Estis, le site repère dans un premier temps quel
serveur répond le mieux à notre connexion en « pingant » les différents serveurs.
Puis le serveur maître situé au Japon nous redirige sur le serveur le plus intéressant.

Pour les pays comme le Bénin, la Jordanie ou l’Irak ; les pays qui sont donc en
développement, Estis a placé des serveurs dans chacune des régions, ainsi dès
qu’une coupure de courant intervient dans un des locaux ou le serveur est situé,
Estis reste accessible car un autre serveur prendra le relais.

Estis étant un portail permettant de créer des sites internet sans connaissance
informatique, les utilisateurs font régulièrement des modifications sur leur site
internet. C’est donc ici que nous utiliserons la réplication. Une modification faite sur
un des serveurs doit être répercutée sur l’ensemble des serveurs afin d’en préserver
l’uniformité. A titre d’exemple, un utilisateur pourrait effectuer des changements sur
le serveur Béninois et ceux-ci deviendraient immédiatement accessibles à un
utilisateur du serveur Japonais.

La réplication utilisée par Estis est donc en double sens, chaque serveur communique
avec la base maître située au Japon afin de mettre à jour les différents ordres Insert ;
Update ; Delete. Puis, le serveur japonais se charge de transmettre les modifications
à tous les autres serveurs. Cette mise à jour est déclenchée toutes les x minutes par
Microsoft Sql Server.

Afin de mieux comprendre le principe voici le modèle de réplication utilisé sous forme
de schéma.

18
Serveur Japonais :
Maitre

Serveur 1 Serveur 2

Serveur 1 a pour maitre Serveur Japonais


Serveur 2 a pour maitre Serveur Japonais
Serveur Japonais a pour maitre Serveur 1 et Serveur 2.

Dans Microsoft Sql Server, il est possible de dire qu’un serveur possède plusieurs
maîtres, on emploie alors le terme de réplication « multimaster ».

C’est donc ici que mon premier problème fit surface, car sous Mysql il est
actuellement impossible de faire cela. Mysql permet de donner uniquement un et un
seul maître à un esclave.

De plus, un second problème est vite apparu, il est impossible de dire à Mysql de
faire une réplication toutes les X minutes. Sous Mysql, la réplication se fait de façon
continue, les machines sont sans cesse en connexion. Une chose qui était
inconcevable pour la direction, car cela surchargerait le réseau inutilement.

Afin de pouvoir continuer la migration, il me fallait résoudre ce premier problème


auquel j’étais confronté.
Etant bloqué par le manque de fonction de Mysql, j’ai eu recours à la communauté de
développeurs par le biais du forum de discussion de Mysql. Ainsi différents
développeurs m’ont dirigé dans la façon de passer outre ce problème.

Tout d’abord afin de faire en sorte que la réplication ne se fasse plus de manière
continue, mais toutes les x minutes, j’ai du utilisé une petite astuce.
1- mettre la réplication à OFF par défaut de cette façon :
Stop Slave

2- Déclencher la réplication en faisant appel à un cron, un cron est une tâche à


exécuté à un moment donné. Pour ce faire, il faut dans un premier temps lancé le
démon : /etc/init.d/cron start

Puis, lancer le gestionnaire de Cron de cette façon


Crontab – e

19
Une fois dans l’éditeur Contab, il nous est possible de rajouter des lignes, une ligne
précédée par un # est un commentaire.

#execution du script qui change de master


*/10 * * * * php /var/www/html/prog/prog.php >> /croProg.log

Ici le fichier prog.php est lancé toutes les 10 minutes, et les différents affichages sont
enregistrés dans le fichier croPro.log, afin de savoir si tout s’est déroulé comme
prévu.

Vous trouverez en annexe une version du script commentée en français, une fois
terminée ce script a été posté sur le forum de Mysql.
Je reçois quelques mails de temps en temps de remerciement.

B – Module de gestion de l’Unicode

Le site étant multilingue, je me devais de travailler en Unicode afin de gérer les


différents caractères russes, français, arabes…

Pour qu’une page soit en unicode et ainsi que l’on puisse rajouter des textes
composés de n’importe quel caractère par le biais de formulaire, il m’a fallu spécifier
utf-8 comme charset.

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

Mais cela ne s’est pas arrêté à ca, car il a fallu définir une font / police universelle
pour le site, puis définir le charset des textes au sein de la base de données.

CREATE DATABASE estis DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Un site multilingue ne s’arrête pas encore à cela, car selon la langue du navigateur,
le style Css du site n’est pas le même, cela permet entre autre de définir la barre de
scroll à droite pour les pays arabes et à gauche pour les Européens.

20
21
C – Module de gestion des articles et fichiers

Concernant les utilisateurs, la principale fonction qui les intéresse n’est pas la
réplication mais la façon de gérer leurs fichiers, leurs pages. Ici, l’objectif était dans
un premier temps de reproduire les mêmes fonctions. Cependant, en avançant dans
le développement, j’ai décidé d’améliorer différentes choses que je vais vous
présenter.

Dans Estis premier du nom, les fichiers et pages pouvaient être rangés dans un
dossier, mais il n’existait qu’un seul niveau de répertoire. C'est-à-dire que l’on ne
pouvait pas créer un dossier dans un autre dossier.

Voici comment se présentaient les choses :

Dans cette image qui représente la liste des pages créés au sein du site, on voit la
présence de deux boutons violets qui se rajoutent dans le menu, un qui permet de
supprimer un dossier, et l’autre d’en créer un. On peut aussi remarquer que pour
visualiser le contenu d’un dossier, l’utilisateur doit utiliser une liste et choisir un nom
de dossier créé, afin d’en visualiser le contenu.

Il existe une autre page identique à celle-ci concernant les fichiers.

Dans la prochaine version d’Estis, voici comment les utilisateurs pourront gérer leurs
fichiers.

22
La différence saute aux yeux ; la gestion de rangement est incontestablement plus
élaborée. En effet, il est possible de créer des niveaux à l’infini, et l’interface
ressemble à si méprendre à l’explorateur Windows afin que les utilisateurs ne soient
pas perdus.
Dans un même dossier peut être contenues des pages écrites par l’utilisateur ou bien
des fichiers. Afin de ne pas les mélanger, il suffit de cliquer sur l’onglet Files pour
passer en mode Visualisation des fichiers et l’onglet Pages pour visualiser ces pages.

Remarque : les dossiers ne sont pas créés sur le serveur, cela représente juste une
ligne dans la table Folder de la base de données. Le dossier est donc virtuel.

Pour en savoir plus sur la structure de la table, je vous invite à consulter l’annexe.

23
D – Module de création / édition de pages

Après avoir migré, et amélioré la gestion des fichiers au sein de Estis, j’ai dû
continuer en migrant le système de création de pages.

Dans Estis une page est en fait un ensemble d’élément. Afin d’illustrer ce fait, voici
une copie d’écran de l’Estis actuel.

Chaque élément est représenté par les icônes vertes. Un élément peut être un titre,
du texte, un lien vers une des pages de son site ou extérieur, une image ou un saut
de ligne.

Cette façon de procéder fait que la création de page peut prendre pas mal de temps,
c’est pourquoi nous avons décidé de modifier le système en utilisant un éditeur
Wysiwyg.

Après différentes recherches, et proposition nous avons opté pour l’outil FckEditor qui
est Open source, et en Php / Html. De plus, cet outil reconnaît lorsque l’on fait un
copier / coller provenant d’un fichier Word et le retranscrit à la perfection.

24
Afin de pouvoir faire des liens sur les pages générées par le biais de Estis, j’ai dù
modifier le code de différentes pages. Désormais lorsque l’on clique sur le bouton
Lien de l’éditeur, il est possible de faire un lien sur les autres du site, ou vers
l’extérieur.

De cette façon, la migration pouvait continuer car l’objectif numéro 1 était de ne


perdre aucune fonctionnalité existante.

25
E – Module des mails

Les serveurs d’Estis envoient de nombreux mails par jours, il fallait donc implémenter
cette fonction sur mes différentes machines Linux Debian. Mais afin de passer le
moins de temps sur cette partie, la direction m’a demandé de rechercher un outil /
composant open source qui permettrait d’utiliser un serveur Smtp.

Après différentes recherches, notre choix s’est porté vers PHP Mailer qui est une
classe PHP facilitant la génération et l'envoi d'e-mails.
Avec PHP Mailer, il y a deux méthodes pour envoyer des e-mails.

1) La méthode SMTP permettant de se connecter à un serveur de mail distant


2) La méthode "mail" lorsque le serveur de mail est local

Ci-dessous voici un exemple de code pouvant servir à envoyer des mails en utilisant
un serveur Smtp :
<?
require "répertoire_phpmailer/class.phpmailer.php";
$mail = new PHPmailer();
$mail->IsSMTP();
$mail->Host='hote_smtp';
$mail->From='votre@adresse';
$mail->AddAddress('adresse@destinataire');
$mail->AddReplyTo('votre@adresse');
$mail->Subject='Exemple trouvé sur DVP';
$mail->Body='Voici un exemple d\'e-mail au format Texte';
if(!$mail->Send()){ //Teste le return code de la fonction
echo $mail->ErrorInfo; //Affiche le message d'erreur
(ATTENTION:voir section 7)
}
else{
echo 'Mail envoyé avec succès';
}
$mail->SmtpClose();
unset($mail);
?>

26
F – Module Utilisateur

Concernant le module utilisateur, je n’ai rajouté aucune fonctionnalité. J’ai


simplement migré l’existant. Il existe trois types d’utilisateurs ; le créateur du site,
l’administrateur, et l’utilisateur.

Le créateur du site détient tous les droits, et ne peut pas être supprimé.
L’administrateur peut rédiger des articles, puis ensuite les publier, ou encore
supprimer du contenu, ou des utilisateurs.
L’utilisateur ne peut que rédiger des pages ou soumettre des fichiers, c’est ensuite à
l’administrateur ou créateur du site de publier l’article afin qu’il puisse être
visualisable pour les visiteurs du site.

D’autres fonctions ont été intégrées durant ces quatre mois de stage,
comme la gestion des templates…, mais afin de respecter le quota de
pages, j’ai mis ceux qui me semblaient être le plus intéressant.

27
LE BILAN
L’objectif principal de ce stage était la découverte du monde de l’entreprise et dans
cette optique, ce stage a totalement répondu à mes attentes. J’ai pu constater qu’il y
a une grande différence entre la théorie et son application dans le monde
professionnel. En effet, les priorités ne sont pas les mêmes, il faut faire preuve d’une
plus grande réactivité et autonomie dans l’entreprise et savoir tenir compte des
disponibilités de chacun.

Le second objectif était personnel, je me l’étais fixé lors de mon choix de stage. Je
souhaitais avant tout apprendre lors de mon stage et non pas « mettre seulement en
pratique mes connaissances ». C’est pourquoi, j’ai opté pour un stage qui m’a offert
la possibilité de maîtriser de façon poussée Mysql et Php, une technologie que je ne
connaissais guère avant mon stage.

Il convient de souligner un autre point important qui m’a permis une adaptation
rapide dans ce nouveau contexte : c’est la confiance que l’on m’a accordé dans le
service, lors de mon arrivée. En effet, la confiance est selon moi un atout indéniable
dans l’intégration d’une nouvelle structure, car elle m’a permis d’y trouver facilement
ma place. Tout au long de mon stage, j’ai travaillé en autonomie, ce qui m’a obligé à
prendre quelques initiatives et à rechercher seul de la documentation. De plus, il m’a
fallu apprendre à gérer mon temps pour fournir les différents travaux réalisés dans
les délais demandés.

Ce stage est donc pour moi une expérience enrichissante car il m’a fait progresser
dans de nombreux domaines tant au niveau technique que relationnel.

Grâce à ce projet, j’ai désormais une idée plus précise du travail en entreprise, et
l’assurance que je me dirige sur la bonne voie.

Je garderai donc un très bon souvenir de mon expérience au sein du PNUE qui m’a
permis d’amplifier ma passion pour l’informatique, et l’envie de poursuivre mes
études dans cette direction.

28
GLOSSAIRE

REPLICATION : Mécanisme de copie automatique d'une base de données vers une


autre.

SMTP (Simple Mail Transfert Protocol): Protocole de base pour la messagerie sur
l'Internet dans lequel sont spécifiés l'enveloppe et le contenu des messages (RFC
822). Des extensions ont vu le jour afin de palier à certaines limitations; par exemple
MIME pour le multimédia, S/MIME pour la sécurité.

UNICODE : Codage de caractères sur 16 bits qui contient tous les caractères d'usage
courant dans les langues principales du monde.

URL : C’est un identifiant unique d’une ressource se trouvant sur Internet. Une url
comprend plusieurs éléments : le protocole, le nom de la machine hébergeant la
ressource (fichier, page web), le nom de domaine, le nom de la ressource.
Ex : http://nom.com/lapage.php

WYSIWYG : C’est un acronyme (de la locution anglaise What you see is what you
get signifiant littéralement « ce que vous voyez est ce que vous obtenez » ou plus
élégamment « tel affichage, tel résultat ») couramment utilisé en informatique pour
désigner les interfaces utilisateurs graphiques permettant de composer visuellement
le résultat voulu, typiquement pour un logiciel de mise en page, ou un traitement de
texte.

29
BIBLIOGRAPHIE
Afin de réaliser au mieux ce qui m’était demandé au cours de mon stage, ma
principale source d’information a été Internet.

Voici donc les quelques sites qui m’ont permis de me former aux technologies
demandées.

• http://www.developpez.com : Site récapitulatif sur l’informatique, qui fut très


utile. Principalement le forum ou j’ai pu trouver de l’aide dans les moments
difficiles.

• http://www.mysql.com : Site avec la documentation complète de Mysql, le


forum a été très utilisé lorsque j’avais besoin de réaliser mon script de
réplication multimaster.

• http://www.php.net : Site avec la documentation complète de PHP, chaque


fonction est accompagnée d’exemples ou de scripts par des développeurs, il
fut vite indispensable.

• http://www.codes-sources.com : Site comprenant beaucoup de codes sources


en français, qui sont très utile lorsque l’on souhaite faire quelque chose, et
que l’on ne sait pas par ou commencer.

• http://www.w3.org/MarkUp/ : Site du World Wide Web Consortium (W3C),


organisation qui a défini le standard Html.

30
ANNEXE

Ayant codé plus d’une cinquantaine de pages, vous retrouverez ici les codes les plus
intéressant

Script permettant de changer de maître.

<?php
/**
CREATE TABLE `replicate` (
`id` INT NOT NULL AUTO_INCREMENT ,
`nameRep` VARCHAR( 100 ) NOT NULL ,
`file` VARCHAR( 100 ) NOT NULL ,
`position` INT NOT NULL ,
PRIMARY KEY ( `id` )
);

SQL query:
ALTER TABLE `replicate` ADD `relayFile` VARCHAR( 100 ) NOT NULL ,
ADD `relayPos` INT NOT NULL ,
ADD `RelayMasterFile` VARCHAR( 100 ) NOT NULL ,
ADD `ExecMasterPos` INT NOT NULL ,
ADD `RelaySpace` INT NOT NULL ;

INSERT INTO `replicate` ( `id` , `nameRep` , `file` , `position` )


VALUES (
'', '192.168.8.54', 'mysql-bin.000046', '50920843'
), (
'', '192.168.8.56', 'mysql-bin.000041', '76924926'
);

**/

//List Param
$dodo = 6;

echo '------- Prog Start -------- <br>';


require_once('connexion.php');
echo '------- Connexion Bd OK --------';

$sqlListServer = 'Select * from replicate';


$reqListServer = mysql_query($sqlListServer) or die ('Erreur Sql:
'.$sqlListServer.'<br>'.mysql_error());

echo '<br>------- Servers List --------';


while ($data = mysql_fetch_assoc($reqListServer)) {
echo "<br> Serveur : ".$data['nameRep'];

//on doit changer le master et le connecte


$sqlChangeMaster = "change master to master_host='".
$data['nameRep']."', master_log_file='".$data['file']."',
master_log_pos=".$data['position'];
$reqChangeMaster = mysql_query($sqlChangeMaster) or die
('Erreur Sql: '.$sqlChangeMaster.'<br>'.mysql_error());

//start replication
$sqlStart = "start slave";

31
$reqStart = mysql_query($sqlStart) or die ('Erreur Sql: '.
$sqlStart.'<br>'.mysql_error());

sleep ($dodo);

//stop replication
$sqlStop = "stop slave";
$reqStop = mysql_query($sqlStop) or die ('Erreur Sql: '.
$sqlStop.'<br>'.mysql_error());

//recuperer les nouvelles positions


$sqlStatus = "show slave status";
$reqStatus = mysql_query($sqlStatus) or die ('Erreur Sql:
'.$sqlStatus.'<br>'.mysql_error());
$row = mysql_fetch_assoc($reqStatus);
if (is_array($row)) {
//print_r(array_keys($row)); permet de recuperer le
nom des champs
echo '<br><br>';
// print_r(array_values($row)); permet de recuperer
le contenu des champs
}
echo "-> <br> New - Master_log_file :".
$row['Master_Log_File'];
echo "-> <br> New - Master_log_file :".
$row['Read_Master_Log_Pos'];

echo '<br>';

//on effectue la maj


$sqlUpdate = "update replicate set file='".
$row['Master_Log_File']."', position=".$row['Read_Master_Log_Pos'].",
relayFile='".$row['Relay_Log_File']."', relayPos=".
$row['Relay_Log_Pos'].", RelayMasterFile='".
$row['Relay_Master_Log_File']."', ExecMasterPos=".
$row['Exec_Master_Log_Pos'].", RelaySpace=".$row['Relay_Log_Space']."
where nameRep='".$data['nameRep']."'";
$reqUpdate = mysql_query($sqlUpdate) or die ('Erreur Sql:
'.$sqlUpdate.'<br>'.mysql_error());
}
echo '------- Prog End -------- <br>';
?>

32
How to create the database

//création de la BD
CREATE DATABASE estis DEFAULT CHARACTER SET utf8 COLLATE
utf8_unicode_ci;

CREATE TABLE server (


idServer INT NOT NULL AUTO_INCREMENT,
ipServer VARCHAR(50) NOT NULL,
PRIMARY KEY (idServer)
) TYPE = INNODB;

INSERT INTO `server` ( `idServer` , `ipServer` )


VALUES ('', '192.168.8.60'), ('', '192.168.8.58'), ('', '192.168.8.55');

CREATE TABLE typeUtilisateur (


idTypeUtilisateur INT NOT NULL AUTO_INCREMENT,
nomTypeUtilisateur VARCHAR(50) NOT NULL,
PRIMARY KEY (idTypeUtilisateur)
) TYPE = INNODB;

INSERT INTO `typeUtilisateur` ( `idTypeUtilisateur` ,


`nomTypeUtilisateur` )
VALUES ('', 'Normal'), ('', 'Admin'), ('', 'Createur');

CREATE TABLE site (


idSite INT NOT NULL AUTO_INCREMENT,
nomSite VARCHAR(50) NOT NULL,
notifySite TINYINT NULL DEFAULT 0,
descriptionSite MEDIUMTEXT NOT NULL,
utiliteEstisSite MEDIUMTEXT NOT NULL,
dateCreationSite DATETIME NOT NULL,
dateModificationSite DATETIME NOT NULL,
validationSite TINYINT NOT NULL DEFAULT '0',
menuSite MEDIUMBLOB NULL,
PRIMARY KEY (idSite),
UNIQUE (nomSite)
) TYPE = INNODB;

CREATE TABLE page (


idPage INT NOT NULL AUTO_INCREMENT,
idSite INT NOT NULL,
idServer INT NOT NULL,
titrePage VARCHAR(250) NOT NULL,
contenuPage LONGBLOB NOT NULL,
recherchePage TINYINT NOT NULL,
motsClefPage VARCHAR(250) NOT NULL,
descriptionPage VARCHAR(250) NOT NULL,
descripteurPage VARCHAR(250) NOT NULL,
dateCreationPage DATETIME NOT NULL,
dateModifPage DATETIME NOT NULL,
estPublie TINYINT NULL DEFAULT '0',
PRIMARY KEY (idPage,idServer),
FOREIGN KEY (idServer) REFERENCES server(idServer),
FOREIGN KEY (idSite) REFERENCES site(idSite) ON DELETE CASCADE
) TYPE = INNODB;

ALTER TABLE site


ADD idPageHome INT NULL,

33
ADD CONSTRAINT FOREIGN KEY (idPageHome) REFERENCES page(idPage)
ON DELETE SET NULL
;

CREATE TABLE utilisateur (


nomUtilisateur VARCHAR(50) NOT NULL,
idSite INT NOT NULL,
idServer INT NOT NULL,
idTypeUtilisateur INT NOT NULL,
mdpUtilisateur VARCHAR(50) NOT NULL,
prenomUtilisateur VARCHAR(50) NOT NULL,
emailUtilisateur VARCHAR(50) NOT NULL,
institutionUtilisateur VARCHAR(50) NOT NULL,
roleUtilisateur VARCHAR(50) NOT NULL,
adresseUtilisateur VARCHAR(250) NULL,
villeUtilisateur VARCHAR(80) NULL,
etatUtilisateur VARCHAR(50) NULL,
paysUtilisateur VARCHAR(50) NULL,
codePostalUtilisateur VARCHAR(50) NULL,
telephoneUtilisateur VARCHAR(50) NULL,
telecopieurUtilisateur VARCHAR(50) NULL,
dernierAccesUtilisateur DATETIME NULL,
dateCreationUtilisateur DATETIME NULL,
PRIMARY KEY (nomUtilisateur,idSite,idServer),
FOREIGN KEY (idSite) REFERENCES site(idSite) ON DELETE CASCADE,
FOREIGN KEY (idServer) REFERENCES server(idServer),
FOREIGN KEY (idTypeUtilisateur) REFERENCES
typeUtilisateur(idTypeUtilisateur),
UNIQUE (nomUtilisateur)
) TYPE = INNODB;

CREATE TABLE file (


idFile INT NOT NULL AUTO_INCREMENT,
idServer INT NOT NULL,
nameFile varchar(100) NOT NULL,
sizeFile varchar(30) NOT NULL,
typeFile varchar(100) NOT NULL,
dateFile DATETIME NOT NULL,
file LONGBLOB NOT NULL,
idSite INT NOT NULL,
PRIMARY KEY (idFile,idServer),
FOREIGN KEY (idServer) REFERENCES server(idServer),
FOREIGN KEY (idSite) REFERENCES site(idSite) ON DELETE CASCADE
) TYPE = INNODB;

CREATE TABLE folder (


idFolder INT NOT NULL AUTO_INCREMENT,
idServer INT NOT NULL,
nameFolder varchar(100) NOT NULL,
dateFolder DATETIME NOT NULL,
parentFolder INT NULL,
parentServerFolder INT NULL,
idSite INT NOT NULL,
PRIMARY KEY (idFolder,idServer),
FOREIGN KEY (idServer) REFERENCES server(idServer),
FOREIGN KEY (parentFolder,parentServerFolder) REFERENCES
folder(idFolder,idServer) ON DELETE SET NULL,
FOREIGN KEY (idSite) REFERENCES site(idSite) ON DELETE CASCADE
) TYPE = INNODB;

34
ALTER TABLE file
ADD idFolder int null default '0',
ADD idServerFolder int null,
ADD CONSTRAINT FOREIGN KEY (idFolder,idServerFolder) REFERENCES
folder(idFolder,idServer) ON DELETE SET null;

ALTER TABLE page


ADD idFolder int null default '0',
ADD idServerFolder int null,
ADD CONSTRAINT FOREIGN KEY (idFolder,idServerFolder) REFERENCES
folder(idFolder,idServer) ON DELETE SET null;

CREATE TABLE AUTORISEPARTAGE (


idSite1 INT NOT NULL,
idSite2 INT NOT NULL,
nomUtilisateur VARCHAR(50) NOT NULL,
PRIMARY KEY (nomUtilisateur,idSite1,idSite2),
FOREIGN KEY (idSite1) REFERENCES site(idSite) ON DELETE CASCADE,
FOREIGN KEY (idSite2) REFERENCES site(idSite) ON DELETE CASCADE,
FOREIGN KEY (nomUtilisateur) REFERENCES
utilisateur(nomUtilisateur)
) TYPE = INNODB;

CREATE TABLE PAGEPARTAGE (


idSite1 INT NOT NULL,
idSite2 INT NOT NULL,
idPage INT NOT NULL,
PRIMARY KEY (idPage,idSite1,idSite2),
FOREIGN KEY (idSite1) REFERENCES site(idSite) ON DELETE CASCADE,
FOREIGN KEY (idSite2) REFERENCES site(idSite) ON DELETE CASCADE,
FOREIGN KEY (idPage) REFERENCES PAGE(idPage) ON DELETE CASCADE
) TYPE = INNODB;

35
How to setup estis.

Avant de partir, j’ai dû mettre en place une procédure, afin que le développeur de
l’Unep, se trouvant au Japon puisse configurer de nouveaux serveurs selon le modèle
Php / Mysql.

What do you need to install EStis 2


Debian Sarge 3.1
And the package estis, that you can download there :
http://192.168.8.68/estis/estis.tar.gz

Step 1

If you want to install a graphical user interface:


Go in a terminal and type:

Apt-get install x-window-system-core //this thing manage the periphericals like


mouse, keyboard

Apt-get install kdebase // after to go in kde type startx

If you need to install something like winzip

Apt-get install ark zip unzip bzip2 rar unrar unace


Apt-get install kdeaddons kdeaddons-doc-html kdeaddons-kfile-plugins

To manage cron
Apt-get install kdeadmin kdeadmin-kfile-plugins

Editor HTml
Apt-get install quanta compare tidy kimagemapeditor kommander kxsldbg
kfilereplace klinkstatus

Step 2 : Apache, Php, Mysql

You need to install the last files so do:


Apt-get update

Install apache2
Apt-get install apache2

Documentation of apache 2
Apt-get install apache2-doc
/etc/init.d/apache2 restart

If you type this address in a browser http://127.0.0.1/manual you must be able to


consult the documentation

Install mysql v5

36
Apt-get install mysql-server-5.0

To define a password
Mysql –u root
Mysql > use mysql;
Mysql > update user set password = PASSWORD(‘yourpass’) where user=’root’;
Mysql > flush privileges;
Mysql > quit;

Install Php5
Apt-get install libapache2-mod-php5 php5-mysql php5-gd php5-cli

Install Phpmyadmin
Apt-get install phpmyadmin
/etc/init.d/apache2 restart
To go to phpmyadmin type in your browser http://127.0.0.1/phpmyadmin

Step 3

Ok so now we’re ready to put the website. Put the folder estis in
/var/www/

Before Estis working, you will modify one file /var/www/estis/config.php

Change the value of $mdp and put what you put when you configured Mysql.

Now, we will install the database of Etis with Phpmyadmin that you must be install
early.

Go to http://localhost/phpmyadmin, and in the left window, click on SQL, type this


Create database estis default character set utf8 collate utf8_unicode_ci;

Then go in the database, and click on Import files and choose the file with the name
/sql/estis.sql.gz or /sql/estis.sql.zip

Then you must add a line in the table server. In order to do it, you can use
phpmyadmin. Go in the table server, then click to insert and add the line with the ip
of the computer.

Now, Estis must be functional but without replication.

Step 4: Replication

37
Pc 1 is the real
boss.

192.168.8.60

Pc 2 Pc 3
192.168.8.55 192.168.8.57

The schema of the


replication in paris.

The replication is the most difficult step of the project.

So first we need to create an user:


Yourcomputer: mysql –u root yourpassword

You must be into mysql, so type:


Grant replication slave on *.* to repl@’%’ identified by ‘password’;

Now we must modifiy one file:

/etc/mysql/my.cnf

[mysqld]

server-id = 4
master-host = 192.168.8.60
master-user = repl
master-password = password
master-port = 3306
replicate-do-db = estis
log-bin = /var/log/mysql/bin.log
log-error = /var/log/mysql/error.log
slave-skip-errors = 1062
log_slave_updates
Then you must put this lines as comments. In order to do this, you must add # at
the beginning of the lines.
# bind address = 127.0.0.1
# skip networking

Ok I will now explain the lines.


Server-id is the server identification number, it is an arbitrary number to identify the
master server. A different one should be assignated to the slave server to keep them
straight. So I put the number 4 beacause I have always three computers in paris.

38
Master-host is the name of the master, we must add the lines for the slave, for Estis
all the computers are slave and master in the same time.

Master-user is the name of the user that you created, and master-password is the
pass of the user that you indicated for him.

Log_slave_updates is very important. Look my schema to understand it. If you don’t


add it, the data that pc1 recovers from pc2 will not be transferred to pc3.

Now you must restart mysql


/etc/init.d/mysql restart

Step 5: Crontab

As you can see in the step 4, in mysql we can notice only one master by computer.
To bypass it, we must planned a short script, which will be launched every 10
minutes.

So to do it, type
Crontab – e

And inside the editor, write this:


#execution du script qui change de master
*/10 * * * * php /var/estis/script/prog.php >> /var/estis/prog/cronProg.log

This script use an other database that you must create with the script sql :
/var/estis/script/replicate.sql.gz

You must modify the file /var/estis/script/connexion.php and put the good password.

39

S-ar putea să vă placă și