Partie 11 — Bases de données en prod
⏱️ TL;DR — Ton app tourne, Nginx la sert en HTTPS, elle redémarre toute seule. Il lui manque l’essentiel : un endroit où ranger les données. Cette partie branche une vraie base de production. Tu vas installer PostgreSQL, créer un rôle et une base dédiés à ton app, verrouiller les accès (
pg_hba.conf, écoute locale — jamais le port ouvert au monde), connaître l’alternative MySQL/MariaDB, apprendre à faire tenir la base (pooling, quelques réglages, où l’héberger) et surtout à la sauvegarder et restaurer. Fil conducteur : les données sont ce qu’on ne peut PAS perdre. Un serveur, ça se reprovisionne en une heure ; une base perdue sans sauvegarde, c’est fini — clients, cours, comptes, tout.
Le problème qu’on résout
Jusqu’ici, tout ce qu’on a mis en place est remplaçable. Le VPS a brûlé ? On en reprovisionne un et on redéploie le code depuis git en une après-midi. Nginx, systemd, les certificats : reconstructibles à l’identique. La base de données, non. Elle contient les inscriptions, les paiements, les progressions, les messages — ce que personne d’autre ne détient. C’est la seule pièce de ton infra dont la perte est irréversible.
D’où deux exigences qui traversent toute la partie. Un : la base ne doit jamais être accessible depuis Internet — un port 5432 ouvert au monde, c’est une fuite de données à retardement. Deux : la base doit être sauvegardée, et ces sauvegardes doivent être testées, chiffrées, et stockées ailleurs que sur le VPS. Le reste (installer, tuner) est de la mécanique ; ces deux points sont de la survie.
Ce que tu sauras faire à la fin de cette partie
- Installer PostgreSQL sur ton VPS, créer un rôle applicatif et une base dédiés, t’y connecter avec
psqlet depuis ton app via une chaîne de connexion. - Sécuriser l’accès : comprendre
listen_addresses, écrire des règlespg_hba.confcorrectes, et ne jamais exposer le port de la base à Internet. - Installer et durcir l’alternative MySQL/MariaDB (
mysql_secure_installation), et savoir quand choisir l’une ou l’autre. - Faire tenir la base sous charge : pooling de connexions, réglages mémoire clés (avec méthode, pas valeurs magiques), et arbitrer base locale vs base managée.
- Sauvegarder, automatiser et restaurer :
pg_dump/mysqldump, cron, rotation, offsite, chiffrement — et tester la restauration.
Les chapitres
| # | Chapitre | En un mot |
|---|---|---|
| 11.1 | Installer PostgreSQL | Le service, le rôle applicatif, la base, psql. |
| 11.2 | Accès & pg_hba | Écoute locale, pg_hba.conf, ne jamais exposer le port. |
| 11.3 | MySQL / MariaDB | L’alternative, le durcissement, quand la choisir. |
| 11.4 | Tuning & connexions | Pooling, réglages clés, locale vs managée. |
| 11.5 | Sauvegardes de base | Dump, cron, offsite, chiffrement, restaurer. |
Cette partie branche le cœur de données de ton app, en local et en sécurité. La Partie 12 — Docker & conteneurs montrera ensuite comment reproduire cet environnement (app + base) de façon portable et jetable.
On commence par le plus courant en prod moderne : Installer PostgreSQL.