Gestion des bases de données avec EoleDB
EoleDB est disponible depuis la version 2.5.2 d'EOLE. C'est une re-implémentation de l'ancien gestionnaire des bases de données EOLE (eole-sql
) dont les objectifs principaux sont :
n'utiliser qu'un seul fichier de configuration ;
supporter nativement plusieurs types de bases de données (MySQL, PostgreSQL, SQLite, ...) ;
supporter nativement l'externalisation des bases de données sur d'autres serveurs ;
ne plus avoir à fournir des scripts python dans les paquets d'application web du projet EOLE pour pouvoir générer ou mettre à jour des bases de données (cf eole-sql :
/usr/share/eole/applications/gen/
,/usr/share/eole/applications/passwords/
,/usr/share/eole/applications/updates/
).
EoleDB rend possible l'externalisation des bases de données d'un module EOLE.
Remarque
Pour le moment, EoleDB gère uniquement les bases de données MySQL[1] et PostgreSQL[2].
Installation d'EoleDB
L'installation d'EoleDB se fait manuellement sur le serveur qui héberge l'application web avec la commande apt-eole :
# apt-eole install eole-db
Remarque
Le paquet eole-db
est pré-installé sur le module Scribe depuis la version 2.6.0.
Configuration d'EoleDB
Par défaut le serveur de base de données est paramétré comme étant local. Dans le cas où le serveur est distant quelques variables sont à renseigner.
Adresse du serveur de base de données
: adresse IP, nom de machine ou nom de domaine du serveur de base de données distant. Cette valeur est utilisée pour toutes les applications web qui ne définiront pas elles-mêmes un serveur de base de données.Port du serveur de base de données
: port du serveur de base de données utilisé, par exemple3306
pour le serveur MySQL fourni par EOLE.Nom d'utilisateur d'administration
: identifiant du gestionnaire de la base de données distante.Fichier de mot de passe
: chemin d'accès vers le fichier qui contient le mot de passe du gestionnaire, par exemple/root/bdpass.txt
. Ce fichier doit être accessible par EoleDB, idéalement le fichier doit avoir les droits 600.Machines qui peuvent utiliser le serveur de BDD
: permet d'autoriser des machines à accéder à l'administration des bases distantes #fixme, si rien n'est renseigné l'adresse IP du serveur utilisant EoleDB est ajoutée automatiquement dans le fichier de configuration.
Exemple
dbhost: 192.168.0.24
dbport: 3306
dbroot: root
client_hosts: ['192.168.0.26']
dbrootpwd: /root/bdpass.txt
Le fichier /root/bdpass.txt
est un fichier à créer, il contient le mot de passe en clair du gestionnaire. Ce fichier doit être accessible par EoleDB, idéalement le fichier doit avoir les droits 600.
Configuration d'une application web
Les applications web disponibles sur les modules EOLE fournissent un fichier de configuration au format YAML[3] qui surcharge le fichier de configuration principal d'EoleDB.
Ces fichiers de configuration spécifiques aux applications redéfinissent le comportement par défaut d'EoleDB, ils sont stockés dans /etc/eole/eole-db.d/
.
Pour des raisons pratiques, EoleDB réalise le changement de mots de passe dans les fichiers de configuration des applications.
Les mots de passe sont changés à chaque lancement des commandes eole_db_gen et reconfigure.
Pour utiliser EoleDB il faut mettre en place un fichier de configuration portant l'extension .yml
dans le répertoire /etc/eole/eole-db.d/
en utilisant :
dbhost : définition de l'adresse du serveur de base de données utilisé par l'application (surcharge la valeur par défaut définie dans
/etc/eole/eole-db.conf
) ;dbport : définition du port d'écoute du serveur de base de données utilisé par l'application (surcharge la valeur par défaut définie dans
/etc/eole/eole-db.conf
) ;dbroot : définition du nom de l'utilisateur ayant des droits "Administrateur" sur le serveur de base de données utilisé par l'application (surcharge la valeur par défaut définie dans
/etc/eole/eole-db.conf
) ;dbrootpwd : définition du mot de passe par défaut de l'utilisateur défini par l'option dbroot (surcharge la valeur par défaut définie dans
/etc/eole/eole-db.conf
) ;dbtype : définition du type de base de données par défaut du serveur de base de données (mysql, pgsql, sqlite, ...) ;
dbname : nom de la base de données de l'application ;
dbuser : nom de l'utilisateur utilisé par l'application pour accéder à la base définie dans dbname ;
dbpass : mot de passe utilisé par l'application pour l'utilisateur défini dans dbuser ;
createscript : script SQL de création de la base de données définie dans dbname ;
sqlscripts : scripts SQL a lancer après le script de création défini dans createscript ;
updatescripts : scripts de mise à jour exécutés sur la base définie dans dbname (exécutés uniquement si la base existe déjà) ;
pwd_files : définition des fichiers à mettre à jour après le changement du mot de passe de l'utilisateur défini dans dbuser.
Exemple
dbtype: mysql
dbname: taskfreak
dbuser: taskfreak
dbpass: "53nrgk>as="
createscript: "/usr/share/eole/db/taskfreak/gen/taskfreak-create.sql"
pwd_files:
- {file: '/var/www/html/taskfreak/include/config.php',
pattern: '$dbpass="',
owner: 'www-data:www-data',
mod: '600' }
Truc & astuce
L'option pwd_files accepte une liste de dictionnaires au format python.
Exemple
pwd_files:
- {file: '/var/www/html/posh/includes/config.inc.php',
container: 'web',
pattern: 'define("__PASS","',
end_pattern: ');',
owner: 'root:www-data',
mod: '660' }
- {file: '/usr/share/envole/eoledb/posh',
pattern: 'dbpassPOSH="',
owner: 'root:root',
mod: '600' }
Liste des options possibles d'un dictionnaire pwd_files :
file : chemin complet du fichier à modifier (option obligatoire) ;
pattern : modèle de ligne qui contient le mot de passe entre " (option obligatoire) ;
end_pattern : permet de définir le ou les caractères à ajouter après le pattern ;
owner : propriétaire au format "user:group", à définir après la modification du mot de passe ;
mod : droits au format Unix (ex: 600) à définir après la modification du mot de passe ;
container : conteneur ou se trouve le fichier à modifier.
Attention
L'option pattern permet de définir le modèle de ligne qui contient le mot de passe, il est important de définir la totalité de ce qui précède le mot de passe dans la ligne.
Exemple
Ligne à changer dans le fichier de configuration /chemin/monFichier.conf
:
password: "JeSuiSunMauvaisPassowrd"
La valeur de l'option pattern doit être password: "
Extrait du fichier YAML :
pwd_files:
- {file: "/chemin/monFichier.conf",
pattern: 'password: "'
EoleDB détermine automatiquement qu'il faut faire suivre, après remplacement, la valeur de pattern par le caractère ". Aussi si le caractère ouvrant est ' il faut préférer le format suivant :
pattern: "password: '"
EoleDB détermine automatiquement qu'il faut faire suivre la valeur de pattern par le caractère '.
EoleDB détecte également si le caractère ; est requis en fin de ligne et l'ajoute après le pattern.
Truc & astuce
L'option end_pattern permet de maîtriser des cas non gérés par EoleDB, exemple
define('DBPASS': 'JeSuisUnMauvaisPassword');
pattern : "define('DBPASS': '"
end_pattern: ");",
Pour une application 3 modes de gestion de la base de données sont possibles et sont fonctions de la configuration :
mode default : l'application utilise la configuration globale d'EoleDB ;
mode local : l'application force l'utilisation d'un serveur de base de données local ;
mode externe : l'application force l'utilisation d'un serveur de base de données et définit complètement la configuration.
Le mode default
Dans le mode default, l'application ne prend donc aucune liberté et sa configuration repose exclusivement sur la configuration d'EoleDB saisie dans l'onglet Eoledb
de l'interface de configuration du module.
Exemple
dbtype: mysql
dbname: taskfreak
dbuser: taskfreak
dbpass: "53nrgk>as="
createscript: "/usr/share/eole/db/taskfreak/gen/taskfreak-create.sql"
pwd_files:
- {file: '/var/www/html/taskfreak/include/config.php',
pattern: '$dbpass="',
owner: 'www-data:www-data',
mod: '600' }
Attention
Si le comportement d'EoleDB est changé, celui-ci impactera l'application.
Le mode local
Dans le mode local la configuration de l'application à utiliser un serveur de base de données local, il faut donc ajouter dans la configuration dbhost et client_hosts.
La configuration d'EoleDB saisie dans l'onglet Eoledb
de l'interface de configuration du module est ignorée.
Exemple
---
dbhost: 127.0.0.1
dbtype: mysql
dbname: taskfreak
dbuser: taskfreak
dbpass: "task;Freak"
client_hosts: ["127.0.0.1", "localhost"]
createscript: "/usr/share/eole/mysql/taskfreak/gen/taskfreak-create.sql"
pwd_files:
- {file: '/var/www/html/taskfreak/include/config.php',
pattern: '$dbpass="',
owner: 'www-data:www-data',
mod: '600' }
Le mode externe
Dans le mode externe l'application définie complètement le serveur externe de base de données à utiliser, il faut donc ajouter dans la configuration, en plus de dbhost et client_hosts ajouté dans le mode local, dbroot et dbrootpwd.
La configuration d'EoleDB saisie dans l'onglet Eoledb
de l'interface de configuration du module est ignorée.
Exemple
---
dbhost: 192.168.45.34
dbport: 3309
dbroot: adminDB
dbrootpwd: /root/.secrets-mydb
dbtype: mysql
dbname: taskfreak
dbuser: taskfreak
dbpass: "task;Freak"
client_hosts: ["127.0.0.1", "localhost", "192.168.0.14" ]
createscript: "/usr/share/eole/mysql/taskfreak/gen/taskfreak-create.sql"
pwd_files:
- {file: '/var/www/html/taskfreak/include/config.php',
pattern: '$dbpass="',
owner: 'www-data:www-data',
mod: '600' }
Mode conteneur
Pour fonctionner dans un conteneur EOLE, sur le module AmonEcole par exemple, l'application doit utiliser le mode local avec une configuration adaptée.
Configuration du serveur distant
Tester la connexion distante au serveur de base de données
# mysql -u admin -h <adresseDuServeur> -p<motDePasse>
Serveur Eolebase
Le serveur EOLE peut être l'un des modules ou un Eolebase.
Installer le paquet eole-adminer
, le système de dépendance se charge d'installer les paquets nécessaires eole-web
et eole-mysql
:
root@eolebase:~# apt-eole install eole-adminer
Éditer le configuration du serveur à l'aide de la commande de l'interface de configuration du serveur :
root@eolebase:~# gen_config
Dans l'onglet t Applications web
, la variable minimum à renseigner est Nom de domaine des applications web (sans http://)
, il est possible d'activer l'application Adminer et de la choisir comme application web par défaut.
Reconfigurer le serveur à l'aide de la commande reconfigure :
root@eolebase:~# reconfigure
Vérifier dans un navigateur web que le serveur répond.
Modifier le mot de passe par défaut du compte root mysql avec la commande mysql_pwd.py :
root@eolebase:~# mysql_pwd.py
## Réinitialisation des mots de passe Mysql ##
Nouveau mot de passe root mysql : eole21
Voulez-vous que les autres mots de passe soient modifiés ? [oui/non][non] : non
root@eolebase:~#
Se connecter à MySQL avec l'utilisateur root :
root@eolebase:~# mysql -u root -h localhost -peole21
Créer un utilisateur autre que root
(le mot de passe du compte root
est généré à chaque reconfigure) et lui donner les privilèges et l'autorisation de se connecter depuis le serveur hébergeant EoleDB :
mysql> grant all privileges on *.* to admin@<IPServeurEoleDB> identified by "eole21";
mysql> quit
Pour ouvrir le port il faut faire un dictionnaire personnalisé 00_mysql.xml
à placer dans /usr/share/eole/creole/dicos/local/
<creole>
<files>
<service_access service='mysql'>
<port>3306</port>
<tcpwrapper>mysqld</tcpwrapper>
</service_access>
</files>
<variables />
<constraints />
<help />
</creole>
<!-- vim: ts=4 sw=4 expandtab
-->
Pour qu'il soit pris en compte il faut procéder à la reconfiguration du serveur :
root@eolebase:~# reconfigure
Vérifier la connexion entre le serveur hébergeant EoleDB et le serveur Eolebase :
root@scribe:~# mysql -u admin -h <IPServeurEoleDB> -peole21
mysql>
Remarque
À partir de la version 2.6.1 il n'est plus nécessaire de procéder à l'ouverture de port à l'aide d'un dictionnaire. En effet, depuis cette version, l'onglet expert Mysql
permet de déclarer des adresses IP ou des réseaux autorisés à accéder à MySQL.
Serveur non EOLE
Exemple d'une distribution GNU/Linux supportant le système de paquet debian.
Installation du serveur de base de données :
# apt-get install mysql-server
Se connecter à MySQL avec l'utilisateur root :
# mysql -u root -h localhost -p<motDePasse>
Créer un utilisateur autre que root
(le mot de passe du compte root
est généré à chaque reconfigure) et lui donner les privilèges et l'autorisation de se connecter depuis le serveur hébergeant EoleDB :
mysql> grant all privileges on *.* to admin@<IPServeurEoleDB> identified by "<motDePasse>";
mysql> quit
Vérifier la connexion entre le serveur hébergeant EoleDB et le serveur hébergeant la base de données :
root@scribe:~# mysql -u admin -h <IPServeurEoleDB> -peole21
mysql>
Appliquer la configuration EoleDB
Pour que les changements soient pris en compte il faut exécuter la commande eole_db_gen.
L'appel de cette commande eole_db_gen doit au minimum préciser le répertoire utilisé pour sauvegarder les fichiers modifiés par EoleDB avec l'option -b.
Exemple
root@scribe:~# eole_db_gen -b /var/backup/eole-db
TASKFREAK :
>>> Passwords [OK]
>>> Create [OK]
>>> Update [OK]
root@scribe:~#
La commande utilise les fichiers de configuration par défaut d'eoleDB, mais il est possible de préciser d'autres fichiers de configuration :
-c : permet de définir un fichier de configuration a utiliser à la place de
/etc/eole/eole-db.conf
-d : permet de définir un répertoire différent de
/etc/eole/eole-db.d/
et qui contient les fichiers de configuration des applications
Truc & astuce
Pour connaître les différents paramètres de la commande eole_db_gen :
# eole_db_gen --help