Déploiement
Déploiement • Chapitre 7 : Déploiement et connexion à une base de données

Déploiement d'une base MySQL

Installez, sécurisez et configurez un serveur MySQL ou MariaDB sur votre serveur Linux : exécution de mysql_secure_installation, encodage UTF8MB4 et création de l'utilisateur dédié.

🐬
Moteur MySQL Server

Le système de gestion de bases de données relationnelles le plus populaire du web.

🛡️
mysql_secure_installation

Script indispensable supprimant les comptes anonymes et la base test par défaut.

🌐
Encodage utf8mb4

Support natif de tous les alphabets internationaux et des émojis sans troncature.

👤
Compte Applicatif Dédié

Création d'un utilisateur non-root restreint à la seule base de données du projet.

mysql-install-and-secure.sql
# 1. Installer le serveur MySQL sur Ubuntu/Debian
$ sudo apt update && sudo apt install -y mysql-server

# 2. Exécuter le script d'assainissement de sécurité officiel
$ sudo mysql_secure_installation
# -> Activer le plugin de validation de mot de passe ? Oui (Fort)
# -> Supprimer les utilisateurs anonymes ? Oui
# -> Interdire la connexion root à distance ? Oui
# -> Supprimer la base de données test ? Oui
# -> Recharger les tables de privilèges ? Oui

# 3. Se connecter en root et créer la base de production et son utilisateur
$ sudo mysql -u root

-- Dans l'invite mysql> :
CREATE DATABASE app_production CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'CleRobuste_987#Securite!';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON app_production.* TO 'app_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Guide Approfondi & Architecture Système

1. Pourquoi l'Encodage 'utf8mb4' est-il obligatoire ?

À l'origine, le jeu de caractères utf8 de MySQL n'utilisait que 3 octets par caractère.
Le problème : Les émojis modernes (🎉, 🚀) et certains caractères asiatiques nécessitent 4 octets. Si un utilisateur insérait un émoji dans un commentaire, MySQL tronquait le texte ou renvoyait une erreur fatale ! L'encodage utf8mb4 résout définitivement ce problème.

2. Sécurité : 'localhost' vs '%'

Lors de la création de l'utilisateur :
  • 'app_user'@'localhost' : L'utilisateur n'a le droit de se connecter que si la requête provient de la machine locale. C'est le réglage parfait si l'API Node et MySQL tournent sur le même VPS.
  • 'app_user'@'%' : L'utilisateur peut se connecter depuis n'importe quelle adresse IP du monde. À proscrire formellement en production sans filtrage réseau strict !

Tableau Récapitulatif : Privilèges SQL Recommandés

Privilège SQLNécessaire en Production ?Rôle
SELECT, INSERT, UPDATE, DELETEOui (Obligatoire)Opérations courantes de lecture et d'écriture de l'application
CREATE, ALTER, INDEXOui (Si migrations automatiques)Permet aux ORMs (Prisma, TypeORM) de modifier la structure
DROP TABLEÀ évaluer prudemmentSuppression de tables obsolètes lors de migrations
SUPER, SHUTDOWN, GRANT OPTIONNON (Strictement interdit)Réservé au compte root pour l'administration système