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.
C'est la méthode la plus simple, si vous n'avez pas de besoins complexes (comme par exemple des modules spécifiques).
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, 13 et 15.
Il est possible, sur EL 9 d'utiliser PostgreSQL 13 et 15.
Pour EL 8 :
Listez les modules PostgreSQL disponibles :
Si on veut utiliser une autre version que la version 10, on va activer le module adéquat.
Par exemple, pour postgresql 15 :
Il est possible également d'installer Postgres depuis les dépôts officiels.
Pour cela, on va installer le dépôt de postgres :
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 va installer les paquets correspondants, en spécifiant le numéro de version souhaité dans le nom du paquet.
Pour plus de simplicité dans ce tuto on va définir une variable avec la version de postgre souhaitée :
Désactivez le module postgres du système :
Ensuite on installe Postgres :
On initialise le moteur de base de données.
Si on a installé depuis les dépôts de la distribution :
Si on a installé depuis les dépôts postgre :
Il reste maintenant à activer et démarrer le service postgres.
Si on a installé depuis les dépôts de la distribution :
Si on a installé depuis les dépôts postgre :
On peut tester la connexion :
Pour vérifier le bon fonctionnement, on pourra lister les utilisateurs par exemple :
Il est possible de changer le mot de passe de l'utilisateur postgres (apr défaut sur postgres) :
Et on change le mot de passe avec la commande suivante :
Le fichier de configuration de PostgreSQL est postgresql.conf.
On retrouvera aussi le fameux pg_hba.conf ici pg_hba.conf.
Si l'installation a été faite depuis les dépôts de la distribution, les fichiers sont situés dans : /var/lib/pgsql/data/
Si l'installation a été faite depuis les dépôts de postgre, les fichiers sont situés dans : /var/lib/pgsql/$PGVER/data/
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 postgresql.conf et décommenter bind-address :
Ne pas oublier de redémarrer 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 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
Avec les dépôts de la distribution
C'est la méthode la plus simple, si vous n'avez pas de besoins complexes (comme par exemple des modules spécifiques).
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, 13 et 15.
Il est possible, sur EL 9 d'utiliser PostgreSQL 13 et 15.
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 postgresql 15 client, server [d] PostgreSQL server and client module Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
Si on veut utiliser une autre version que la version 10, on va activer le module adéquat.
Par exemple, pour postgresql 15 :
Code BASH :
dnf module switch-to postgresql:15
Avec les dépôts de Postgre
Il est possible également d'installer Postgres depuis les dépôts officiels.
Pour cela, on va installer le dépôt de postgres :
Code BASH :
dnf install https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %rhel)-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Installation de PostgreSQL
Depuis les dépôts de la distribution
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
Depuis les dépôts Postgre
On va installer les paquets correspondants, en spécifiant le numéro de version souhaité dans le nom du paquet.
Pour plus de simplicité dans ce tuto on va définir une variable avec la version de postgre souhaitée :
Code BASH :
PGVER="14"
Désactivez le module postgres du système :
Code BASH :
dnf -y module disable postgresql
Ensuite on installe Postgres :
Code BASH :
dnf install postgresql$PGVER-server
Configuration des services
Initialisation du moteur de base de données
On initialise le moteur de base de données.
Si on a installé depuis les dépôts de la distribution :
Code BASH :
postgresql-setup --initdb
Si on a installé depuis les dépôts postgre :
Code BASH :
/usr/pgsql-$PGVER/bin/postgresql-$PGVER-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.
Si on a installé depuis les dépôts de la distribution :
Code BASH :
systemctl enable --now postgresql.service
Si on a installé depuis les dépôts postgre :
Code BASH :
systemctl enable --now postgresql-$PGVER.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
Changer le mot de passe de postgres
Il est possible de changer le mot de passe de l'utilisateur postgres (apr défaut sur postgres) :
Code BASH :
su -lc 'psql' postgres
Et on change le mot de passe avec la commande suivante :
Code SQL :
\password postgres
Fichiers de configuration
Le fichier de configuration de PostgreSQL est postgresql.conf.
On retrouvera aussi le fameux pg_hba.conf ici pg_hba.conf.
Si l'installation a été faite depuis les dépôts de la distribution, les fichiers sont situés dans : /var/lib/pgsql/data/
Si l'installation a été faite depuis les dépôts de postgre, les fichiers sont situés dans : /var/lib/pgsql/$PGVER/data/
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 postgresql.conf et décommenter bind-address :
Code TEXT :
listen_addresses = '*'
Ne pas oublier de redémarrer 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" :
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 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