Red Hat, Alma Linux : Installer et configurer un serveur de base de données PostgreSQL (8 et 9)
Table des matières
Dans cet article, nous allons voir comment mettre en place un serveur de base de données PostgreSQL sur RedHat Enterprise Linux 8 ou 9 (la procédure est identique.
Les manipulations proposées sont valides pour les dérivées de RHEL telles qu'Alma Linux, Rocky Linux ou Oracle Linux.
Dans EL 8, par défaut, PostgreSQL est proposé en version 10.
Dans EL 9, par défaut, PostgreSQL est proposé en version 13.
Il est possible, sur EL 8 d'utiliser PostgreSQL 9.6, 12 et 13.
Pour EL 8 :
Listez les modules PostgreSQL disponibles :
Désactivez le module 10 :
Activez le module 13 par exemple :
On va installer les 2 paquets qui vont nous fournir le serveur de base de données et les clients en ligne de commande :
On initialise le moteur de base de données :
Il reste maintenant à activer et démarrer le service postgres :
On peut tester la connexion :
Pour vérifier le bon fonctionnement, on pourra lister les utilisateurs par exemple :
Le fichier de configuration de PostgreSQL est /var/lib/pgsql/data/postgresql.conf.
On retrouvera aussi le fameux pg_hba.conf ici /var/lib/pgsql/data/pg_hba.conf
Dans le cas d'un serveur PostgreSQL mutualisé, les applications ne seront pas sur le serveur de base de données.
Dans un premier temps, on va autoriser dans le pare-feu le protocole postgresql (port 5432) (ici si la zone de l'interface est public) et on recharge ce dernier :
On va également paramétrer le service PostgreSQL afin qu'il écoute sur toutes les adresses.
On va modifier le fichier /var/lib/pgsql/data/postgresql.conf et décommenter bind-address :
On redémarre ensuite le service :
Ensuite, il nous reste à créer des utilisateurs qui pourront se connecter à distance.
Voici un exemple de commande CREATE USER avec l'utilisateur "adrien" :
Pour donner des droits sur une base de données, c'est la commande GRANT, exemple ici avec les pleins droits sur la base baseadrien pour l'utilisateur adrien précédemment créé :
On va gérer aussi les droits sur les utilisateurs dans le fichier /var/lib/pgsql/data/pg_hba.conf :
Pour autoriser les connexions de adrien sur la base baseadrien depuis le réseau 192.168.21.0/24 :
Et on recharge la config du serveur :
Testons les accès, depuis la machine cliente concernée sur le serveur précédemment installé (exemple depuis ma machine 192.168.21.200 ) :
On peut lister les bases de données :
On voit bien en changeant de base que je n'y ai pas accès :
Un guide des commandes de base est disponible ici : https://www.linuxtricks.fr/wiki/postgresql-memo-des-commandes-sql
Introduction
Dans cet article, nous allons voir comment mettre en place un serveur de base de données PostgreSQL sur RedHat Enterprise Linux 8 ou 9 (la procédure est identique.
Les manipulations proposées sont valides pour les dérivées de RHEL telles qu'Alma Linux, Rocky Linux ou Oracle Linux.
Sélection de la version souhaitée via les modules
Dans EL 8, par défaut, PostgreSQL est proposé en version 10.
Dans EL 9, par défaut, PostgreSQL est proposé en version 13.
Il est possible, sur EL 8 d'utiliser PostgreSQL 9.6, 12 et 13.
Pour EL 8 :
Listez les modules PostgreSQL disponibles :
Code BASH :
dnf module list postgresql
Code TEXT :
Name Stream Profiles Summary postgresql 9.6 client, server [d] PostgreSQL server and client module postgresql 10 [d] client, server [d] PostgreSQL server and client module postgresql 12 client, server [d] PostgreSQL server and client module postgresql 13 client, server [d] PostgreSQL server and client module Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
Désactivez le module 10 :
Code BASH :
dnf module disable postgresql:10
Activez le module 13 par exemple :
Code BASH :
dnf module enable postgresql:13
Installation des prérequis
On va installer les 2 paquets qui vont nous fournir le serveur de base de données et les clients en ligne de commande :
Code BASH :
dnf install postgresql-server postgresql
Configuration des services
Initialisation du moteur de base de données
On initialise le moteur de base de données :
Code BASH :
postgresql-setup --initdb
Code :
* Initializing database in '/var/lib/pgsql/data'
* Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log
Il reste maintenant à activer et démarrer le service postgres :
Code BASH :
systemctl enable --now postgresql.service
On peut tester la connexion :
Code BASH :
su -lc 'psql' postgres
Pour vérifier le bon fonctionnement, on pourra lister les utilisateurs par exemple :
Code SQL :
\du
Fichier de configuration my.cnf
Le fichier de configuration de PostgreSQL est /var/lib/pgsql/data/postgresql.conf.
On retrouvera aussi le fameux pg_hba.conf ici /var/lib/pgsql/data/pg_hba.conf
Configurer un accès distant
Dans le cas d'un serveur PostgreSQL mutualisé, les applications ne seront pas sur le serveur de base de données.
Dans un premier temps, on va autoriser dans le pare-feu le protocole postgresql (port 5432) (ici si la zone de l'interface est public) et on recharge ce dernier :
Code BASH :
firewall-cmd --permanent --zone=public --add-service=postgresql firewall-cmd --reload
On va également paramétrer le service PostgreSQL afin qu'il écoute sur toutes les adresses.
On va modifier le fichier /var/lib/pgsql/data/postgresql.conf et décommenter bind-address :
Code BASH :
vi /var/lib/pgsql/data/postgresql.conf
Code TEXT :
listen_addresses = '*'
On redémarre ensuite le service :
Code BASH :
systemctl restart postgresql
Ensuite, il nous reste à créer des utilisateurs qui pourront se connecter à distance.
Voici un exemple de commande CREATE USER avec l'utilisateur "adrien" :
Code SQL :
CREATE USER adrien WITH PASSWORD 'MotDePasse';
Pour donner des droits sur une base de données, c'est la commande GRANT, exemple ici avec les pleins droits sur la base baseadrien pour l'utilisateur adrien précédemment créé :
Code SQL :
GRANT ALL PRIVILEGES ON DATABASE baseadrien TO adrien;
On va gérer aussi les droits sur les utilisateurs dans le fichier /var/lib/pgsql/data/pg_hba.conf :
Code BASH :
vi /var/lib/pgsql/data/pg_hba.conf
Pour autoriser les connexions de adrien sur la base baseadrien depuis le réseau 192.168.21.0/24 :
Code TEXT :
host baseadrien adrien 192.168.21.0/24 md5
Et on recharge la config du serveur :
Code BASH :
su -lc 'psql -c "SELECT pg_reload_conf()'' postgres
Testons les accès, depuis la machine cliente concernée sur le serveur précédemment installé (exemple depuis ma machine 192.168.21.200 ) :
Code BASH :
psql -h 192.168.221.53 -d baseadrien -U adrien
On peut lister les bases de données :
Code TEXT :
adrien=> \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+------------+------------+----------------------- adrien | postgres | UTF8 | fr_FR.utf8 | fr_FR.utf8 | =Tc/postgres + | | | | | postgres=CTc/postgres+ | | | | | adrien=CTc/postgres adrien2 | postgres | UTF8 | fr_FR.utf8 | fr_FR.utf8 | postgres | postgres | UTF8 | fr_FR.utf8 | fr_FR.utf8 | template0 | postgres | UTF8 | fr_FR.utf8 | fr_FR.utf8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | fr_FR.utf8 | fr_FR.utf8 | =c/postgres + | | | | | postgres=CTc/postgres (5 rows)
On voit bien en changeant de base que je n'y ai pas accès :
Code TEXT :
adrien=> \c adrien2 connection to server at "192.168.221.53", port 5432 failed: FATAL: aucune entrée dans pg_hba.conf pour l'hôte « 192.168.221.53 », utilisateur « adrien », base de données « adrien2 », SSL inactif Previous connection kept
Plus d'informations sur PostgreSQL
Un guide des commandes de base est disponible ici : https://www.linuxtricks.fr/wiki/postgresql-memo-des-commandes-sql