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
Un serveur basé sur Fedora 34.
Garde tes systèmes à jour.
$ sudo dnf update
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.
. 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.
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.
É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.