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.
Pourquoi installer PostgreSQL directement sur ton VPS ?
Pour héberger ta base de donnée, tu as deux options :
- « Database as a Service » (Supabase, Neon, PlanetScale…)
- 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.
Tip
Installer PostgreSQL sous Ubuntu
1sudo apt update2sudo apt install postgresql -y
Vérifie la version :
1psql --version2# 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.
1sudo -u postgres psql
1-- 1️⃣ créer le rôle2CREATE ROLE virgile WITH LOGIN PASSWORD 'MotDePasseUltraFort';3-- 2️⃣ créer la base4CREATE DATABASE react_router_7 OWNER virgile;5-- 3️⃣ quitter6\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 :
1DATABASE_URL="postgresql://virgile:MotDePasseUltraFort@localhost:5432/react_router_7"
Important
Exécuter les migrations Prisma
1npx 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 :
- Autorise ton IP publique dans le firewall Hostinger :
1Action: ACCEPT, Protocol: TCP, Port: 5432, Source: <ton-IP>
- Active la règle, mais ne laisse jamais
0.0.0.0/0en production.
PostgreSQL n’écoute que localhost ?
Par défaut, le service ne répond qu’en interne. Modifie :
1listen_addresses = '*'
et :
1host all all 0.0.0.0/0 md5
Puis :
1sudo systemctl restart postgresql
Tip
Réparer les erreurs courantes
| Message | Cause | Solution rapide |
|---|---|---|
psql: FATAL : role "virgile" does not exist | rôle mal créé | CREATE ROLE virgile WITH LOGIN PASSWORD… |
permission denied for database | base sans owner | ALTER ROLE virgile WITH SUPERUSER; ou recrée la base avec OWNER virgile |
database URL is invalid | mot de passe ou port | vérifie .env.production |
could not connect to server | firewall ou listen | ouvre port 5432 + listen_addresses='*' |
Ajouter la base staging (facultatif)
1CREATE DATABASE react_router_7_staging OWNER virgile;
Dans GitHub Secrets :
DATABASE_URL_STAGINGDATABASE_URL
Ton workflow GitHub Actions pourra cibler l’un ou l’autre
(docker-compose.staging.yml ↔ docker-compose.prod.yml).
Automatiser prisma migrate deploy dans l’image Docker
1RUN npm ci --omit=dev2+RUN npx prisma generate && npx prisma migrate deploy3RUN npm run build
Grâce à ça, chaque déploiement applique les migrations avant de démarrer le serveur – fini les oublis.
Warning
Sécurité : limiter les dégâts
- Mot de passe long + lettres/chiffres/caractères spéciaux.
- Pas de
SUPERUSERen prod : crée un rôleadminsi besoin. - Pare-feu ouvert uniquement à :
127.0.0.1(application sur le même VPS)- ton IP fixe pour la CLI.
- Backups automatiques : un simple
pg_dumpdans un cron + upload S3.
Checklist finale
-
apt install postgresql - Rôle + base dédiés (
virgile/react_router_7) -
DATABASE_URLdans.env.production - Port 5432 ouvert uniquement pour ton IP
- Migrations Prisma déployées sans erreur
- Commande
migrate deployajouté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 🚀
Note
Si tu décides plus tard de migrer vers un service managé,
le fichier .env.production sera la seule ligne à changer : Prisma
s’occupera du reste.
Comprendre les concepts fondamentaux
Quelle est la principale différence entre les composants client et serveur dans React ?
Optimisation des performances
Quelle technique est recommandée pour éviter les rendus inutiles dans React ?
Architecture des données
Quel hook permet de gérer les effets de bord dans un composant React ?