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