Comment installer PostgreSQL et phpPgAdmin sur Fedora 34

PostgreSQL ou Postgres est un système de gestion de base de données relationnelle puissant, open-source, qui utilise et étend le langage SQL. Il possède de nombreuses fonctionnalités avancées qui permettent de stocker et de mettre à l’échelle en toute sécurité des charges de travail de données compliquées. phpPgAdmin est une application basée sur PHP pour gérer et modifier les bases de données PostgreSQL.

Ce tutoriel montre comment installer PostgreSQL et phpPgAdmin sur un serveur basé sur Fedora 34.

Conditions préalables

  1. Un serveur basé sur Fedora 34.

  2. Garde tes systèmes à jour.

    $ sudo dnf update
    
  3. Un utilisateur non-root avec des privilèges sudo.

Étape 1 - Installe PostgreSQL

Fedora 34 est livré avec différentes versions de PostgreSQL disponibles dans leur référentiel. Tu peux choisir entre ces versions en activant le module approprié, qui est un ensemble de paquets et de dépendances.

Tout d'abord, vérifie les flux disponibles pour le module postgresql à l'aide de la commande dnf.

$ dnf module list postgresql
Name                        Stream                  Profiles                           Summary
postgresql                  9.6                     client, server [d]                 PostgreSQL module
postgresql                  10                      client, server [d]                 PostgreSQL module
postgresql                  11                      client, server [d]                 PostgreSQL module
postgresql                  12                      client, server                     PostgreSQL module
postgresql                  13                      client, server                     PostgreSQL module

Pour installer PostgreSQL, nous devons activer le flux du module correspondant.

$ sudo dnf module enable postgresql:13

Lorsque tu y es invité, entre Y pour activer le flux.

Ensuite, installe le serveur PostgreSQL.

$ sudo dnf install postgresql-server

Tu voudras peut-être installer le paquet contrib, qui ajoute plusieurs fonctionnalités supplémentaires au système de base de données PostgreSQL.

$ sudo dnf install postgresql-contrib

Maintenant que le serveur est installé, nous devons créer un nouvel utilisateur.

Étape 2 - Créer un nouveau cluster de base de données PostgreSQL

Tout d'abord, tu dois créer un nouveau cluster de base de données PostgreSQL. Un cluster de base de données est une collection de bases de données qui sont gérées par une seule instance de serveur. La création d'un cluster permettra de créer des répertoires dans lesquels la base de données sera placée. Tout ce processus s'apparente aussi à l'initialisation de PostgreSQL.

Ce processus crée les bases de donnéestemplate1 et postgres. La base de données template1 est un modèle utilisé par PostgreSQL pour créer de nouvelles bases de données. La base de données postgres est la base de données par défaut utilisée par les utilisateurs, les utilitaires et les applications tierces.

Pour créer le cluster de bases de données afin d'initialiser PostgreSQL, utilise la commande suivante.

$ sudo postgresql-setup --initdb

Démarre ensuite le service PostgreSQL.

$ sudo systemctl start postgresql

Active le service PostgreSQL.

$ sudo systemctl enable postgresql

Maintenant que PostgreSQL est opérationnel, nous pouvons créer de nouveaux utilisateurs et bases de données et commencer à les utiliser.

Étape 3 - Rôles et méthodes d'authentification PostgreSQL

Postgres utilise le concept de "rôles" pour gérer l'authentification et les autorisations. PostgreSQL prend en charge plusieurs méthodes d'authentification. Les méthodes les plus couramment utilisées sont les suivantes :

  • Confiance - Un rôle qui peut se connecter sans mot de passe, tant que les conditions définies dans/var/lib/pgsql/pg_hba.conf sont remplies.
  • Mot de passe - Un rôle qui utilise le mot de passe pour se connecter. Les mots de passe peuvent être stockés sous md5, scram-sha-256 et en texte clair.
  • Ident - Il nécessite le nom d'utilisateur du système d'exploitation du client et n'est pris en charge que sur les connexions TCP/IP.
  • Peer - Identique à Ident mais pris en charge uniquement sur les connexions localhost.

Postgres utilise l'authentification par les pairs par défaut, ce qui signifie qu'il associe les rôles Postgres à la correspondance avec un compte utilisateur Linux. Si un rôle existe dans Postgres, un nom d'utilisateur Linux portant le même nom peut se connecter en tant que ce rôle. Les détails de l'authentification du client sont stockés dans le fichier /var/lib/pgsql/pg_hba.conf.

Le processus d'installation de Postgres crée un compte utilisateur appelé postgres qui est associé au rôle Postgres par défaut.

Passe au compte postgres.

