Installer PostgreSQL sur un VPS Linux : guide complet

Installer PostgreSQL VPS est une opération incontournable pour tout professionnel IT souhaitant déployer une base de données relationnelle robuste, performante et maîtrisée de bout en bout. Ce tutoriel 2026 couvre l'installation complète sur Debian/Ubuntu comme sur Rocky/Alma, la configuration réseau, le durcissement sécurité et l'optimisation des performances sur stockage NVMe. Objectif : une instance production-ready, propre et sécurisée.
Prérequis avant d'installer PostgreSQL sur un VPS
Avant toute chose, il faut un accès root ou sudo à un VPS Linux disposant de ressources suffisantes. PostgreSQL est peu gourmand au repos mais très sensible à la latence disque et à la quantité de RAM disponible pour son cache. Un stockage NVMe Gen4 et un CPU dédié font une réelle différence sur les charges transactionnelles.
Ressources recommandées
| Usage | vCPU | RAM | Stockage |
|---|---|---|---|
| Dev / test | 1-2 | 2-4 Go | 20 Go NVMe |
| Application web moyenne | 2-4 | 8 Go | 40-80 Go SSD SAS |
| Base transactionnelle chargée | 4-8+ | 16-32 Go | 100 Go+ SSD SAS |
Un VPS Linux OmegaCloud avec CPU dédié et disques SSD SAS convient parfaitement à ce type de workload. L'anti-DDoS volumétrique étant déjà géré côté infrastructure, vous vous concentrez uniquement sur la sécurité applicative et système.
Mise à jour du système
Sur Debian/Ubuntu, commencez toujours par mettre le système à jour :
sudo apt update && sudo apt upgrade -y
Sur Rocky Linux ou AlmaLinux :
sudo dnf update -y
Connexion SSH sécurisée
Avant d'exposer un service, sécurisez l'accès. Générez une paire de clés côté client :
ssh-keygen -t ed25519 -C "admin-postgres"
Copiez la clé publique sur le VPS, puis désactivez l'authentification par mot de passe dans /etc/ssh/sshd_config une fois la connexion par clé validée.
Installer PostgreSQL sur un VPS Debian, Ubuntu, Rocky ou Alma
La méthode diffère légèrement selon la distribution. Deux stratégies existent : utiliser le paquet fourni par la distribution, ou installer depuis le dépôt officiel PostgreSQL (PGDG) pour obtenir une version majeure récente et à jour. Pour un environnement de production en 2026, le dépôt officiel est fortement recommandé.
Installation via le dépôt officiel sur Debian/Ubuntu
Ajoutez le dépôt PGDG, importez la clé de signature puis installez :
sudo apt install -y curl ca-certificates
sudo install -d /usr/share/postgresql-common/pgdg
sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc \
https://www.postgresql.org/media/keys/ACCC4CF8.asc
echo "deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] \
https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" \
| sudo tee /etc/apt/sources.list.d/pgdg.list
sudo apt update
sudo apt install -y postgresql-17
Installation sur Rocky Linux / AlmaLinux
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo dnf -qy module disable postgresql
sudo dnf install -y postgresql17-server
sudo /usr/pgsql-17/bin/postgresql-17-setup initdb
Démarrer et activer le service
Une fois le paquet installé, activez le service pour qu'il démarre au boot :
sudo systemctl enable --now postgresql
sudo systemctl status postgresql
Vérifiez que PostgreSQL écoute bien :
sudo -u postgres psql -c "SELECT version();"
Première connexion et création d'un rôle
Le superutilisateur système postgres est créé automatiquement. Ouvrez une session :
sudo -u postgres psql
Créez ensuite un rôle applicatif dédié et une base, sans jamais utiliser le compte postgres pour vos applications :
CREATE ROLE app_user WITH LOGIN PASSWORD 'un_mot_de_passe_robuste';
CREATE DATABASE app_db OWNER app_user;
GRANT ALL PRIVILEGES ON DATABASE app_db TO app_user;
\q
Configurer, sécuriser et exposer PostgreSQL sur le réseau
Par défaut, PostgreSQL n'écoute que sur localhost. C'est le comportement le plus sûr. Si votre application tourne sur le même VPS, laissez-le ainsi. Si vous avez besoin d'un accès distant, il faut configurer précisément l'écoute réseau et le contrôle d'accès.
Configuration de l'écoute réseau
Localisez les fichiers de configuration :
sudo -u postgres psql -c "SHOW config_file;"
Éditez postgresql.conf pour ajuster l'adresse d'écoute. Évitez listen_addresses = '*' en production ; préférez une IP précise, idéalement sur un réseau privé :
listen_addresses = '10.0.0.5'
port = 5432
Contrôle d'accès avec pg_hba.conf
Le fichier pg_hba.conf gère l'authentification par client. Utilisez scram-sha-256, plus robuste que md5 :
# TYPE DATABASE USER ADDRESS METHOD
host app_db app_user 10.0.0.0/24 scram-sha-256
Rechargez la configuration après modification :
sudo systemctl reload postgresql
Pare-feu : n'exposez que le strict nécessaire
Configurez ufw pour restreindre l'accès au port 5432 à une source connue uniquement :
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow from 10.0.0.0/24 to any port 5432 proto tcp
sudo ufw enable
sudo ufw status verbose
Pour un contrôle plus fin, nftables permet des règles atomiques et un filtrage stateful performant. Ne laissez jamais PostgreSQL ouvert à 0.0.0.0/0.
Chiffrement TLS des connexions
Pour toute connexion distante, activez SSL. Générez un certificat (Let's Encrypt ou interne) et renseignez dans postgresql.conf :
ssl = on
ssl_cert_file = '/etc/postgresql/ssl/server.crt'
ssl_key_file = '/etc/postgresql/ssl/server.key'
Assurez-vous que la clé privée est en droits 600 et détenue par l'utilisateur postgres. Côté client, forcez sslmode=verify-full pour éviter les attaques d'interception.
Protéger le service avec fail2ban
PostgreSQL logge les tentatives d'authentification échouées. Créez un filtre fail2ban ciblant ces entrées pour bannir automatiquement les IP abusant du service. Combiné aux clés SSH uniquement et au 2FA sur le panel de gestion, cela réduit fortement la surface d'attaque.
La protection contre les attaques volumétriques (DDoS) est déjà assurée au niveau kernel côté infrastructure OmegaCloud, de façon transparente. Votre travail de sécurisation se concentre donc sur l'accès logique, l'authentification et le chiffrement applicatif.
Optimiser les performances de PostgreSQL sur VPS SSD SAS
Une installation par défaut est conservatrice. Sur un VPS moderne avec RAM confortable et NVMe Gen4, quelques paramètres méritent un ajustement pour exploiter le matériel sans tomber dans le sur-tuning.
Paramètres mémoire clés
| Paramètre | Rôle | Valeur indicative |
|---|---|---|
| shared_buffers | Cache mémoire PostgreSQL | ~25% de la RAM |
| effective_cache_size | Estimation cache OS + PG | ~50-75% de la RAM |
| work_mem | Mémoire par opération de tri | 16-64 Mo selon charge |
| maintenance_work_mem | VACUUM, index | 256 Mo - 1 Go |
| max_connections | Connexions simultanées | 100-200 (via pooler au-delà) |
Adapter le stockage NVMe
Sur du NVMe, réduisez random_page_cost car l'accès aléatoire est quasi aussi rapide que le séquentiel. Cela influence favorablement le planificateur de requêtes :
random_page_cost = 1.1
effective_io_concurrency = 200
Connection pooling
PostgreSQL gère mal un très grand nombre de connexions courtes. Pour une application web, un pooler comme PgBouncer en mode transaction réduit drastiquement la charge et la consommation mémoire. C'est souvent l'optimisation la plus rentable avant même de toucher au matériel.
Sauvegardes automatisées
Aucune installation n'est complète sans stratégie de sauvegarde. Combinez un dump logique régulier et des snapshots de disque :
pg_dump -U app_user -Fc app_db > /backups/app_db_$(date +%F).dump
Planifiez la tâche via cron ou un timer systemd, et testez régulièrement la restauration. Le panel de gestion permet en complément de créer des snapshots du VPS en un clic, utiles avant une migration majeure de version.
Automatiser le déploiement
Pour reproduire une installation à l'identique, scriptez l'ensemble et intégrez-le à votre pipeline. Les Integrations & API OmegaCloud permettent de provisionner un VPS via API REST puis de déclencher la configuration PostgreSQL depuis GitHub Actions ou GitLab CI. Le provisioning Terraform est annoncé sur la roadmap pour aller plus loin dans l'infrastructure-as-code.
Pour approfondir la configuration serveur, la documentation officielle reste la référence : Source. Vous pouvez aussi consulter les bonnes pratiques de durcissement système sur Source.
Une fois votre base opérationnelle, pensez à surveiller CPU, RAM, I/O disque et réseau depuis le dashboard temps réel du panel OmegaCloud, afin de détecter rapidement une saturation avant qu'elle n'impacte vos requêtes.
Conclusion
Installer PostgreSQL sur un VPS demande de la rigueur : version récente via le dépôt officiel, écoute réseau restreinte, authentification scram-sha-256, TLS activé, pare-feu strict et paramètres mémoire adaptés au NVMe. En suivant cette méthode, vous obtenez une base fiable, sécurisée et performante, prête pour la production, sans dépendre d'une configuration par défaut trop conservatrice.
FAQ
Faut-il exposer PostgreSQL sur Internet ou le garder en local ?
Gardez-le sur localhost si l'application tourne sur le même VPS. Pour un accès distant, privilégiez un réseau privé, activez TLS, utilisez pg_hba.conf avec des plages IP précises et un pare-feu restrictif. N'exposez jamais le port 5432 en 0.0.0.0/0.
Quelle version de PostgreSQL choisir en 2026 ?
Optez pour une version majeure récente et supportée via le dépôt PGDG officiel, qui garantit les mises à jour de sécurité. Évitez les versions en fin de vie. Vérifiez la compatibilité de vos extensions et de votre application avant toute migration majeure.
Comment améliorer les performances sans changer de VPS ?
Ajustez shared_buffers, effective_cache_size et work_mem selon votre RAM, abaissez random_page_cost sur NVMe, et ajoutez un connection pooler comme PgBouncer. Ces optimisations logicielles apportent souvent un gain net avant d'envisager plus de ressources matérielles.
Prêt à mettre en pratique ce que vous venez de lire ?
Découvrir nos offres

