Préparation et configuration de postgreSQL.


Ce chapitre traite de l'installation de la base et des utilisateurs SQL qui contiendra la liste des domaines virtuels, des utilisateurs de ces domaines, des alias et d'autres paramètres (quotas, drapeaux).
Note: si vous souhaitez utiliser mySQL, il vous suffit d'adapter la syntaxe, les tables et les requêtes resteront (presque) les mêmes.
  1. Installation de postgreSQL

    Utilisez votre gestionnaire de paquetage habituel pour installer postgreSQL ou recompilez le depuis les sources. Dans cette documentation postgre est installé sous /usr/local/pgsql/ la base sous /usr/local/pgsql/data. Adaptez à votre cas.

  2. Création de la base, des tables et des utilisateurs SQL

    Pensez à faire attention à ne pas mélanger les différentes sortes d'utilisateurs.


    Nous allons utiliser une base "vmail" qui contient trois tables: L'utilisateur unix sous lequel est lancé le SGBDR s'appelle "postgres". Nous allons initialiser la base de données, la démarrer et créer la base vmail sous cet uid unix.

    su postgres
    /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
    /usr/local/pgsql/bin/pg_ctl start -D /usr/local/pgsql/data -o -i
    /usr/local/pgsql/bin/createdb vmail
    
    Le pg_ctl démarre la base, avec l'option réseau (-o -i). Il faut maintenant que postgreSQL demande un mot de passe pour les connections réseaux. Modifiez votre pg_hba.conf de cette façon:
    # IPv4-style local connections:
    host    all         all         127.0.0.1         255.255.255.255   password
    

    Pour se connecter, vous pouvez utiliser le programme psql, avec l'utilisateur postgres.

    /usr/local/pgsql/bin/psql -U postgres vmail
    

    La table domaine contiendra

    La table boites contiendra La table alias contiendra Les utilisateurs de la base de données sont au nombre de deux: Tous les champs ne sont ni nécéssaires, ni forcément utilisés dans cette documentation. Il s'agit juste d'avoir une base suffisement complète pour tester différentes configurations. Dans un cas réel, vous compléterez, modifierez ou adapterez cette base.

    CREATE TABLE domaine (nom_domaine VARCHAR(80),
    	unix_user INT,
    	chemin VARCHAR(80),
    	max_boite INT,
    	drapeau CHAR,
    	PRIMARY KEY (nom_domaine));
    
    CREATE TABLE boites (nom_domaine VARCHAR(80),
    	email VARCHAR(120),
    	pw VARCHAR(40),
    	nom_boite VARCHAR(40),
    	quota INT,
    	drapeau CHAR,
    	PRIMARY KEY (email),
    	FOREIGN KEY (nom_domaine) REFERENCES domaine);
    
    CREATE TABLE alias (nom_domaine VARCHAR(80),
    	mail_alias VARCHAR(120),
    	email VARCHAR(120),
    	FOREIGN KEY (nom_domaine) REFERENCES domaine,
    	FOREIGN KEY (email) REFERENCES boites);
    
    CREATE USER lecteur password 'lire';
    GRANT SELECT ON domaine, boites, alias to lecteur;
    

    Nous allons créer pour l'exemple

    INSERT INTO domaine VALUES ('boum.org', 5000, 'boum.org', 255, 'O');
    INSERT INTO domaine VALUES ('groumpf.org', 5000, 'groumpf.org', 255, 'O');
    
    INSERT INTO boites VALUES ('boum.org','boum@boum.org','boum','boum',0,'O');
    INSERT INTO boites VALUES ('boum.org','kevin@boum.org','$1$eUx/YV93$MMaRJxzoifG8ekkHTLIRD/','kevin',4096,'O');
    INSERT INTO boites VALUES ('groumpf.org','kevin@groumpf.org','$1$eUx/YV93$MMaRJxzoifG8ekkHTLIRD/','kevin',0,'O');
    
    INSERT INTO alias VALUES ('boum.org','all@boum.org','boum@boum.org');
    INSERT INTO alias VALUES ('boum.org','all@boum.org','kevin@boum.org');
    INSERT INTO alias VALUES ('groumpf.org','all@groumpf.org','kevin@groumpf.org');
    

    Ne soyez pas surpris des champs 'pw' de la table boites. L'explication se trouve dans le chapitre concernant dovecot. D'autre part, $1$eUx/YV93$MMaRJxzoifG8ekkHTLIRD/ est le crypt du mot "secret" (voir man crypt).

  3. Vérifications

    Votre base SQL doit donc être nourrie, et accepter les mots de passe. Nous allons nous connecter en tant qu'utilisateur SQL "lecteur" (mot de passe: "lire").

    psql -U lecteur -h 127.0.0.1 mail
    Mot de passe : 
    
    vmail=> select * from domaine;
    +-------------+-----------+-------------+-----------+---------+
    | nom_domaine | unix_user |   chemin    | max_boite | drapeau |
    +-------------+-----------+-------------+-----------+---------+
    | boum.org    |      5000 | boum.org    |       255 | O       |
    | groumpf.org |      5000 | groumpf.org |       255 | O       |
    +-------------+-----------+-------------+-----------+---------+
    (2 lignes)
    
    vmail=> select * from boites;
    +-------------+-------------------+------------------------------------+-----------+-------+---------+
    | nom_domaine |       email       |                 pw                 | nom_boite | quota | drapeau |
    +-------------+-------------------+------------------------------------+-----------+-------+---------+
    | boum.org    | boum@boum.org     | boum                               | boum      |     0 | O       |
    | boum.org    | kevin@boum.org    | $1$eUx/YV93$MMaRJxzoifG8ekkHTLIRD/ | kevin     |     0 | O       |
    | groumpf.org | kevin@groumpf.org | $1$eUx/YV93$MMaRJxzoifG8ekkHTLIRD/ | kevin     |     0 | O       |
    +-------------+-------------------+------------------------------------+-----------+-------+---------+
    (3 lignes)
    
    vmail=> select * from alias;
    +-------------+-----------------+-------------------+
    | nom_domaine |   mail_alias    |       email       |
    +-------------+-----------------+-------------------+
    | boum.org    | all@boum.org    | boum@boum.org     |
    | boum.org    | all@boum.org    | kevin@boum.org    |
    | groumpf.org | all@groumpf.org | kevin@groumpf.org |
    +-------------+-----------------+-------------------+
    (3 lignes)
    

    Nous disposons maintenant d'une base de données postgreSQL qui nous servira de base pour les tests futurs. Dans les chapitres suivants nous considérerons que la base est construite sur ce modèle. Pour l'ensemble des chapitres suivants il est obligatoire d'avoir accès en permanence à la base de données. Eventuellement, voir avec votre système d'exploitation comment lancer cette base automatiquement au démarrage de la machine.

Chapitre précédent
Retour à l'index
Chapitre suivant