Prérequis
- Un serveur Ubuntu/Debian ou AlmaLinux 9/Rocky Linux 9
- Accès root ou sudo
PostgreSQL est une base de données relationnelle puissante et open source, connue pour sa fiabilité et ses fonctionnalités avancées. Idéal pour les applications critiques.
1. Installer PostgreSQL
# Ajouter le dépôt PostgreSQL officiel
apt install -y curl ca-certificates
curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor -o /usr/share/keyrings/postgresql-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/postgresql-keyring.gpg] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" | tee /etc/apt/sources.list.d/pgdg.list
# Installer PostgreSQL 16
apt update
apt install -y postgresql-16 postgresql-client-16
# Vérifier
systemctl status postgresql
psql --version# Installer le dépôt PostgreSQL officiel
dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# Désactiver le module PostgreSQL par défaut
dnf -qy module disable postgresql
# Installer PostgreSQL 16
dnf install -y postgresql16-server postgresql16
# Initialiser la base de données (requis sur AlmaLinux/Rocky Linux)
/usr/pgsql-16/bin/postgresql-16-setup initdb
# Activer et démarrer
systemctl enable postgresql-16
systemctl start postgresql-16
# Vérifier
systemctl status postgresql-16
psql --versionÉtape initdb sur AlmaLinux/Rocky Linux
Contrairement à Ubuntu/Debian, AlmaLinux/Rocky Linux nécessite une étape d'initialisation (initdb) avant de pouvoir démarrer PostgreSQL. Cette étape crée les fichiers de base de données initiaux.
2. Se connecter à PostgreSQL
# Se connecter en tant qu'utilisateur postgres
sudo -u postgres psql
# Ou
su - postgres
psql3. Créer un utilisateur et une base
-- Créer un utilisateur avec mot de passe
CREATE USER mon_user WITH PASSWORD 'mot_de_passe_securise';
-- Créer une base de données
CREATE DATABASE ma_base OWNER mon_user;
-- Donner tous les privilèges
GRANT ALL PRIVILEGES ON DATABASE ma_base TO mon_user;
-- Se connecter à la base
\c ma_base
-- Donner les droits sur le schema public
GRANT ALL ON SCHEMA public TO mon_user;
-- Lister les bases
\l
-- Lister les utilisateurs
\du
-- Quitter
\q4. Configurer l'authentification
# Trouver le fichier
find /etc -name pg_hba.conf 2>/dev/null
# Généralement : /etc/postgresql/16/main/pg_hba.conf
nano /etc/postgresql/16/main/pg_hba.conf
# Pour permettre la connexion par mot de passe en local :
# Changer 'peer' en 'md5' ou 'scram-sha-256' pour les connexions locales
# local all all md5
# host all all 127.0.0.1/32 scram-sha-256
# Redémarrer PostgreSQL
systemctl restart postgresql# Le fichier se trouve dans le répertoire de données
nano /var/lib/pgsql/16/data/pg_hba.conf
# Changer 'ident' en 'md5' ou 'scram-sha-256' pour les connexions locales
# local all all md5
# host all all 127.0.0.1/32 scram-sha-256
# Redémarrer PostgreSQL
systemctl restart postgresql-165. Autoriser les connexions distantes
# Éditer postgresql.conf
nano /etc/postgresql/16/main/postgresql.conf
# Trouver et modifier :
listen_addresses = '*'
# Éditer pg_hba.conf pour autoriser les connexions distantes
nano /etc/postgresql/16/main/pg_hba.conf
# Ajouter (pour autoriser une IP spécifique) :
# host all all 192.168.1.0/24 scram-sha-256
# Ou pour tout le monde (dangereux) :
# host all all 0.0.0.0/0 scram-sha-256
# Redémarrer
systemctl restart postgresql
# Ouvrir le port
ufw allow from 192.168.1.0/24 to any port 5432# Éditer postgresql.conf
nano /var/lib/pgsql/16/data/postgresql.conf
# Trouver et modifier :
listen_addresses = '*'
# Éditer pg_hba.conf pour autoriser les connexions distantes
nano /var/lib/pgsql/16/data/pg_hba.conf
# Ajouter (pour autoriser une IP spécifique) :
# host all all 192.168.1.0/24 scram-sha-256
# Redémarrer
systemctl restart postgresql-16
# Ouvrir le port
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="5432" accept'
firewall-cmd --reload6. Commandes psql utiles
\l -- Lister les bases de données
\c ma_base -- Se connecter à une base
\dt -- Lister les tables
\d ma_table -- Structure d'une table
\du -- Lister les utilisateurs
\dn -- Lister les schemas
\df -- Lister les fonctions
\q -- Quitter
\? -- Aide
\timing on -- Afficher le temps d'exécution7. Backup et Restore
# Exporter une base
pg_dump -U postgres ma_base > ma_base_backup.sql
# Exporter avec compression
pg_dump -U postgres ma_base | gzip > ma_base_backup.sql.gz
# Exporter toutes les bases
pg_dumpall -U postgres > all_databases.sql
# Restaurer une base
psql -U postgres ma_base < ma_base_backup.sql
# Restaurer depuis un fichier compressé
gunzip -c ma_base_backup.sql.gz | psql -U postgres ma_base
# Créer un backup en format custom (plus efficace)
pg_dump -U postgres -Fc ma_base > ma_base.dump
pg_restore -U postgres -d ma_base ma_base.dump8. Script de sauvegarde automatique
cat > /opt/pg_backup.sh << 'EOF'
#!/bin/bash
BACKUP_DIR="/var/backups/postgresql"
DATE=$(date +%Y-%m-%d)
KEEP_DAYS=7
mkdir -p $BACKUP_DIR
# Backup de toutes les bases
sudo -u postgres pg_dumpall | gzip > $BACKUP_DIR/all-databases-$DATE.sql.gz
# Supprimer les vieux backups
find $BACKUP_DIR -type f -mtime +$KEEP_DAYS -delete
echo "Backup completed: $BACKUP_DIR/all-databases-$DATE.sql.gz"
EOF
chmod +x /opt/pg_backup.sh
# Ajouter au cron
(crontab -l 2>/dev/null; echo "0 3 * * * /opt/pg_backup.sh") | crontab -9. Optimisation des performances
nano /etc/postgresql/16/main/postgresql.conf
# Paramètres recommandés :
shared_buffers = 1GB
work_mem = 32MB
maintenance_work_mem = 256MB
effective_cache_size = 3GB
max_connections = 100
checkpoint_completion_target = 0.9
wal_buffers = 16MB
default_statistics_target = 100
# Redémarrer
systemctl restart postgresqlChemin de configuration sur AlmaLinux/Rocky Linux
Sur AlmaLinux/Rocky Linux, le fichier postgresql.conf se trouve dans /var/lib/pgsql/16/data/postgresql.conf. Les paramètres de performance sont les mêmes.
10. Installer pgAdmin (interface web)
# Ajouter le dépôt pgAdmin
curl -fsS https://www.pgadmin.org/static/packages_pgadmin_org.pub | gpg --dearmor -o /usr/share/keyrings/packages-pgadmin-org.gpg
echo "deb [signed-by=/usr/share/keyrings/packages-pgadmin-org.gpg] https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/$(lsb_release -cs) pgadmin4 main" | tee /etc/apt/sources.list.d/pgadmin4.list
# Installer pgAdmin web
apt update
apt install -y pgadmin4-web
# Configurer
/usr/pgadmin4/bin/setup-web.sh
# Accès : http://VOTRE_IP/pgadmin4# Ajouter le dépôt pgAdmin
rpm -i https://ftp.postgresql.org/pub/pgadmin/pgadmin4/yum/pgadmin4-redhat-repo-2-1.noarch.rpm
# Installer pgAdmin web
dnf install -y pgadmin4-web
# Configurer
/usr/pgadmin4/bin/setup-web.sh
# Accès : http://VOTRE_IP/pgadmin4PostgreSQL installé !
Votre serveur PostgreSQL est prêt. Il est particulièrement adapté pour les applications nécessitant des fonctionnalités avancées comme les transactions ACID, JSON, ou les extensions PostGIS.