Ce mémo a été publié le 9 août 2015 et peut contenir des informations qui peuvent être incomplètes, non mises à jour voir erronées du fait de son ancienneté. N'hésitez pas à compléter votre recherche sur des articles plus récents.

Avertissement

Je rappel que les tutoriels présentés doivent permettre de créer une infrastructure web dans un environnement de test, le plus proche possible d’un serveur de production se rapprochant d’un serveur mutualisé chez un hébergeur comme 1&1.

Cette infrastructure présente les bases de la configuration et ne possède aucun moyen de défense contre d’éventuelles intrusions.

Par conséquent, vous êtes seul responsable si vous vous contentez de suivre ce tutoriel pour une mise en ligne d’un serveur web sur internet avec un accès public.

Vous voilà averti, passons aux choses sérieuses.

Introduction

Ce tuto fait parti d’un ensemble qui conduit à créer une infrastructure de serveurs web avec différents rôles en utilisant VirtualBox : “[Tuto – Infrastructure Web – Debian 8] – Présentation et objectifs”.

L’objectif est de mettre en place dans votre vlan un serveur virtuel avec MySQL (ou Percona).
Vous devez avoir suivi le « [Tuto – Infrastructure Web – Debian 8] – Le serveur proxy et reverse proxy » pour y intégrer cette VM.

Ce tutoriel a juste la prétention de pouvoir donner les bases pour installer MySQL ou Percona sur un serveur Debian 8 Jessie.
Tout ce qui est test de charge et tuning fera l’objet d’un autre tutoriel.

Cloner la machine gabarit

Dans ce tutoriel, je vais la nommer « jbnet-db » et lui attribuer une ip 192.168.2.20.
Lors de la création du proxy, nous avions utilisé l’ip 192.168.2.1 pour la carte eth1.
Cette ip sera utilisée comme passerelle (gateway) dans la configuration de la carte eth0 du serveur web.

Il vous faut tout d’abord cloner et configurer la machine gabarit préparée dans “[Tuto – Infrastructure Web – Debian 8] – La machine gabarit” puis dans “[Tuto – Infrastructure Web – Debian 8] – Cloner et préparer la machine gabarit“.

Pour mémo, voici le fichier /etc/network/interface.d/eth0.conf

La ligne dns-nameservers est paramétrée avec les DNS de chez SFR, mon FAI.
Vous pouvez changer ces valeurs par les vôtres.

Configuration de la VM

Avant de démarrer la VM « jbnet-db », il faut faire quelques ajustements dans sa configuration.

Pour la mémoire, 1024 Mo suffisent largement pour commencer. SI vous pouvez aller jusqu’à 2048 Mo c’est encore mieux.
Si possible, modifiez le nombre de processeurs à 2.
Vous pourrez ajuster en fonction des besoins.
Dans « Réseau », vous devez avoir le mode d’accès réseau de la carte 1 positionnée sur « Réseau interne ».

Connexion SSH

Étant donné que la VM n’est pas sur le même réseau que vous, vous devrez d’abord vous connecter en SSH sur le proxy.
Puis, à partir du proxy, vous pourrez vous connecter à la VM « jbnet-web01 »

Commande pour se connecter en SSH à partir de la VM proxy :

A la première connexion, vous devrez confirmer.

Il ne vous reste plus qu’à vous connecter avec root avec la commande « su -« .

Pour fermer la session, utilisez la combinaison de touche « Ctrl+D », plusieurs fois si nécessaire.

MySQL

Installation

Durant l’installation, il faut saisir un mot de passe root :

Debian - Installation de MySQL - Mot de passe root

Sécuriser (un peu) MySQL

Une fois l’installation terminée, il faut sécuriser un minimum votre serveur MySQL.

Percona Server

Présentation

Percona Server est un fork boosté de MySQL spécialement dédié pour la haute disponibilité.
Plus d’informations : « Percona Server– An enhanced, drop-in MySQL Replacement »

Installation

L’installation officielle est décrite sur le site de Percona.

Je l’ai un peu adapté.

Ajoutez la clé apt :

Il fût un temps sous Debian 7 Wheezy où la récupération de la clé ne fonctionnait pas.
Vous pouvez créer un fichier /root/percona.key :

Puis ajoutez cette clé :

Créez le fichier /etc/apt/sources.list.d/percona.list :

Mettez à jour les dépôts et installez Percona :

Tout comme MySQL, il est nécessaire de définir un mot de passe root :

