boum.org a besoin d'argent :
franGiPane overview
La réflexion qui a mené à tout ça :
OverViewDiscussion.
A quick description
We don't want to rely
on "UI" scripts for data consistency, but instead put
all data
consistency constraints inside the DB engine. We don't want to have
any data duplication, too. Moreover, even the file-system state /
database state consistency (maildirmake, etc.) will be done by the DB
engine itself.
PostgreSQL is the only free DB engine that provides all the necessary
(advanced) relational database features we need : really enforced
consistency checks, query rewriting rules, schemas to separate
different parts of the DB, views to build dynamically the
pseudo-tables that are given to Postfix et al., triggers for the
file-system stuff, different procedural languages such as Perl/Python
usable for writing functions, rules, triggers and constraints inside
the DB engine. Thanks to the views, we were able to abstract the DB
schema a lot from the low-level final tables that our server software
wants to be fed with ; thanks to the views + foreign keys + JOIN, no
data duplication at all is needed.
On this basis, the "UI" scripts for adding/removing/editing e-mail
accounts / lists / web sites / etc. will only have to run a few SQL
queries and interpret the
PostgreSQL's output. They thus will be very
short, and won't even be able to write inconsistent data into
the database. Everything could be even done from the
PostgreSQL
phpmyadmin equivalent, actually, since one single SQL query is enough
to create a mailbox, for example. We're not even sure we'll write any
script outside the DB engine, actually.
La base de tout : une base de données relationnelle
Le constat, c'est que sur un serveur tel qu'est prévu boum, on a plein
de services différents : au moins réception de mails, consultation de
mails, DNS, web. Ces services sont fournis par des applications
différentes, respectivement (par exemple)
Postfix,
Apache.
Or, toutes ces applications sont indépendantes et, par défaut, sont toutes
configurées avec des fichiers de formats les plus diverses.
Ceci pose tout un tas de problèmes : la première est la duplication
d'information. Ça augmente les chances de fautes de frappes, ou
d'oublier de mettre à jour un truc en même temps que le reste. L'autre
souci, c'est l'impossibilité de déléguer, puisque (en gros) il faut
être root pour faire les modifs.
Comment résoudre ça ? L'idée c'est de demander à tous ces programmes
d'aller chercher l'information au même endroit. Une des solutions la
plus flexible et pas trop difficile à mettre en oeuvre est d'utiliser
une base de données relationnelle :
PostgreSQL.
On veut gérer le plus possible au niveau BDD la consistance des données qui y
sont stockées, plutôt que de mettre (et d'oublier) les checks nécessaires dans
le code de franGiPane.
Pas de délégation de pouvoir
Dans Frangipane, il n'y a pas d'échelon hiérarchique intermédiaire entre les administrateurices du système (les root, quoi) et les utilisateurices (celleux qui ont une adresse email, un site web, etc.).