Pourquoi heberger sa base de donnees sur son propre VPS
Auto-heberger votre base sur VPS vous donne un controle total sur la version du moteur, les parametres de tuning, le chiffrement et la latence reseau vers votre application. Plutot que de subir les limites de connexions et le surcout d'une base manageee, vous co-localisez la base et l'app sur le meme reseau prive pour des reponses en sub-milliseconde. PostgreSQL excelle sur les schemas complexes, les contraintes strictes, le JSONB indexable, les requetes analytiques et les extensions (PostGIS, pg_trgm, recherche full-text). MySQL (ou MariaDB) reste imbattable de simplicite, tres bien supporte par les CMS et frameworks PHP, avec des lectures rapides. Le bon choix depend de la nature de vos donnees, pas d'une preference de principe.
Ce que l'auto-hebergement apporte a votre base
- Latence minimale en placant la base sur le meme reseau prive que l'application
- Maitrise totale du tuning :
shared_buffers,innodb_buffer_pool_size, connexions max - Choix libre de la version et du calendrier de mise a jour
- Sauvegardes logiques et physiques planifiees selon vos besoins reels
- Replication et lecture distribuee configurees a votre main
- Chiffrement au repos et acces restreint au seul reseau interne du VPS
Prerequis pour une base de donnees sur VPS
Une base de developpement ou un petit site vit confortablement sur 1 vCPU et 1 Go de RAM. En production, la regle d'or est de dimensionner la RAM pour que l'index de travail tienne en cache : visez 2 a 4 Go pour PostgreSQL (shared_buffers autour de 25% de la RAM) et un innodb_buffer_pool_size couvrant votre jeu de donnees actif pour MySQL. Un disque SSD/NVMe est non negociable pour les ecritures. Prevoyez Docker et Compose, un volume persistant dedie aux donnees, et surtout : n'exposez jamais le port de la base sur Internet. L'acces se fait via le reseau Docker interne ou un tunnel SSH.
Deployer PostgreSQL (ou MySQL) sur VPS avec Docker
Creer un volume persistant
Definissez un volume nomme pgdata (ou mysqldata) dans Compose. Ne stockez jamais les donnees dans la couche ephemere du conteneur : un docker compose down ne doit pas detruire votre base.
Configurer le service et les secrets
Declarez l'image postgres:16 ou mysql:8, injectez les identifiants via un fichier .env (jamais en clair dans le compose), et bindez le port uniquement en local : 127.0.0.1:5432:5432. La base ne doit pas etre joignable depuis l'exterieur.
Demarrer et verifier
Lancez docker compose up -d puis testez la connexion en interne avec docker compose exec db psql -U app -d maBase (ou mysql -u). Verifiez l'encodage (UTF8/utf8mb4) des la creation pour eviter les surprises.
Appliquer le tuning
Montez un fichier de config personnalise pour ajuster shared_buffers, work_mem et max_connections (PostgreSQL) ou innodb_buffer_pool_size et max_connections (MySQL) en fonction de la RAM reelle du VPS. Redemarrez le service pour appliquer.
Mettre en place les sauvegardes
Planifiez un dump regulier via cron : pg_dump ou mysqldump compresse, copie hors du VPS. Testez la restauration : une sauvegarde jamais restauree n'est pas une sauvegarde.
Securiser l'acces applicatif
Faites communiquer l'app et la base via le reseau Docker interne uniquement. Pour un acces admin distant, passez par un tunnel SSH plutot que d'ouvrir le port. Creez un utilisateur applicatif aux droits limites, distinct du super-utilisateur.
| Critere | PostgreSQL | MySQL / MariaDB |
|---|---|---|
| Modele de donnees | Riche : types personnalises, tableaux, JSONB | Solide, plus classique |
| Support JSON | JSONB indexable et performant | JSON present, indexation plus limitee |
| Conformite SQL / contraintes | Tres stricte (CHECK, types, transactions DDL) | Plus permissive |
| Recherche full-text / geo | Native + PostGIS, pg_trgm | Basique, extensions tierces |
| Lectures simples haute frequence | Tres bonnes | Excellentes, tres optimisees |
| Replication | Streaming, logique | Maitre-esclave, simple a mettre en place |
| Ecosysteme CMS/PHP | Bon | Reference (WordPress, etc.) |
| Empreinte memoire | Moderee | Legere a moderee |
Quel que soit le moteur, ne laissez jamais une application web ouvrir une connexion directe par requete : sur PostgreSQL placez PgBouncer en pooler, et sur MySQL ajustez max_connections avec un pool cote application. Un VPS qui s'effondre sous la charge a presque toujours un probleme de connexions non poolees plutot qu'un manque de puissance brute.