Debian 8 Jessie - Percona installation

A la fin de l’installation, il est demandé d’exécuter 3 commandes.

Puisque votre utilisateur root possède un mot de passe, il est nécessaire d’ajouter le paramètre « -p » à la fin et de saisir le mot de passe :

Sécuriser (un peu) Percona

Une fois l’installation terminée, il faut sécuriser un minimum votre serveur Percona (tout comme MySQL).

Bon à savoir

Percona met a disposition un générateur de fichier my.cnf : Percona Tools

Un questionnaire vous est proposé afin de déterminer la configuration recommandée par Percona.
Les points important sont le nombre de CPU, la taille de la mémoire, le nombre de tables estimé.

Pour un serveur de test, je conseille de décocher « Enable binary logging » qui risque de saturer votre disque dur.

Également pour les même raison, je n’ai rien coché sur la page « Configure Safety Options ».

Avant de remplacer le fichier d’origine, arrêter le service MySQL et faites une sauvegarde du fichier /etc/mysql/my.cnf :

Voilà le résultat :

Sur un serveur Debian, il faut cependant adapter les paramètres socket, pid-file, log-error et slow-query-log-file.
Ce qui donne au final pour un serveur avec 2 coeurs et 2 Go de mémoire vive :

Relancer le serveur Percona :

Si le serveur ne lance pas correctement, c’est qu’il y a une erreur dans les chemins d’accès ou que la précédente instance de Perconna est toujours en mémoire et qu’il faut la killer.

Accès distant dans le vlan

Par défaut, MySQL ou Percona ne sont accessibles que par localhost (127.0.0.1).
C’est le paramètre bind-address qui gère cette restriction.

Afin de ne pas toucher au fichier /etc/mysql/my.cnf, nous allons le surcharger en créant un fichier /etc/mysql/conf.d/jbnet.cnf.
Cette technique permet de remplacer le fichier my.cnf par les nouvelles versions lors d’une mise à jour.
Et ainsi de profiter des nouveautés.
Sauf si vous avez remplacé le fichier my.cnf pour Percona comme vu plus haut.

Ajouter dans le fichier /etc/mysql/conf.d/jbnet.cnf les lignes :

Enregistrez le fichier et relancez le service MySQL (qui est le même pour Percona) :

Attention, cette configuration n’est pas sécurisée.
Elle ne doit en aucun cas être mise en place sur un serveur MySQL ou Percona dont l’accès peut se faire directement à partir d’internet.
Il est possible de sécuriser l’accès en utilisant des règles de firewall NetFileter (iptables).

Testez l’accès distant à partir de la VM jbnet-web01.
Vous devez au préalable installer les outils MySQL-Client :

Si vous avez installé Percona, ajoutez les dépôts et installez ce paquet :

Si vous aviez déjà installé les outils MySQL-Client, ils seront désinstallés et remplacés :

Ligne de commande pour se connecter à distance sur un serveur MySQL :

Puisque vous avez exécuté « mysql_secure_installation » et refusé l’accès distant à root, vous devriez avoir un refus :

Vous allez devoir créer un utilisateur avec les droits d’accès distant.

Sur le serveur jbnet-db, connectez-vous à MySQL avec l’utilisateur root :

Exécutez cette commande pour ajouter l’utilisateur jbnet-user avec le mot de passe test1234 et l’autorisation de se connecter à partir du serveur 192.168.2.10 (jbnet-web01).
Cet utilisateur possède un niveau administrateur et des accès distant à toutes les bases de données.
Il n’est donc pas conseillé de l’utiliser sur les sites web que vous allez héberger dans votre vlan (comme une application type WordPress ou Magento).
Encore moins sur un serveur en production.

Et rechergez les droits pour les appliquer :

Testez la connexion à partir du serveur jbnet-web01 :

Vous pouvez ajouter le mot de passe directement dans la ligne de commande, sans espace avec le paramètre -p.
Ce n’est pas conseillé, car Linux enregistre l’historique des commandes dans le fichier ~/.bash_history et donc le mot de passe en clair.
Dans votre environnement de test, ce n’est pas grave, mais autant prendre de bonnes habitudes pour ne pas se faire avoir sur un serveur de production.

Résultat :

Tapez « SHOW DATABASES; » pour afficher les bases de données :

Tapez « exit » pour mettre fin à la connexion avec le serveur MySQL.

Félicitation, votre serveur web a accès au serveur MySQL dans votre vlan.