Mois : septembre 2010

Dégroupage…. C’est à l’eau :-(

Je viens d’apprendre que c’est mal engagé pour nous à Brouzet!

En fait Brouzet sera bien dégroupé, mais seuls les abonnés reliés sur le noeud de raccordemnt ADSL de Quissac (QSC30) sont concernées, c’est à dire certains habitants d’Aiguebelle…

Sauf que même ceux là, qui seront pourtant bel et bien éligible au dégroupage, n’auront pas les avantages du dégroupage car la longueur des lignes fait que la qualité sera très loin d’être suffisante pour avoir, par exemple, la TV par l’ADSL.

Voilà pour la triste nouvelle du jour…

Spatialiser une base de données postGIS

Même si PostgreSQL a été installé conjointement avec PostGis, la base de données n’est pas, par défaut, spatialisée.

Un rapide coup d’oeil aux tables nous montre l’absence des deux principales tables nécessaires à PostGIS, geometry_columns et spatial_ref_sys.

Voilà comment les ajouter, ainsi que l’ensemble des fonctions nécessaires à la spatialisation de la base colloque:

sudo su - postgres
createlang plpgsql colloque
psql -f /usr/share/postgresql-8.3-postgis/lwpostgis.sql -d colloque
psql -f /usr/share/postgresql-8.3-postgis/spatial_ref_sys.sql -d colloque

Pour ajouter les droits d’usage sur ces tables à l’utilisateur, saisir :

sudo –s –u postgres
psql colloque
ALTER TABLE geometry_columns OWNER TO colloque;
ALTER TABLE spatial_ref_sys OWNER TO colloque;


No stress   😉

Création d’un serveur web virtualisé dédié au webmapping – partie 4, fin

C’est pas tout de créer des serveur web et bases de données, faut savoir els exploiter. Dans ce tutoriel, vous trouverez comment réaliser un petit script pour tester votre serveur en mettant en oeuvre Ajax.

Premier site avec Ajax

L’objectif est de créer une page web avec une zone de saisie couplée à un liste de suggestion issue d’une base de données. A chaque saisie de l’utilisateur, une requete Ajax est soumise au serveur qui va interroger la base de données pour vérifier que le nom d’une ville commençant par les lettres saisies existe pas dans la table villes. Si c’est le cas, le serveur renvoi la liste des villes correspondant. Les villes renvoyées peuvent être cliquées pour remplir automatiquement la zone de saisie.

Créons notre table

Dans Postgresql, on créé la table avec le code SQL suivant

CREATE TABLE villes
(
nom character varying(50) NOT NULL,
CONSTRAINT villes_pkey PRIMARY KEY (nom)
)

Il est téléchargé sur Jquery.com la bibliothèque Javascript JQuery qui est enregistrée à la racine du site. Pour fonctionner, le site est constitué des 3 principaux fichiers suivants:

index.xhtml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<!-- Vital, afin que le site soit bien interprété par le
navigateur en termes de caractères -->
<title>Mon premier site utilisant Ajax</title>
<script type="text/javascript" src="jquery.js"></script>
<!-- lien vers la bibliothèque jquery téléchargées depuis jquery.com -->
<script type="text/javascript" src="suggest.js"></script>
<!-- lien vers le fichier personnel suggest.js qui s'exécuter après
le chargement du DOM -->
<link rel="stylesheet" href="suggest.css" media="screen" />
<!-- lien vers le fichier personnel CSS -->
</head>
<body>
<div>
Saisir un mot: <input type="text" />
<!-- C'est ici que l'utilisateur sélectionnera
les première lettre du nom à trouver  -->
</div>
<div>
Suggestions: <span id="suggest"></span>
<!-- c'est dans ce span -élément inline- que s'écrira le résultat
de la requete ajax  -->
</div>
</body>
</html>

suggest.js (exécuté côté client: le navigateur web):

$(document).ready(function() {
// $(document).ready() s'exécute dès que le DOM est chargé,
// avant que toutes les ressources soient téléchargées (ex: images)
$('#txt1').keyup(function() {
// inscrit dans le gestionnaire d'événement que la fonction propose() est
// à lancer lorsque la touche du clavier est lachée sur le contrôle txt1
propose();  // fonction à appeler sur le keyup de l'input txt1
});
});
function propose(){
if($('#txt1').val() == '') { // si l'input d'id=txt1 est vide ou vidé
$('#suggest').html(''); // vide le span d'id=suggest
return; // sort de la fonction
}
$.ajax({  // exécute une requete Ajax
type: 'GET',  // en mode GET
url: 'suggest.php',  // vers le fichier suggest.php
data: 'txt='+$("#txt1").val(),  // avec les paramètres suivant donc suggest.php?txt=...
dataType:'text',  // le serveur renverra une réponse de suggest.php sous forme texte
success: function(msg){ $('#suggest').html(msg); }
// si Ajax réussi, écrit dans le span d'id=suggest
// la réponse du serveur suggest.php?txt=
});
}

suggest.php(exécuté côté serveur et restituant au client de l’HTML)

<?php
session_start();   // démarrer la gestion des sessions
header("Content-Type: text/plain ; charset=utf-8");
// renvoie un réponse au format MIME text avec les caractères utf-8
header("Cache-Control: no-cache, private"); // anti cache pour HTTP/1.1
header("Pragma: no-cache"); // anti cache pour HTTP/1.0
if (!isset($_SESSION['chaineconnexion'])) {
// si la variable $_SESSION['chaineconnexion'] n'est pas définie alors:
$_SESSION['chaineconnexion']='host=localhost port=5432 user=form password=form dbname=form';
}
if(isset($_REQUEST['txt'])){ // si la variable $_REQUEST['txt'] est bien définie alors:
$conn=pg_connect($_SESSION['chaineconnexion']); // on créé la connexion avec la base PGSQL
$sql = "SELECT nom FROM villes WHERE nom LIKE '".$_REQUEST['txt']."%'";
// on définit la requete à exécuter
$result = pg_query($conn,$sql);
// on exécute la requete, le flux de données généré sera représenté par $result
while($row = pg_fetch_assoc($result)){
// on boucle ligne à ligne (à chaque appel de pg_fetch_array,
// $row récupèrera sous forme de table la ligne de données)
echo '<div onclick=\'$("#txt1").val("'.$row['nom'].
'");$("#suggest").hide();\'>'.$row['nom'].'</div>';
// exemple, renverra: <div onclick='$("#txt1").val("Montpellier");
// $("#suggest").hide();'>Montpellier</div>
}
}
?>

Mise en forme

Pour mettre en forme notre site, on applique une feuille de style simple

suggest.css

root {
display: block;
}

#suggest {
position:fixed;
top:33px;
left:130px;
background-color:#86B0D8;
border-style:solid;
border-width:1px;
margin:5px;
cursor : wait;
}