$ sudo -i -u postgres

Tu peux accéder à l'invite Postgres à l'aide de la commande suivante.

$ psql

Cela te connectera à l'invite PostgreSQL, où tu peux accéder aux bases de données et les utiliser via diverses commandes. Tu peux quitter l'invite en tapant :

postgres-# \q

Cela te ramènera au compte Linux du compte Postgres. Pour revenir à ton propre compte utilisateur, tape exit à l'invite.

Tu peux aussi accéder à l'invite Postgres sans changer de compte en tapant la commande suivante.

$ sudo -u postgres psql

Pour quitter l'invite, tape :

postgres-# \q

Étape 4 - Création de nouveaux rôles et bases de données.

Tu peux créer des rôles et des bases de données directement à partir du shell bash ou du shell psql. Pour nos besoins, nous utiliserons le shell psql car il effectue le travail plus rapidement.

Tout d'abord, connecte-toi au shell psql.

$ sudo -u postgres psql

Crée un nouveau rôle PostgreSQL avec des autorisations telles que Superuser, Create database, Create role et Login. Cet utilisateur sera utilisé plus loin dans le tutoriel pour se connecter àphpPgAdmin.

postgres-# CREATE ROLE username WITH SUPERUSER CREATEDB CREATEROLE LOGIN ENCRYPTED PASSWORD 'yourpassword';

Tu peux vérifier tous les utilisateurs disponibles avec la commande suivante.

postgres-# \du
                                   List of roles
 Role name |                         Attributes                         | Member of
-----------+------------------------------------------------------------+-----------
 username  | Superuser, Create role, Create DB                          | {}
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

Crée une nouvelle base de données.

postgres-# CREATE DATABASE userdb;

Accorde des privilèges à l'utilisateur sur la base de données que nous venons de créer en exécutant la requête suivante.

postgres-# GRANT ALL PRIVILEGES ON DATABASE userdb TO username;

Tu peux vérifier toutes les bases de données disponibles à l'aide de la commande suivante.

postgres-# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 userdb    | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres         +
           |          |          |             |             | postgres=CTc/postgres+
           |          |          |             |             | navjot=CTc/postgres
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(4 rows)

Étape 5 - Activer l'accès à distance au serveur PostgreSQL

Par défaut, le serveur PostgreSQL écoute uniquement sur l'interface localhost. Pour activer l'accès à distance à ton serveur PostgreSQL, ouvre le fichier postgresql.conf.

$ sudo nano /var/lib/pgsql/data/postgresql.conf

Fais défiler vers le bas jusqu'à la section CONNECTIONS ET AUTHENTIFICATION et change/modifie la ligne suivante en supprimant le symbole dièse.

#listen_addresses = 'localhost'         # what IP address(es) to listen on;

Change la ligne en ce qui suit.

listen_addresses = '*' 			        # what IP address(es) to listen on;

Enregistre le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque tu y es invité.

L'étape suivante consiste à configurer le serveur pour qu'il accepte les connexions à distance en modifiant le fichier pg_hba.conf.

$ sudo nano /var/lib/pgsql/data/pg_hba.conf

Il existe plusieurs façons de donner accès aux connexions à distance. Tu peux restreindre les connexions à distance à un seul utilisateur ou à une seule base de données ou à tous et restreindre les connexions à chaque adresse IP ou à un emplacement de confiance.

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# The user jane can access all databases from all locations using an md5 password
host    all             john            0.0.0.0/0                md5

# The user jane can access only the janedb database from all locations using an md5 password
host    johndb          john            0.0.0.0/0                md5

# The user jane can access all databases from a trusted location (192.168.1.110) without a password
host    all             john            192.168.1.110            trust

Il y a aussi d'autres entrées dans le fichier, et la méthode d'authentification indiquée pour elles est ident. Tu devras changer la valeur de ident en md5 si tu veux te connecter via l'interface Web.

Ajoute la configuration requise, puis enregistre le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque tu y es invité.

Redémarre le serveur PostgreSQL pour que la modification prenne effet.

$ sudo systemctl restart postgresql

Vérifie les changements avec l'utilitaire ss.

$ ss -nlt | grep 5432
LISTEN   0    128    0.0.0.0:5432    0.0.0.0:*       
LISTEN   0    128    [::]:5432      [::]:*  

Cela montre que le serveur PostgreSQL écoute sur le port par défaut sur toutes les interfaces.

Étape 6 - Installer phpPgAdmin, Nginx et PHP

phpPgAdmin est généralement livré avec le référentiel de PostgreSQL ou de Fedora, mais pas dans Fedora 34. Par conséquent, tu devras l'installer manuellement. En plus de phpPgAdmin, tu dois également installer le serveur web Nginx et le logiciel PHP.

