Configurer la base de données PostgreSQL sur ton VPS Ubuntu

Découvre comment installer PostgreSQL, sécuriser l’accès et connecter Prisma pour déployer efficacement ton app React Router 7.

4 min read
Déverrouillez votre potentiel

avec React Router 7

Vous en avez marre de...

❌ perdre du temps à chercher des informations éparpillées
❌ ne pas avoir de retour sur votre progression
Assistant IA spécialisé

Posez vos questions 24/7 à notre IA experte en React Router 7

Quiz interactifs

Validez vos acquis avec des quiz personnalisés et un feedback instantané

9 modules
53 leçons
Accès à vie
460.75

Pourquoi installer PostgreSQL directement sur ton VPS ?

Pour héberger ta base de donnée, tu as deux options :

  1. « Database as a Service » (Supabase, Neon, PlanetScale…)
  2. Installer PostgreSQL en local sur le même VPS que l’application.

Chez Algomax on a choisi la deuxième option pour toutes nos apps :

  • coût mini (un seul VPS à ~ 7 €/mois),
  • latence quasi nulle (base ⇆ serveur sur la même machine),
  • aucune complexité réseau supplémentaire.

Bien sûr, si ton produit vise des millions d’utilisateurs tu migreras un jour vers un service managé. Mais pour démarrer, rien ne bat la simplicité d’un apt install postgresql.


Installer PostgreSQL sous Ubuntu

install.sh
1
sudo apt update
2
sudo apt install postgresql -y

Vérifie la version :

Terminal
1
psql --version
2
# psql (PostgreSQL) 16.9

Le service est déjà démarré et tourne sous l’utilisateur système postgres.


Créer un utilisateur dédié et sa base

On ne travaille jamais avec l’utilisateur postgres en production ; créons un compte applicatif.

Terminal
1
sudo -u postgres psql
{1,3,5} psql
1
-- 1️⃣ créer le rôle
2
CREATE ROLE virgile WITH LOGIN PASSWORD 'MotDePasseUltraFort';
3
-- 2️⃣ créer la base
4
CREATE DATABASE react_router_7 OWNER virgile;
5
-- 3️⃣ quitter
6
\q

Nous avons :

  • virgile → login autorisé ;
  • react_router_7 → base attribuée à ce rôle.

Autoriser Prisma à se connecter

Dans le fichier .env.production qui sera injecté à Docker :

.env.production
1
DATABASE_URL="postgresql://virgile:MotDePasseUltraFort@localhost:5432/react_router_7"

Exécuter les migrations Prisma

Terminal
1
npx prisma migrate deploy

Si tout est vert : félicitations, l’app et la base parlent déjà la même langue ! Sinon lis la suite, tu vas sûrement croiser ces messages 👇


Ouvrir (un peu) l’accès réseau

Prisma CLI tourne sur ton ordinateur → il doit joindre le port 5432 de ton VPS :

  1. Autorise ton IP publique dans le firewall Hostinger :
    1
    Action: ACCEPT, Protocol: TCP, Port: 5432, Source: <ton-IP>
  2. Active la règle, mais ne laisse jamais 0.0.0.0/0 en production.

PostgreSQL n’écoute que localhost ?

Par défaut, le service ne répond qu’en interne. Modifie :

/etc/postgresql/16/main/postgresql.conf
1
listen_addresses = '*'

et :

/etc/postgresql/16/main/pg_hba.conf
1
host all all 0.0.0.0/0 md5

Puis :

Terminal
1
sudo systemctl restart postgresql

Réparer les erreurs courantes

MessageCauseSolution rapide
psql: FATAL : role "virgile" does not existrôle mal crééCREATE ROLE virgile WITH LOGIN PASSWORD…
permission denied for databasebase sans ownerALTER ROLE virgile WITH SUPERUSER; ou recrée la base avec OWNER virgile
database URL is invalidmot de passe ou portvérifie .env.production
could not connect to serverfirewall ou listenouvre port 5432 + listen_addresses='*'

Ajouter la base staging (facultatif)

Terminal
1
CREATE DATABASE react_router_7_staging OWNER virgile;

Dans GitHub Secrets :

  • DATABASE_URL_STAGING
  • DATABASE_URL

Ton workflow GitHub Actions pourra cibler l’un ou l’autre (docker-compose.staging.ymldocker-compose.prod.yml).


Automatiser prisma migrate deploy dans l’image Docker

Dockerfile {10}
1
RUN npm ci --omit=dev
2
+RUN npx prisma generate && npx prisma migrate deploy
3
RUN npm run build

Grâce à ça, chaque déploiement applique les migrations avant de démarrer le serveur – fini les oublis.


Sécurité : limiter les dégâts

  1. Mot de passe long + lettres/chiffres/caractères spéciaux.
  2. Pas de SUPERUSER en prod : crée un rôle admin si besoin.
  3. Pare-feu ouvert uniquement à :
    • 127.0.0.1 (application sur le même VPS)
    • ton IP fixe pour la CLI.
  4. Backups automatiques : un simple pg_dump dans un cron + upload S3.

Checklist finale

  • apt install postgresql
  • Rôle + base dédiés (virgile / react_router_7)
  • DATABASE_URL dans .env.production
  • Port 5432 ouvert uniquement pour ton IP
  • Migrations Prisma déployées sans erreur
  • Commande migrate deploy ajoutée au Dockerfile
  • Backups planifiés (cron + S3)

Ta base est désormais rapide, peu coûteuse et sous contrôle. Plus aucune raison d’attendre pour pousser le code sur staging puis sur production 🚀

Premium
Quiz interactif
Testez vos connaissances et validez votre compréhension du module avec notre quiz interactif.
1

Comprendre les concepts fondamentaux

Quelle est la principale différence entre les composants client et serveur dans React ?

Les composants client s'exécutent uniquement dans le navigateur
Les composants serveur peuvent utiliser useState
Les composants client sont plus rapides
Il n'y a aucune différence significative
2

Optimisation des performances

Quelle technique est recommandée pour éviter les rendus inutiles dans React ?

Utiliser React.memo pour les composants fonctionnels
Ajouter plus d'états locaux
Éviter d'utiliser les props
Toujours utiliser les class components
3

Architecture des données

Quel hook permet de gérer les effets de bord dans un composant React ?

useEffect
useState
useMemo
useContext
4

Gestion des erreurs

Comment implémenter la gestion des erreurs pour les requêtes API dans React ?

Utiliser try/catch avec async/await
Ignorer les erreurs
Toujours afficher un message d'erreur
Rediriger l'utilisateur
5

Déploiement et CI/CD

Quelle est la meilleure pratique pour déployer une application React en production ?

Utiliser un service CI/CD comme GitHub Actions
Copier les fichiers manuellement via FTP
Envoyer le code source complet
Ne jamais mettre à jour l'application

Débloquez ce quiz et tous les autres contenus premium en achetant ce cours