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, 15 et 16.
Listez les modules PostgreSQL disponibles :
Exemple de retour sur RHEL 8 :
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 :
Il y a un dépôt par version de postgres. On pourra désactiver les repos Postgres :
Et activer juste celui de la version qui nous intéresse :
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 :
En bas de cet article, je vous renvoie vers une ressource qui récapitule des commandes de base pour manipuler en ligne de commande des utilisateurs, des bases, etc.
Ici, voici quelques commandes pour créer rapidement un utilisateur et une base pour tester la connexion.
Se connecter à la ligne de commande postgres :
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 :
Si l'installation a été faite depuis les dépôts de postgre, les fichiers sont situés dans :
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 !
Dans le cas de postgres installé depuis les dépôts de la distribution :
Et depuis le dépôt de postgres :
On va gérer la possibilité à des utilisateurs de se connecter sur les bases.
Cela se fait dans dans le fichier pg_hba.conf :
Pour autoriser les connexions de adrien sur la base test depuis le réseau 192.168.21.0/24 :
Après chaque modif de ce fichier, on rechargera la config du serveur (pas d'interruption de service) en se connectant à la ligne de commande postgres :
Et on recharge la config :
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 :
J'ai bien accès à ma base test :
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, 15 et 16.
Listez les modules PostgreSQL disponibles :
Code BASH :
dnf module list postgresql
Exemple de retour sur RHEL 8 :
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="17"
Désactivez le module postgres du système :
Code BASH :
dnf -y module disable postgresql
Il y a un dépôt par version de postgres. On pourra désactiver les repos Postgres :
Code BASH :
dnf config-manager --set-disabled pgdg*
Et activer juste celui de la version qui nous intéresse :
Code BASH :
dnf config-manager --set-enabled pgdg$PGVER
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
Créer une base et un utilisateur de test
En bas de cet article, je vous renvoie vers une ressource qui récapitule des commandes de base pour manipuler en ligne de commande des utilisateurs, des bases, etc.
Ici, voici quelques commandes pour créer rapidement un utilisateur et une base pour tester la connexion.
Se connecter à la ligne de commande postgres :
Code BASH :
su -lc 'psql' postgres
Code SQL :
CREATE USER adrien WITH PASSWORD 'MotDePasse'; CREATE DATABASE test OWNER 'adrien'; GRANT ALL PRIVILEGES ON DATABASE test TO adrien;
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 :
Code BASH :
/var/lib/pgsql/data/
Si l'installation a été faite depuis les dépôts de postgre, les fichiers sont situés dans :
Code BASH :
/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 !
Dans le cas de postgres installé depuis les dépôts de la distribution :
Code BASH :
systemctl restart postgresql.service
Et depuis le dépôt de postgres :
Code BASH :
systemctl restart postgresql-$PGVER.service
On va gérer la possibilité à des utilisateurs de se connecter sur les bases.
Cela se fait dans dans le fichier pg_hba.conf :
Pour autoriser les connexions de adrien sur la base test depuis le réseau 192.168.21.0/24 :
Code TEXT :
host test adrien 192.168.21.0/24 md5
Après chaque modif de ce fichier, on rechargera la config du serveur (pas d'interruption de service) en se connectant à la ligne de commande postgres :
Code BASH :
su -lc 'psql' postgres
Et on recharge la config :
Code SQL :
SELECT pg_reload_conf();
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 test -U adrien
On peut lister les bases de données :
Code TEXT :
adrien=> \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+------------+------------+----------------------- postgres | postgres | UTF8 | fr_FR.utf8 | fr_FR.utf8 | secrets | 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 test | postgres | UTF8 | fr_FR.utf8 | fr_FR.utf8 | =Tc/postgres + | | | | | postgres=CTc/postgres+ | | | | | adrien=CTc/postgres (5 rows)
J'ai bien accès à ma base test :
Code TEXT :
test=> \c test Vous êtes maintenant connecté à la base de données « test » en tant qu'utilisateur « adrien ».
On voit bien en changeant de base que je n'y ai pas accès :
Code TEXT :
adrien=> \c secrets 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 « secrets », 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