Télécharge la dernière version de phpPgAdmin depuis lapage des versions Github. Au moment de la rédaction de ce tutoriel, la dernière version disponible est 7.13.0.

$ wget https://github.com/phppgadmin/phppgadmin/releases/download/REL_7-13-0/phpPgAdmin-7.13.0.tar.gz

Extrais l'archive téléchargée.

$ tar -zxvf phpPgAdmin-7.13.0.tar.gz

Crée le répertoire où se trouvera ton site.

$ sudo mkdir /var/www/phppgadmin/html -p

Déplace les fichiers extraits dans le répertoire /var/www/phppgadmin/html.

$ sudo mv phpPgAdmin-7.13.0/ /var/www/phppgadmin/html

Installe le serveur Nginx et PHP ainsi que les modules PHP appropriés.

$  sudo dnf install nginx php-fpm php-cli php-pgsql php-mbstring

Configure le pare-feu Fedora.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Recharge le pare-feu pour activer les règles.

$ sudo firewall-cmd --reload

Configurer PHP

Ouvre le fichier /etc/php-fpm.d/www.conf pour le modifier à l'aide de nano editor.

$ sudo nano /etc/php-fpm.d/www.conf

Nous devons définir l'utilisateur/groupe Unix des processus PHP sur nginx. Trouve les lignes user=apache et group=apache dans le fichier et change-les en nginx.

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
...

Enregistre le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque tu y es invité.

Redémarre le processus PHP-fpm.

$ sudo systemctl restart php-fpm

Configurer Nginx

Exécute la commande suivante pour ajouter un fichier de configuration pour ton site.

$ sudo nano /etc/nginx/conf.d/phppgadmin.conf

Colle le code suivant dans l'éditeur.

server {
  listen          *:80;
  server_name     phppgadmin.example.com;
  root            /var/www/phppgadmin/html;
  index           index.php;

  location / {
    try_files   $uri $uri/ =404;
  }
    
  access_log /var/log/nginx/phppgadmin.access.log;
  error_log /var/log/nginx/phppgadmin.error.log;

  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass  unix:/run/php-fpm/www.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_index index.php;
    include  fastcgi_params;
  }
}

Appuie sur Ctrl + X pour fermer l'éditeur et sur Y lorsqu'on te le demande pour enregistrer le fichier.

Ce fichier suppose que nous hébergerons phppgadmin.example.com dans le répertoire /var/www/html/phppgadmin.

Teste la configuration de Nginx.

$ sudo nginx -t

Tu devrais voir la sortie suivante indiquant que ta configuration est correcte.

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Démarre et active le service Nginx.

$ sudo systemctl start nginx
$ sudo systemctl enable nginx

Lance http://phppgadmin.example.com dans ton navigateur et tu devrais voir la page par défaut de phpPgAdmin dans ton navigateur.

Page d'accueil de phpPgAdmin

Clique sur le lien PostgreSQL dans la barre latérale gauche et saisis l'utilisateur et le mot de passe que tu as créés précédemment pour te connecter et accéder au portail.

Tableau de bord de phpPgAdmin

Étape 7 - Installer SSL (facultatif)

Nous pouvons activer SSL en utilisant le service Let's Encrypt SSL. Pour cela, installe l'outil Certbot.

$ sudo dnf install certbot-nginx

Génère le certificat SSL.

$ sudo certbot --nginx -d phppgadmin.example.com

On te demandera ton adresse e-mail et d'accepter les conditions d'utilisation du service. Lorsqu'on te demande d'accéder à HTTPS, choisis la méthode Secure pour rediriger toutes les demandes de HTTP vers HTTPS.

Tu devrais pouvoir accéder à phpPgAdmin en tapant https://phppgadmin.example.com dans ton navigateur.

Configurer SSL pour l'auto-renouvellement

Ouvre l'éditeur Crontab.

$ EDITOR=nano sudo crontab -e

Colle la ligne suivante en bas.

. . .
25 2 * * * /usr/bin/certbot renew --quiet

La partie 25 2 * * * de cette ligne signifie "exécuter la commande suivante à 2h25 du matin, tous les jours". Tu peux choisir n'importe quelle heure.

Enregistre le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque tu y es invité.

Ton certificat SSL sera automatiquement renouvelé.

Conclusion

Ceci conclut notre tutoriel sur la façon d'installer PostgreSQL et phpPgAdmin sur un serveur basé sur Fedora 34. Si tu as des questions, poste-les dans les commentaires ci-dessous.

Vous aimerez aussi...