PostgreSQL ou Postgres est un puissant système de gestion de base de données relationnelle open source qui utilise et étend le langage SQL. Il dispose de nombreuses fonctionnalités avancées qui stockent et mettent à l'échelle en toute sécurité des charges de travail de données complexes. phpPgAdmin est une application basée sur PHP pour gérer et éditer des bases de données PostgreSQL.
Ce tutoriel montrera comment installer PostgreSQL et phpPgAdmin sur un serveur basé sur Fedora 34.
Prérequis
-
Un serveur basé sur Fedora 34.
-
Maintenez vos systèmes à jour.
$ sudo dnf update
-
Un utilisateur non root avec des privilèges sudo.
Étape 1 - Installer PostgreSQL
Fedora 34 est livré avec différentes versions de PostgreSQL disponibles à partir de leur référentiel. Vous pouvez choisir entre ces versions en activant le module approprié, qui est une collection de packages et de dépendances.
Tout d'abord, vérifiez les flux disponibles pour le postgresql
module utilisant le dnf
commande.
$ 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 de module correspondant.
$ sudo dnf module enable postgresql:13
Lorsque vous y êtes invité, saisissez Y
pour activer le flux.
Ensuite, installez le serveur PostgreSQL.
$ sudo dnf install postgresql-server
Vous voudrez peut-être installer le contrib
package, 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 bases de données PostgreSQL
Tout d'abord, vous devez créer un nouveau cluster de bases de données PostgreSQL. Un cluster de bases de données est un ensemble de bases de données gérées par une seule instance de serveur. La création d'un cluster créera des répertoires dans lesquels la base de données sera placée. Tout ce processus s'apparente également à l'initialisation de PostgreSQL.
Ce processus crée template1
et postgres
bases de données. Le template1
database est un modèle utilisé par PostgreSQL pour créer de nouvelles bases de données. Le postgres
database 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 pour initialiser PostgreSQL, utilisez la commande suivante.
$ sudo postgresql-setup --initdb
Maintenant, démarrez le service PostgreSQL.
$ sudo systemctl start postgresql
Activez 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 PostgreSQL et méthodes d'authentification
Postgres utilise le concept de "rôles" pour gérer l'authentification et les permissions. PostgreSQL prend en charge plusieurs méthodes d'authentification. Les méthodes les plus couramment utilisées sont :
- 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 en tant que
md5
,scram-sha-256
et texte clair. - Identifiant - 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.
- Pair - 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 d'un compte d'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 rôle. Les détails de l'authentification du client sont stockés dans le /var/lib/pgsql/pg_hba.conf
fichier.
Le processus d'installation de Postgres crée un compte utilisateur appelé postgres
qui est associé au rôle Postgres par défaut.
Passer au postgres
compte.
$ sudo -i -u postgres
Vous pouvez accéder à l'invite Postgres à l'aide de la commande suivante.
$ psql
Cela vous connectera à l'invite PostgreSQL, où vous pourrez accéder et utiliser les bases de données via diverses commandes. Vous pouvez quitter l'invite en tapant :
postgres-# \q
Cela vous ramènera au compte Linux du compte Postgres. Pour revenir à votre propre compte utilisateur, tapez exit
à l'invite.
Vous pouvez également accéder à l'invite Postgres sans changer de compte en tapant la commande suivante.
$ sudo -u postgres psql
Pour quitter l'invite, tapez :
postgres-# \q
Étape 4 - Création de nouveaux rôles et bases de données.
Vous pouvez créer des rôles et des bases de données directement à partir du shell bash ou du psql
coquille. Pour nos besoins, nous utiliserons le psql
shell car il fait le travail plus rapidement.
Tout d'abord, connectez-vous au psql
coque.
$ sudo -u postgres psql
Créez un nouveau rôle PostgreSQL avec des autorisations telles que Superutilisateur, Créer une base de données, Créer un rôle et Connexion. Cet utilisateur sera utilisé plus loin dans le didacticiel pour se connecter à phpPgAdmin .
postgres-# CREATE ROLE username WITH SUPERUSER CREATEDB CREATEROLE LOGIN ENCRYPTED PASSWORD 'yourpassword';
Vous pouvez 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éez une nouvelle base de données.
postgres-# CREATE DATABASE userdb;
Accordez 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;
Vous pouvez vérifier toutes les bases de données disponibles avec 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 n'écoute que sur l'interface localhost. Pour activer l'accès à distance à votre serveur PostgreSQL, ouvrez le postgresql.conf
fichier.
$ sudo nano /var/lib/pgsql/data/postgresql.conf
Faites défiler jusqu'à la section CONNEXIONS ET AUTHENTIFICATION et modifiez/modifiez la ligne suivante en supprimant le symbole dièse.
#listen_addresses = 'localhost' # what IP address(es) to listen on;
Remplacez la ligne par la suivante.
listen_addresses = '*' # what IP address(es) to listen on;
Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.
L'étape suivante consiste à configurer le serveur pour qu'il accepte les connexions à distance en modifiant le pg_hba.conf
fichier.
$ sudo nano /var/lib/pgsql/data/pg_hba.conf
Vous pouvez donner accès à des connexions distantes de différentes manières. Vous pouvez 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 existe également d'autres entrées dans le fichier, et la méthode d'authentification répertoriée pour elles est ident
. Vous devrez changer la valeur de ident
à md5
si vous souhaitez vous connecter via l'interface Web.
Ajoutez la configuration requise, puis enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.
Redémarrez le serveur PostgreSQL pour que la modification prenne effet.
$ sudo systemctl restart postgresql
Vérifiez les modifications avec le ss
utilitaire.
$ 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 PostgreSQL ou Fedora, mais pas dans Fedora 34. Par conséquent, vous devrez l'installer manuellement. En plus de phpPgAdmin, vous devez également installer le serveur Web Nginx et le logiciel PHP.
Téléchargez la dernière version de phpPgAdmin depuis la page des versions de Github. Au moment de la rédaction de ce didacticiel, la dernière version disponible est la 7.13.0.
$ wget https://github.com/phppgadmin/phppgadmin/releases/download/REL_7-13-0/phpPgAdmin-7.13.0.tar.gz
Extrayez l'archive téléchargée.
$ tar -zxvf phpPgAdmin-7.13.0.tar.gz
Créez le répertoire où votre site vivra.
$ sudo mkdir /var/www/phppgadmin/html -p
Déplacez les fichiers extraits vers /var/www/phppgadmin/html
répertoire.
$ sudo mv phpPgAdmin-7.13.0/ /var/www/phppgadmin/html
Installez le serveur Nginx et PHP avec les modules PHP appropriés.
$ sudo dnf install nginx php-fpm php-cli php-pgsql php-mbstring
Configurez le pare-feu Fedora.
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
Rechargez le pare-feu pour activer les règles.
$ sudo firewall-cmd --reload
Configurer PHP
Ouvrez le fichier /etc/php-fpm.d/www.conf
pour l'édition à l'aide de nano editor
.
$ sudo nano /etc/php-fpm.d/www.conf
Nous devons définir l'utilisateur/groupe Unix de processus PHP sur nginx . Trouvez le user=apache
et group=apache
lignes dans le fichier et changez-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
...
Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.
Redémarrez le processus PHP-fpm.
$ sudo systemctl restart php-fpm
Configurer Nginx
Exécutez la commande suivante pour ajouter un fichier de configuration pour votre site.
$ sudo nano /etc/nginx/conf.d/phppgadmin.conf
Collez 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;
}
}
Appuyez sur Ctrl + X pour fermer l'éditeur et appuyez sur Y lorsque vous êtes invité à enregistrer le fichier.
Ce fichier suppose que nous hébergerons phppgadmin.example.com
dans le répertoire /var/www/html/phppgadmin
.
Testez la configuration Nginx.
$ sudo nginx -t
Vous devriez voir la sortie suivante indiquant que votre 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émarrez et activez le service Nginx.
$ sudo systemctl start nginx
$ sudo systemctl enable nginx
Lancez http://phppgadmin.example.com
dans votre navigateur, et vous devriez voir la page phpPgAdmin par défaut dans votre navigateur.
Cliquez sur le PostgreSQL
dans la barre latérale gauche et entrez l'utilisateur et le mot de passe que vous avez créés précédemment pour vous 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, installez l'outil Certbot.
$ sudo dnf install certbot-nginx
Générez le certificat SSL.
$ sudo certbot --nginx -d phppgadmin.example.com
Il vous sera demandé votre adresse e-mail et d'accepter les conditions d'utilisation. Lorsqu'on vous demande un accès HTTPS, choisissez la méthode sécurisée pour rediriger toutes les requêtes de HTTP vers HTTPS.
Vous devriez pouvoir accéder à phpPgAdmin en tapant https://phppgadmin.example.com
dans votre navigateur.
Configurer SSL pour le renouvellement automatique
Ouvrez l'éditeur Crontab.
$ EDITOR=nano sudo crontab -e
Collez la ligne suivante en bas.
. . .
25 2 * * * /usr/bin/certbot renew --quiet
Le 25 2 * * *
une partie de cette ligne signifie "exécuter la commande suivante à 2h25, tous les jours". Vous pouvez choisir à tout moment.
Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.
Votre 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 vous avez des questions, postez-les dans les commentaires ci-dessous.