div:hover{
background-color:white;
}

Voilà, c’est fini. Les prochains articles seront plus « webmapping » avec la spatialisation des bases de données, et leur exploitation.

Premier site avec Ajax

L’objectif est de créer une page web avec une zone de saisie couplée à un liste de suggestion issue d’une base de données. A chaque saisie de l’utilisateur, une requete Ajax est soumise au serveur qui va interroger la base de données pour vérifier que le nom d’une ville commençant par les lettres saisies existe pas dans la table villes. Si c’est le cas, le serveur renvoi la liste des villes correspondant. Les villes renvoyées peuvent être cliquées pour remplir automatiquement la zone de saisie.

Dans Postgresql, on créé la table avec le code SQL suivant

CREATE TABLE villes

(

nom character varying(50) NOT NULL,

CONSTRAINT villes_pkey PRIMARY KEY (nom)

)

Il est téléchargé sur Jquery.com la bibliothèque Javascript JQuery qui est enregistrée à la racine du site. Pour fonctionner, le site est constitué des 3 principaux fichiers suivants:

index.xhtml

<?xml version= »1.0″ encoding= »UTF-8″?>

<!DOCTYPE html PUBLIC « -//W3C//DTD XHTML 1.0 Strict//EN » « http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd »>

<html xmlns= »http://www.w3.org/1999/xhtml »>

