Table des matières

Pgadmin4

Pgadmin est une interface web permettant de manipuler vos bases de données PostgreSQL (création, modification, suppression, etc). C'est un outil très pratique mais ça veut également dire donner un accès à vos bases de données depuis internet avec les risques qui vont avec. Comme toute interface web, elle nécessite un serveur web pour fonctionner. Dans mon cas, j'utiliserai Apache2. Je ne traiterai pas la création et configuration du nom de domaine et partirai du principe que vous avez un nom de domaine, appelé domaine.fr ici, qui pointe vers votre serveur.

Installation

L'installation sous Raspbian doit se faire via Python.

Installez les paquets nécessaires :

sudo aptitude install build-essential libssl-dev libffi-dev libgmp3-dev virtualenv python3-pip libpq-dev python3-dev python3

Créez l'environnement virtuel :

sudo python3 -m venv /var/www/pgadmin4

Changez le propriétaire par votre utilisateur courant (fate dans mon cas) :

sudo chown -R fate:fate /var/www/pgadmin4

Rentrez dans le répertoire :

cd /var/www/pgadmin4

Créez les sous-répertoires var/storage et var/sessions :

mkdir -p var/storage
mkdir var/sessions

Activez l'environnement virtuel :

source /var/www/pgadmin4/bin/activate

Installez pgadmin4 :

pip install pgadmin4

Créez le fichier de configuration :

nano lib/python3.11/site-packages/pgadmin4/config_local.py

Ajoutez les lignes suivantes (ce sont les différents répertoires de travail de pgadmin) :

LOG_FILE = '/var/www/pgadmin4/var/pgadmin4.log'
SQLITE_PATH = '/var/www/pgadmin4/var/pgadmin4.db'
SESSION_DB_PATH = '/var/www/pgadmin4/var/sessions'
STORAGE_DIR = '/var/www/pgadmin4/var/storage'
SERVER_MODE = True
DATA_DIR = '/var/www/pgadmin4/var'
AZURE_CREDENTIAL_CACHE_DIR = '/var/www/pgadmin4/var/azurecredentialcache'

Lancez l'installation de la base de données :

/var/www/pgadmin4/bin/python3.11 /var/www/pgadmin4/lib/python3.11/site-packages/pgadmin4/setup.py setup-db

Il vous sera demandé de rentrer une adresse mail et un mot de passe.

Il ne nous reste plus qu'à modifier de nouveau le propriétaire par www-data ce coup-ci :

sudo chown -R www-data:www-data /var/www/pgadmin4/

Pour utiliser pgadmin, il va falloir créer un super utilisateur ayant accès à postgresql. Tapez les lignes suivantes dans la console en remplaçant le nom d'utilisateur et le mot de passe (choisissez un mot de passe robuste pour l'utilisateur) :

sudo -i -u postgres
psql
CREATE ROLE nom_utilisateur LOGIN SUPERUSER CREATEROLE CREATEDB PASSWORD 'mot_de_passe';
exit
exit

Lancement de pgadmin via Systemd

Créez le fichier

/etc/systemd/system/pgadmin.service

Copiez les lignes suivantes dedans

[Unit]
Description=Pgadmin4 Service
After=network.target

[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/pgadmin4/
Environment="PATH=/var/www/pgadmin4/bin"
ExecStart=/var/www/pgadmin4/bin/python /var/www/pgadmin4/lib/python3.11/site-packages/pgadmin4/pgAdmin4.py
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Activez le service au démarrage

sudo systemctl enable pgadmin.service

Démarrez le service

sudo systemctl start pgadmin.service

Sécuriser l'accès

Par défaut, PgAdmin est accessible à l'adresse https://domaine.fr:5050 avec domaine.fr le domaine pointant sur votre serveur ou son adresse IP. N'aimant pas que n'importe puisse tomber sur la page de connexion de PgAdmin , je préfère le rendre accessible uniquement via un nom de domaine spécifique et y ajouter une double authentification.

Créez un fichier de configuration pour le sous-domaine (mettre le sous-domaine de votre choix) :

sudo nano /etc/apache2/sites-available/sous.domaine.fr.conf

Copiez-y les lignes suivantes :

<VirtualHost *:80>
 
        ServerName sous.domaine.fr
 
        Redirect / https://sous.domaine.fr
 
</VirtualHost>
 
 
<VirtualHost *:443>
        ServerName sous.domaine.fr
 
        LogLevel warn
        CustomLog ${APACHE_LOG_DIR}/phppgadmin.access.log combined
        ErrorLog ${APACHE_LOG_DIR}/phppgadmin.error.log
 
        SSLEngine on
        SSLCertificateFile /etc/letsencrypt/live/domaine.fr/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/domaine.fr/privkey.pem
 
        ProxyPass / http://localhost:5050/
        <Location />
                ProxyPassReverse http://localhost:5050/
                AuthType Digest
                AuthName "pgadmin"
                AuthDigestDomain /var/www/pgadmin4 https://sous.domaine.fr
                AuthDigestProvider file
                AuthUserFile /etc/apache2/passwords
                Require valid-user
        </Location>
 
 
</VirtualHost>

Voir ici pour créer l'accès.

Ensuite, on active le fichier de configuration :

sudo a2ensite sous.domaine.fr.conf

Et on recharge Apache2 :

sudo systemctl reload apache2

Vous pouvez maintenant manipuler vos bases de données avec PgAdmin.