Configuration d'un serveur LAMP sous CentOS 7


Introduction

Ce guide commence où nous avait laissé notre configuration initiale du serveur CentOS 7. Maintenant que nous disposons d'un système de base "propre et net", nous allons le doter de programmes qui vont en faire un "vrai" serveur. À terme, nous voulons permettre à plusieurs utilisateurs indépendants d'héberger des sites web, avec la possibilité d'utiliser des CMS ou autres sites dynamiques. 

Le terme LAMP est un acronyme reprenant les initiales de plusieurs logiciels libres :
  • Linux : le système d'exploitation ( GNU/Linux )
  • Apache : le serveur Web
  • MySQL ou MariaDB : le serveur de bases de données
  • Php : le langage de script
Les créateurs de ces différents éléments ne se sont pas concertés, mais le côté libre et donc gratuit de ceux-ci, ainsi que le fait qu'on les trouve sur tous les systèmes Linux ont popularisé l'usage de l'ensemble comme un seul "package"...
Cette technologie permet de construire des Serveurs Web à faible coût, pour l’hébergement de sites dynamiques ou statiques, simples ou extrêmement complexes.

A. Installation de MariaDB

Commençons par installer MariaDB. Ce logiciel est un serveur de bases de données, c'est à dire un logiciel créé afin d'héberger et d'exploiter des données sous forme de tables, reliées entres elles, le tout de manière rapide, structurée et fiable.
Imaginons par exemple que l'on veuille gérer une bibliothèque, on pourrait alors imaginer une table avec les divers auteurs, une autre avec les livres, une autre encore avec les clients qui empruntent les livres etc.
# Installation et configuration du serveur de bases de données
yum -y install mariadb-server mariadb
systemctl start mariadb.service
systemctl enable mariadb.service
mysql_secure_installation
La première commande systemctl lance le service, et la seconde s'assure que ce service sera lancé automatiquement à chaque démarrage du système (enable=active). La dernière commande s'occupe de la configuration initiale du serveur de base de données afin de la sécuriser au maximum. Il suffit alors de suivre l'assistant et de répondre aux questions de configuration :
19:01 root@serveur.bureau.maison ~ $ mysql_secure_installation

"NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): "Vide la première fois"
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] "Y ou ENTER"
New password: "un_bon_mot_de_passe"
Re-enter new password: "un_bon_mot_de_passe"
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] "Y ou ENTER"
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] "Y ou ENTER"
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] "Y ou ENTER"
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] "Y ou ENTER"
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!"
Notre serveur de base de données est maintenant installé, démarré et configuré.

B. Installation du serveur web Apache

Un serveur Web désigne un ordinateur apte à publier des sites Web, c'est à dire à répondre aux navigateurs en leur renvoyant des pages Web selon le protocole correspondant, à savoir HTTP. Au niveau du software, ce terme représente par extension le programme tournant sur le serveur et chargé de ce travail. Nous allons utiliser Apache, un des logiciels libres les plus connus avec nginx et lighttpd.
# Installation, démarrage et activation d'Apache
yum -y install httpd
systemctl start httpd.service
systemctl enable httpd.service
# Ouverture permanent du port 80 dans le firewall
firewall-cmd --permanent --zone=public --add-service=http 
firewall-cmd --reload
La commande firewall-cmd, comme son nom l'indique permet de configurer le firewall intégré dans CentOS. À l'issue de ces commande, la page Web par défaut d'Apache devrait être visible depuis la machine hôte (ou depuis tout autre ordinateur du réseau local) en écrivant comme adresse l'adresse IP du serveur :

C. Installation de PHP

Php est un langage de programmation libre principalement utiliser pour produire des pages Web via un serveur Web. La page reçue par le client est ainsi générée à la demande, et non écrite de manière statique par le créateur du site.
On parle alors de pages dynamiques. Cela permet par exemple au programme d'aller chercher des adresses dans un base de données avant de les mettre sous forme d'un tableau HTML est d'envoyer le tout au client en quelque dixième de secondes !
# installation de php ainsi que du module de liaison vers MariaDB
yum -y install php php-mysql
# installation de divers modules complémentaires à PHP
yum -y install php-gd php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap curl curl-devel
# création d'un fichier de test PHP
echo "<?php phpinfo(); ?>" > /var/www/html/index.php
# on pourrait aussi éditer le fichier /var/www/html/index.php
# et y écrire "" nous même...
# il est nécessaire de redémarrer Apache pour que celui-ci
# prenne les changements en compte
systemctl restart httpd.service
À nouveau, nous pouvons tester en rafraîchissant la page d'accueil du serveur. Nous obtenons alors une page d'informatique sur le programme PHP installé, ses modules, etc.

Installation de PhpMyAdmin

L'administration et l'utilisation d'un serveur de bases de données n'est pas chose facile : il faut connaître le langage SQL, ainsi que les spécificité de la plateforme sur laquelle le programme tourne.
Maintenant que Apache, MariaDB et PHP sont installé, nous pouvons installer un outil simplifiant la gestion des bases de données et de leurs utilisateurs : phpMyAdmin. Il s'agit d'une interface de gestion sous la forme d'un site Web, et donc accessible via le navigateur sur une adresse précise.
Commençons par installer le programme.
rpm -ivh http://epel.mirror.net.in/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
yum -y install phpMyAdmin
Ensuite, il s'agit de modifier le un fichier de configuration de liaison avec Apache pour rendre le site de gestion accessible depuis des adresses extérieures au serveur.
Pour cela, il faut éditer le fichier en question :
vim /etc/httpd/conf.d/phpMyAdmin.conf
Dans celui-ci, il faut opérer quelques changements pour que
# phpMyAdmin - Web based MySQL browser written in php
#
# Allows only localhost by default
#
# But allowing phpMyAdmin to anyone other than localhost should be considered
# dangerous unless properly secured by SSL

Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin

<Directory /usr/share/phpMyAdmin/>
   AddDefaultCharset UTF-8

   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
       Require ip 127.0.0.1
       Require ip ::1
     </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
   </IfModule>
</Directory>
devienne :
# phpMyAdmin - Web based MySQL browser written in php
#
# Allows only localhost by default
#
# But allowing phpMyAdmin to anyone other than localhost should be considered
# dangerous unless properly secured by SSL

Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin

<Directory /usr/share/phpMyAdmin/>
   AddDefaultCharset UTF-8

  <IfModule mod_authz_core.c>
    # Apache 2.4
    <RequireAny>
      Require all granted
    </RequireAny>
  </IfModule>
  <IfModule !mod_authz_core.c>
    # Apache 2.2
    Order Deny,Allow
    AllowOverride None
    Options None
    Allow from All
    Require all granted
  </IfModule>
</Directory>
Recharger ensuite le serveur Web :
systemctl restart httpd.service
Pour accéder à l'interface de gestion, il faut ajouter "/phpMyAdmin" à la fin de l'URL dans le navigateur (ie : http://192.168.1.21/phpMyAdmin). Après identification, vous devriez voir apparaître l'écran suivant...
Notre serveur LAMP est à présent complet. Dans un prochain article, nous verrons comment ajouter un serveur FTP et configurer Apache pour que plusieurs utilisateurs puissent héberger chacun leur site autonome...