<head>

<meta http-equiv= »Content-Type » content= »text/html; charset=UTF-8″/>

<!– Vital, afin que le site soit bien interprété par le

navigateur en termes de caractères –>

<title>Mon premier site utilisant Ajax</title>

<script type= »text/javascript » src= »jquery.js »></script>

<!– lien vers la bibliothèque jquery téléchargées depuis jquery.com –>

<script type= »text/javascript » src= »suggest.js »></script>

<!– lien vers le fichier personnel suggest.js qui s’exécuter après

le chargement du DOM –>

<link rel= »stylesheet » href= »suggest.css » type= »text/css » media= »screen » />

<!– lien vers le fichier personnel CSS –>

</head>

<body>

<div>

Saisir un mot: <input type= »text » id= »txt1″ />

<!– C’est ici que l’utilisateur sélectionnera

les première lettre du nom à trouver –>

</div>

<div>

Suggestions: <span id= »suggest »></span>

<!– c’est dans ce span -élément inline- que s’écrira le résultat

de la requete ajax –>

</div>

</body>

</html>

suggest.js

$(document).ready(function() {

// $(document).ready() s’exécute dès que le DOM est chargé,

// avant que toutes les ressources soient téléchargées (ex: images)

$(‘#txt1’).keyup(function() {

// inscrit dans le gestionnaire d’événement que la fonction propose() est

// à lancer lorsque la touche du clavier est lachée sur le contrôle txt1

propose(); // fonction à appeler sur le keyup de l’input txt1

});

});

