PostgreSQL et PGAdmin4

PostgreSQL est disponible en version 15.3 par défaut sur Debian 12, et si vous n’avez pas besoin de fonctionnalités disponibles à partir d’une version plus récente, il est conseillé d’utiliser la version présente dans les dépôts standards.

l’installation se fait donc de façon simple, en exécutant la commande:

apt install postgresql

on passe maintenant à la définition/changement de mot de passe du compte administrateur du serveur de base de donnée. Pour on exécutera le programme psql sous l’utilisateur système postgres :

sudo -u postgres psql

ce qui nous permettra d’exécuter les commandes SQL directement sur le serveur de base de données :

ALTER USER postgres PASSWORD 'myNewSecurePassword';
\q

PgAdmin4, l’outil open source d’administration et de développement de base de données Postgresql ne possède lui pas de binaire par défaut dans les dépôts Debian. Il existe plusieurs façons de l’installer, que ce soit en compilant le code source, ou en utilisant le gestionnaire de paquets Python PyPI, mais nous opterons plutôt dans ce cas de l’ajout des dépôts apt qui fournissent des binaires compatible avec notre version de Debian :

curl -fsS https://www.pgadmin.org/static/packages_pgadmin_org.pub | gpg --dearmor -o /usr/share/keyrings/packages-pgadmin-org.gpg
sh -c 'echo "deb [signed-by=/usr/share/keyrings/packages-pgadmin-org.gpg] https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/$(lsb_release -cs) pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && apt update'
apt install pgadmin4-server pgadmin4-web
sudo /usr/pgadmin4/bin/setup-web.sh

La dernière commande exécuté qui correspond à un script fourni par les paquets installés permet de configurer un compte (email et mot de passe) pour l’accès web à l’application et de choisir le serveur web à paramétrer pour tourner dessus (dans notre cas apache).

PgAdmin4 en mode serveur web (il existe aussi en mode desktop) a paramétrer par défaut notre serveur apache en ajoutant tout d’abord le module wsgi (fourni par le paquet libapache2-mod-wsgi-py3) qui permet d’exécuter des CGI python, et en ajoutant le fichier de configuration /etc/apache2/conf-enable/pgadmin4.conf.

Si on regarde le contenu de ce fichier, on peux voir (et modifier si l’on veux) qu’il a mis un alias /pgadmin4 qui sera donc exécuté sur tous nos hôtes virtuels apache.

Pour ma part je préfère créer un sous domaine spécifique dédié à PgAdmin4.

A supposer que l’on dispose d’un sous domaine déjà pointé sur notre serveur, on suivra une procédure identique à celle proposée dans l’article d’installation de Apache avec Letsencrypt pour générer les certificats.

On désactive la configuration par défaut de PgAdmin4 :

a2disconf pgadmin4

et on créé le fichier /etc/apache/site-enabled/001-com.toto.pgadmin4.conf avec le contenu suivant :

<VirtualHost *:80>
        ServerName pgadmin4.toto.com
        ServerAdmin webmaster@localhost
        <IfModule mod_ssl.c>
                Include /etc/apache2/conf-available/options-force-ssl.conf
        </IfModule>
        <IfModule !mod_ssl.c>
        WSGIDaemonProcess pgadmin processes=1 threads=25 python-home=/usr/pgadmin4/venv
        WSGIScriptAlias / /usr/pgadmin4/web/pgAdmin4.wsgi
        <Directory /usr/pgadmin4/web/>
                WSGIProcessGroup pgadmin
                WSGIApplicationGroup %{GLOBAL}
                Require all granted
        </Directory>
        </IfModule>
        LogLevel warn
        ErrorLog ${APACHE_LOG_DIR}/com.toto.pgadmin4-error.log
        CustomLog ${APACHE_LOG_DIR}/com.toto.pgadmin4-access.log combined
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerName pgadmin4.toto.com
        ServerAdmin webmaster@localhost
        WSGIScriptAlias / /usr/pgadmin4/web/pgAdmin4.wsgi
        WSGIDaemonProcess pgadmin processes=1 threads=25 python-home=/usr/pgadmin4/venv
        <Directory /usr/pgadmin4/web/>
                WSGIProcessGroup pgadmin
                WSGIApplicationGroup %{GLOBAL}
                Require all granted
        </Directory>
        Header always set Strict-Transport-Security "max-age=500; includeSubDomains; preload"
        <IfModule mod_expires.c>
                ExpiresActive Off
        </IfModule>
        Include /etc/apache2/conf-available/letsencrypt-include.conf
        SSLCertificateKeyFile    /etc/letsencrypt/live/pgadmin4.toto.com/privkey.pem
        SSLCertificateFile       /etc/letsencrypt/live/pgadmin4.toto.com/cert.pem
        SSLCertificateChainFile  /etc/letsencrypt/live/pgadmin4.toto.com/chain.pem
        LogLevel warn
        ErrorLog ${APACHE_LOG_DIR}/com.toto.pgadmin4-error.log
        CustomLog ${APACHE_LOG_DIR}/com.toto.pgadmin4-access.log combined
</VirtualHost>
</IfModule>

puis on active le nouveau vhost ainsi créé et on redémarre apache :

a2ensite com.toto.pgadmin4
service apache2 restart

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.