function propose(){

if($(‘#txt1’).val() ==  ») { // si l’input d’id=txt1 est vide ou vidé

$(‘#suggest’).html( »); // vide le span d’id=suggest

return; // sort de la fonction

}

$.ajax({ // exécute une requete Ajax

type: ‘GET’, // en mode GET

url: ‘suggest.php’, // vers le fichier suggest.php

data: ‘txt=’+$(« #txt1 »).val(), // avec les paramètres suivant donc suggest.php?txt=…

dataType:’text’, // le serveur renverra une réponse de suggest.php sous forme texte

success: function(msg){ $(‘#suggest’).html(msg); }

// si Ajax réussi, écrit dans le span d’id=suggest

// la réponse du serveur suggest.php?txt=

});

}

suggest.php

<?php

session_start(); // démarrer la gestion des sessions

header(« Content-Type: text/plain ; charset=utf-8 »);

// renvoie un réponse au format MIME text avec les caractères utf-8

header(« Cache-Control: no-cache, private »); // anti cache pour HTTP/1.1

header(« Pragma: no-cache »); // anti cache pour HTTP/1.0

if (!isset($_SESSION[‘chaineconnexion’])) {

// si la variable $_SESSION[‘chaineconnexion’] n’est pas définie alors:

$_SESSION[‘chaineconnexion’]=’host=localhost port=5432 user=form password=form dbname=form’;

}

if(isset($_REQUEST[‘txt’])){ // si la variable $_REQUEST[‘txt’] est bien définie alors:

$conn=pg_connect($_SESSION[‘chaineconnexion’]); // on créé la connexion avec la base PGSQL

$sql = « SELECT nom FROM villes WHERE nom LIKE ‘ ».$_REQUEST[‘txt’]. »%' »;

// on définit la requete à exécuter

$result = pg_query($conn,$sql);

// on exécute la requete, le flux de données généré sera représenté par $result

while($row = pg_fetch_assoc($result)){

// on boucle ligne à ligne (à chaque appel de pg_fetch_array,

// $row récupèrera sous forme de table la ligne de données)

echo ‘<div onclick=\’$(« #txt1 »).val(« ‘.$row[‘nom’].

‘ »);$(« #suggest »).hide();\’>’.$row[‘nom’].'</div>’;

// exemple, renverra: <div onclick=’$(« #txt1 »).val(« Montpellier »);

// $(« #suggest »).hide();’>Montpellier</div>

}

}

?>

Mise en forme

Pour mettre en forme notre site, on applique une feuille de style simple suggest.css

root {

display: block;

}

#suggest {

position:fixed;

top:33px;

left:130px;

background-color:#86B0D8;

border-style:solid;

border-width:1px;

margin:5px;

cursor : wait;

}

div:hover{

background-color:white;

}

Spatialiser la base de données colloque

Même si PostgreSQL a été installé conjointement avec PostGis, la base de données n’est pas par défaut spatialisée. Un rapide coup d’oeil aux tables nous montre l’absence des deux principales tables nécessaires à PostGIS, geometry_columns et statial_ref_sys.

Voilà comment les ajouter, ainsi que l’ensemble des fonctions necessaires à la spatialisation de la base colloque:

sudo su – postgres

createlang plpgsql colloque

psql -f /usr/share/postgresql-8.3-postgis/lwpostgis.sql -d colloque

psql -f /usr/share/postgresql-8.3-postgis/spatial_ref_sys.sql -d colloque

Pour ajouter les droits d’usage sur ces tables à l’utilisateur, saisir :

sudo –s –u postgres

psql colloque

ALTER TABLE geometry_columns OWNER TO colloque;

ALTER TABLE spatial_ref_sys OWNER TO colloque;

Création d’un serveur web virtualisé dédié au webmapping – partie 3

Dans cette partie, nous nous consacrerons à créer les alias permettant l’hébergement de sites web.


Pour héberger un site web, vous devez créer un espace dédié. Il s’agit en fait de créer un alias vers lequel toute requête http sera redirigée vers un répertoire du serveur, répertoire stockant les fichiers et scripts du site internet hébergé.

Cas d’étude

Exemple de la mise en place de répertoires et droits pour 3 sites web et 2 webmestres: Comment créer les espaces disques ainsi que les utilisateurs (les webmestres) pour ces sites?

Sites web:

  • http://site1/: dont les données stockées sur /var/www/site1
  • http://site2/: dont les données stockées sur /home/site-web/site2
  • http://site3/: dont les données stockées sur /home/site-web/site3

2 webmasters:

  • webmaster1: accès au site1 et site2,
  • webmaster2: accès au site2 et site3.

Création du site1

Créons le site1:

sudo -s
cd /var/www
mkdir site1
ls -la

Cette commande permet de voir que le dossier site1 a été créé mais avec les droits root:root.

Changeons le le propriétaire:

chown farah:www-data site1

Cette commande équivaut à:

chown farah site1
chgrp www-data site1
ls – la

Cette commande permet de voir que le dossier site1 a les droits passés à  farah:www-data

cd site1

Copions le fichier /var/www/index.html vers /var/www/site1/

cp ../index.html .

ls -la

On voit ici que index.html est root:root. Donnons les droits à farah sur le fichier

chown farah:www-data index.html
exit

Cette dernière commande, tout comme [CTRL]+[d] permet de se déconnecter de root

Éditons le fichier index.html

gedit index.html

Son contenu est:

<html><body><h1>It works!</h1>
<p>This is the default web page for this server.</p>
<p>The web server software is running but no content has been added, yet.</p>
</body></html>
Ajouter dans la première ligne le mot Farah et enregistrer
<html><body><h1>It works! Farah</h1>
<p>This is the default web page for this server.</p>
<p>The web server software is running but no content has been added, yet.</p>
</body></html>

Voir dans le navigateur le résultat à l’adresse suivante: http://localhost/site1/

L'alias vers site1 fonctionne

Remarque: si on retire les droits de lecture au groupe voici ce qui se passe

chmod 700 index.html
Le retrait des droits de lecture empêche Apache d'aller lire les fichiers de l'alias site1

On remet les droits par de lecture

chmod 644 index.html
Les droits ont été attribués normalement

A ce niveau, nous avons bien créé un espace web, mais l’adresse http://site1/ n’est pas encore fonctionnelle, seule l’adresse http://localhost/site1/ est opérationnelle. L’alias site1, n’est pas encore activé.

Création du site2

On décide de monter les autres sites dans un répertoire différent (par exemple, le disque / est plein, on doit donc monter un second disque dur qui aura comme rôle d’héberger tous les sites web /home/siteweb/

On créera le site2 dans ce répertoire /home/sitesweb/site2 et on utilise un lien pour pointer le site 2 vers les fichiers du site2 stockés sur /home/sitesweb/site2/

Positionnons nous rapidement sur le homedirectory par la commande:

cd

Créons le dossier site2 dans /home/sitesweb/

cd ..
sudo mkdir sitesweb
cd sitesweb
sudo mkdir site2

Cette dernière commande créée le répertoire site2 mais celui-ci appartient au groupe root

ls -la

donne pour le répertoire site2:

drwxr-xr-x  2 root root 4096 2010-03-16 15:33 site2

Il faut attribuer le dossier au groupe www-data

sudo chgrp www-data site2
ls -la

donne:

drwxr-xr-x  2 root www-data 4096 2010-03-16 15:33 site2

Le site2 appartient maintenant bien à www-data

Pour pouvoir consulter le site 2 depuis localhost, il faut créer un lien symbolique de /var/www/ vers /home/sitesweb/site2
cd /var/www
sudo ln -s /home/farah/sitesweb/site2 ./site2

Ici, on ne tape que ./site2 car on est déjà positionné dans /var/www/

ls -la

donne

lrwxrwxrwx  1 root    root       29 2010-03-16 15:40 site2 -> /home/sitesweb/site2/

Dans le navigateur http://localhost/site2/ donne ce qu’on attend bien:

L'alias site2 fonctionne, mais n'est pas sécurisé

Notez qu’il il faut ici sécuriser un minimum le serveur pour avoir un Forbidden (on verra plus tard).

On fait de même pour le site3

On créé ensuite 2 utilisateurs de nom « webmaster1 » et « webmaster2 »

sudo adduser  webmaster1
sudo adduser  webmaster2

Les alias avec Apache2

À supposer que nous disposions de la gestion des noms de domaine pour notre institut, nous souhaitons créer deux sites avec des noms de domaines que nous gérons.

Pour accéder au site web site2, on doit taper actuellement http://localhost/site2

Or, on veut accéder au site via l’url http://site2/ (site2  étant un domaine que nous gérons et dont nous contrôlons les DNS).

Éditons /etc/hosts

sudo gedit /etc/hosts

Dans le fichier, nous pouvons voir ce contenu notamment:

127.0.0.1 localhost
127.0.1.1 farah-laptop

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Ce qui est écrit dans les premières lignes, c’est que toute requete http://localhost/ ou http://farah-laptop renvoie vers la machine 127.0.0.1 soit le serveur lui même.

On ajoute donc les nouveaux sites:

  • 127.0.0.1         site1
  • 127.0.0.1         site2
  • 127.0.0.1         site3

Ce qui donne le fichier /etc/hosts suivant :

127.0.0.1 localhost
127.0.1.1 farah-laptop
127.0.0.1 site1
127.0.0.1 site2
127.0.0.1 site3

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Ainsi, toute adresse saisie dans un explorateur de type http://site3/ sera redirigée vers http://localhost/ (et non vers http://localhost/site3/ )

Attention, ceci n’est valable que sur la machine virtuelle (vu qu’on redirige vers localhost). Vu du réseau, la machine virtuelle doit être contactée par son adresse IP.

Pour rediriger http://site3/ vers  http://localhost/site3/ , il faut l’expliciter dans /etc/apache2/sites-available/ en copiant le fichier default et en créant un nouveau fichier du nom que l’on veut avoir, ici site3

On ajoute dans ce nouveau fichier l’alias par le code suivant en créant un nouveau fichier site1, site2 puis site3 sur la base du fichier default

On va dans le répertoire qui contient les site disponibles (sites-available)

cd /etc/apache2/sites-available/
sudo cp ./default ./site2

Dans cette précédente ligne, on copie le fichier default en un nouveau fichier site2 (il faut faire de même pour site1 et site3)

On édite le nouveau fichier, pour:

  • ajouter la ligne ServerName site2
  • modifier DocumentRoot /www/var/site2
  • modifier RootDirectory par /www/var/site2/

Ceci se fait par la commande:

sudo gedit site2

Le site2 est déclaré dans sites-available, il faut maintenant l’activer:

cd ../sites-enabled

On créé un lien symbolique pour activer le site site2 dans sites-enabled vers sites-available

sudo ln -s ../sites-availabled/site2

Enfin, il faut redémarrer le serveur web pour prendre en compte les modifications

sudo /etc/init.d/apache2 restart

Rappel: pensez à sécurisation le serveur Apache2

Référence biblio: http://doc.ubuntu-fr.org/tutoriel/securiser_apache2

Dans la partie 4, la dernière de ce tutoriel, nous verrons comment vérifier que le serveur fonctionne correctement. Pour cela, on fera un petit script php/html avec un brin d’Ajax pour que tout ça soit plus fun.

Création d’un serveur web virtualisé dédié au webmapping – partie 2

Installation du serveur web avec Apache2 et PostgreSQL

Dans Ubuntu, l’installation des logiciels se fait via APT ou APTITUDE.

Advanced Packaging Tool est un système complet et avancé de gestion de paquets, permettant une recherche facile et efficace, une installation simple et une désinstallation propre de logiciels et utilitaires. Il permet aussi de facilement tenir à jour votre distribution Ubuntu avec les paquets en versions les plus récentes et de passer à une nouvelle version de Ubuntu, lorsque celle-ci est disponible. Il prend en charge en termes de mise à jour, l’ensemble des logiciels qui sont installé par son intermédiare, ce qui rend ltout système Ubuntu très facile à maintenir au niveau des mises à jours de sécurité.

Les logiciels sont proposés sous forme de « paquets ».

Une interface graphique pour l’installation des logiciels existe. Il s’agit de Synaptic (accessible via le menu Système \ Administration \ Synaptic).

Nous allons installer le serveur web et ses différents composants par Synaptic et en lignes de commandes pour information.

Installation d’Apache2 (le serveur web)

Dans Synaptic, chercher « apache2 » puis cliquez droit sur le paquet apache2 et choisir « Sélectionnez pour installation ».

Synaptic va vous proposer d’installer un certain nombre d’autres paquets à installer, il s’agit des dépendances. Sans eux, Apache2 ne peut fonctionner correctement, vous devez donc les installer également. L’installation se déroule en deux parties: au début, Synaptic télécharge l’ensemble des paquets nécessaires pour Apapche2 puis les installe. Il peut arriver que durant la phase d’installation, Des questions vous soient posées (ce n’est pas le cas pour Apache2, mais ça l’est si vous installez par exemple MySQL). Cliquez sur « Appliquer » et valider jusqu’à la fin de l’installation.

Apache2 est installé et opérationnel.

Dans un navigateur de votre machine virtuelle, tapez http://localhost/ ou depuis votre machine hôte Windows tapez http://192.168.0.154/ (il faut en fait tapez l’adresse IP de votre VM Ubuntu trouvée grâce à la commande ifconfig).

Pour qu’Apache puisse exécuter des scripts PHP, il faut également installer le paquet PHP5.

Pour la forme, nous allons lancer cette installation en ligne de commande. Dans une console, tapez:

sudo aptitude update

La liste des paquets disponibles est mise à jour.

Notez que la commande:

sudo aptitude upgrade

… installe tous les nouveaux paquets (cela force votre système à se mettre à jour).

Recherchons tous les paquets avec le nom php

sudo aptitude search php

On voit que le paquet php5 est disponible. Installons le avec la commande:

sudo aptitude install php5

Votre serveur web Apache2 et le moteur de script PHP5 est opérationnel.

Installation de PostgreSQL, PostGIS et pgAdminIII

Nous allons installer PostgreSQL et son module spatial PostGIS en ligne de commande (décidément, nous nous enfonçons dans le purisme linuxien…):

Tapez dans une console:

sudo aptitude search postgres

Nous allons installet la version 8.3 de PostgreSQL et PostGIS d’un même coup grâce au paquet postgres8.3-postgis. Tapez dans la console:

sudo aptitude install postgresql-8.3-postgis

Notez que pour l’installation d’une base de données MySQL, il faut renseignez durant l’installation les différentes options. La version 8.4 est, au 17 juin 2010 disponible via le paquet postgresql-8.4-postgis

Installons maintenant l’interface graphique pgAdminIII permettant de gérer en mode graphique PostgreSQL. Dans la console, tapez:

sudo aptitude install pgadmin3

PgAdmin III est accessible depuis le menu Application / Programmation

Pour pouvoir utiliser les fonctions Postgresql natives dans PHP, il faut installer également, le paquet php5-pgsql depuis synaptic ou en ligne de commande par aptitude

sudo aptitude install php5-pgsql

L’installation de PostgreSQL et la configuration d’Apache2 est achevée.

Création d’un utilisateur sous PostgreSQL

Nous allons créer un utilisateur avec un rôle d’administrateur de la base de données. Il sera nommé formation, son mot de passe sera aussi formation. En ligne de commande, dans une console, tapez:

sudo -s -u postgres
psql
CREATE USER formation ;
ALTER ROLE formation WITH createdb ;
ALTER USER formation WITH encrypted password 'formation' ;
\q

Création d’une base de données sous PostgreSQL

Nous allons créer une base de données nommée formation pour l’utilisateur précédemment créé:

CREATE DATABASE formation OWNER formation ;

Lancer pgAdmin III et créer une nouvelle connexion avec les données suivantes:

  • Hôte: localhost
  • port TCP: 5432
  • Base de maintenance: postgres
  • Utilisateur: formation
  • Mot de passe: formation

Vous avez alors accès à tout ce qui est nécessaire pour gérer votre propre base de données PostgreSQL.

Gérer le super utilisateur de votre serveur de base de données Postgresql

Par défaut le mot de passe du gestionnaire de base de données (utilisateur nommé « postgres ») est celui de l’utilisateur sudo d’Ubuntu.

Il est très fortement conseillé, en production, de choisir un mot de passe différent.

Pour cela, tapez :

sudo -s -u postgres
psql
ALTER USER postgres WITH encrypted password ‘lenouveaumotdepasse’ ;
\q

Remarque : Le fait d’attribuer (ou de forcer si vous voulez…) un mot de passé different du sudo d’Ubuntu, vous permet d’utiliser l’utilisateur postgres via l’interface graphique pgAdminIII. Si vous n’avez pas attribué un mot de passe à postgres (donc si vous utiliser pour vous connecter à postgres le mot de passe sudo), alors vous ne pourrez vous connecter via pgAdminIII à votre serveur postgresql.

Remarque : si vous devez donner des droits à un utilisateur tiers sur une base de donnée et que cet utilisateur n’est pas le propriétaire de la base de données en question, vous devez alors, en tant qu’utilisateur ‘postgres’, créer un rôle de groupe, puis spécifier que le rôle (de l’utilisateur, dit rôle de connexion) appartient au rôle de groupe. Enfin il faut donner les droits d’usage (SELECT ou INSERT ou …) de la base de façon générale (clic droit sur « Propriétés… » de la base), ou des tables (clic droit sur « Propriétés… » de Tables (xxx)), ou d’une table (clic droit sur « Propriétés… » de la table) au groupe de rôle et tout ceci directement depuis l’interface de PgAdminIII.


Dans la partie 3, nous verrons comment mettre en place les sites web (les alias)