Ce guide résume les différentes étapes pour configurer un serveur LAMP sur Manjaro. Il s’adresse aux personnes souhaitant mettre en place un espace dédié au développement web sur leur ordinateur personnel. Si vous n’utilisez pas Manjaro ou si vous l’utilisez sur un serveur en production, ce guide n’est sans doute pas adapté à vos besoins.

Préambule

Il y a quelques années, lorsque j’ai voulu installer LAMP sur ma distribution, j’ai commencé par chercher des tutoriels et des wikis. Je voulais m’assurer de ne pas oublier une étape et surtout, mes connaissances en serveur étant encore limitées, je préférais ne pas faire d’erreur.

Le wiki d’Arch Linux est sans doute le plus complet, mais les informations sont — ou, du moins, étaient — un peu éparpillées pour ce que je cherchais à faire. J’ai donc décidé de rassembler ces informations et d’en faire un guide correspondant à mes besoins. Depuis, je le fais évoluer lorsque j’ai besoin de réinstaller LAMP.

La date de publication n’est pas exacte puisqu’une ancienne version de ce guide existait sur mon ancien site. Elle correspond à cette nouvelle version qui a été mise à jour.

Qu’est-ce que LAMP ?

LAMP est un acronyme pour « Linux Apache MySQL PHP ». Il s’agit d’un ensemble de logiciels permettant de mettre en place un serveur web.

  • Linux désigne le système d’exploitation
  • Apache correspond au serveur HTTP
  • MySQL est un serveur de base de données
  • PHP est un langage de programmation

Il existe différentes variantes pour mettre en place un serveur web. Voici quelques exemples :

  • Linux peut être remplacé par Windows (WAMP) ou Mac (MAMP)
  • Apache peut être remplacé par Nginx (LEMP)
  • MySQL peut être remplacé par MariaDB ou PostgreSQL
  • PHP peut être remplacé par Python ou Perl

Notre but

Dans ce guide, nous allons installer un serveur LAMP opérationnel avec quelques fonctionnalités supplémentaires :

  • nous installerons et configurerons PHPMyAdmin pour gérer les bases de données,
  • nous activerons HTTPS pour avoir un environnement semblable à celui utilisé en production,
  • nous mettrons en place un dossier de travail dans notre « home »,
  • nous désactiverons le dossier public de notre « home »,
  • nous verrons comment créer des hôtes virtuels pour nos sites.

Au final, nous pourrons accéder à notre site dans un navigateur en saisissant https://www.projet.test/projet est le nom du site. Les fichiers de notre projet seront situés dans un dossier de notre « home » (ici, ce sera /home/votreNom/votreDossierDeTravail) et un lien symbolique dans /srv/http permettra à Apache d’y accéder.

Avant de commencer

Prérequis

  1. Utiliser Manjaro : je n’ai pas testé mais, logiquement, Arch Linux et ses dérivées devraient également être compatibles avec ce guide.
  2. Supporter les ACL : certaines parties du guide utilisent les listes de contrôle d’accès pour gérer les droits d’accès.

Si vous utilisez une distribution qui n’est pas basée sur Arch Linux, les étapes décrites dans ce guide ne seront pas adaptées à vos besoins. Vous pouvez vous en inspirer mais soyez certains de comprendre ce qui est écrit et ce que vous faîtes.

Conseils

  1. Penser à adapter les commandes si nécessaire : par exemple, dans les commandes, j’utilise l’éditeur de texte nano parce qu’il est simple d’utilisation ; vous utilisez peut-être un autre éditeur.
  2. Penser à remplacer les valeurs factices : certaines commandes et certains fichiers de configuration utilisent des valeurs factices (par exemple, votreDossierDeTravail ou projet.test), ces valeurs sont à remplacer avec vos propres données.
  3. Comprendre la notation diff : pour éviter de créer deux blocs de code quasiment identiques, j’utilise la notation diff pour indiquer les lignes à supprimer et celles à ajouter.
  4. Ne pas se fier aux numéros de ligne : ces numéros sont donnés à titre d’indication pour que vous retrouviez plus facilement la bonne section mais ils peuvent être différents pour vous suivant la version installée, vos précédents changements ou encore si vous avez sauté certaines étapes de ce guide. La notation diff peut également poser problème puisque j’utilise uniquement CSS pour définir les numéros de ligne (si plusieurs lignes sont supprimées, les numéros de ligne qui suivent ne sont plus fiables).

Étape 1 : Installer LAMP

Installation des paquets

Sur Manjaro, nous installerons MariaDB comme serveur de base de données SQL ; il s’agit d’un dérivé de MySQL.

Pour commencer, nous installons les paquets nécessaires avec pacman :

shell
Copié !
sudo pacman -S apache mariadb php php-apache

Lors de la rédaction du guide, les paquets étaient aux versions suivantes :

  • apache-2.4.62-1
  • mariadb-11.4.2-1
  • php-8.3.10-1
  • php-apache-8.3.10-1

Si certaines parties du guide vous semble différentes de ce que vous avez devant vous, c’est probablement dû à l’utilisation d’une autre version.

Configuration de MariaDB

Nous commençons par initialiser les tables :

shell
Copié !
sudo mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql

Ensuite, nous démarrons le service MariaDB avec la commande suivante :

shell
Copié !
sudo systemctl start mysqld

Finalement, nous allons sécuriser l’installation avec un script pré-installé :

shell
Copié !
sudo mariadb-secure-installation

Ce script va nous poser plusieurs questions pour nous aider. J’ai inclus les réponses à donner en tant que commentaire sous chaque question :

console
Copié !
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
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none):
# Pas de mot de passe, il faut presser la touche Entrée.
[...]
Switch to unix_socket authentication [Y/n]
# Nous répondons "N", nous utiliserons plutôt un mot de passe.
[...]
Change the root password? [Y/n]
# Nous répondons "Y", nous allons pouvoir définir le mot de passe pour root.
[...]
Remove anonymous users? [Y/n]
# Nous répondons "Y", nous supprimons les utilisateurs anonymes.
[...]
Disallow root login remotely? [Y/n]
# Nous répondons "Y", pour une installation plus sécurisée.
[...]
Remove test database and access to it? [Y/n]
# Nous répondons "Y", la base de donnée test ne nous est pas utile.
[...]
Reload privilege tables now? [Y/n]
# Nous répondons "Y", il faut recharger les tables.
[...]

Cleaning up...

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

Thanks for using MariaDB!

MariaDB est maintenant configuré. Il est possible de se connecter en root, de créer un nouvel utilisateur ou une nouvelle base de donnée. Comme nous allons utiliser PHPMyAdmin (voir l’étape 2), nous nous arrêtons là pour MariaDB.

Configuration de PHP

Il faut maintenant configurer PHP pour prendre en compte MariaDB. Éditons son fichier de configuration :

shell
Copié !
sudo nano /etc/php/php.ini

Nous devons dé-commenter les deux extensions liées à MySQL :

/etc/php/php.ini
Copié !
;extension=mysqli
extension=mysqli
;extension=odbc
;zend_extension=opcache
;extension=pdo_dblib
;extension=pdo_mysql
extension=pdo_mysql

Vous pouvez sauvegarder et fermer le fichier.

Configuration d’Apache

Nous pouvons maintenant configurer Apache :

shell
Copié !
sudo nano /etc/httpd/conf/httpd.conf

Le wiki d’Arch Linux nous précise qu’une librairie contenue dans le paquet php-apache génère une erreur avec mod_mpm_event.so. La documentation d’Apache explique que mod_mpm_prefork.so permet une plus grande stabilité et une meilleure compatibilité avec les logiciels anciens en comparaison avec mod_mpm_event.so.

Commençons par échanger ces deux modules :

/etc/httpd/conf/httpd.conf
Copié !
LoadModule mpm_event_module modules/mod_mpm_event.so
#LoadModule mpm_event_module modules/mod_mpm_event.so
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

Ensuite, pour gérer les redirections via htaccess, nous devons activer un autre module :

/etc/httpd/conf/httpd.conf
Copié !
#LoadModule rewrite_module modules/mod_rewrite.so
LoadModule rewrite_module modules/mod_rewrite.so

Puis, nous allons préciser le nom du serveur et le port à utiliser :

/etc/httpd/conf/httpd.conf
Copié !
#ServerName www.example.com:80
ServerName localhost:80

Finalement, il faut activer PHP. Pour cela, nous commençons par charger le module PHP :

/etc/httpd/conf/httpd.conf
Copié !
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule php_module modules/libphp.so

<IfModule unixd_module>

Puis, à la fin du fichier, nous rajoutons :

/etc/httpd/conf/httpd.conf
Copié !


# Load PHP
<IfModule php_module>
    AddHandler php-script .php
    Include conf/extra/php_module.conf
</IfModule>

Vous pouvez maintenant sauvegarder et fermer ce fichier. Vous pouvez démarrer le serveur Apache avec la commande suivante :

shell
Copié !
sudo systemctl start httpd

Le serveur LAMP est maintenant fonctionnel. Si vous accédez à http://localhost dans un navigateur, vous devriez voir une page semblable à celle ci-dessous :

Capture d’écran de localhost affiché dans le navigateur à la fin de cette étape
Le serveur retourne la racine de localhost

Toutefois, il nous reste encore quelques étapes pour atteindre notre but.

Étape 2 : Installer et configurer PHPMyAdmin

Commençons par installer le paquet :

shell
Copié !
sudo pacman -S phpmyadmin

Au moment de la rédaction du guide, la version utilisée était la suivante : phpmyadmin-5.2.1-1.

Puis, créons un fichier de configuration Apache dédié à PHPMyAdmin :

shell
Copié !
sudo nano /etc/httpd/conf/extra/httpd-phpmyadmin.conf

Dans ce fichier, nous allons insérer les instructions suivantes pour indiquer à Apache où se trouvent les fichiers de PHPMyAdmin :

/etc/httpd/conf/extra/httpd-phpmyadmin.conf
Copié !
# PHPMyAdmin
Alias /phpmyadmin "/usr/share/webapps/phpMyAdmin"
<Directory "/usr/share/webapps/phpMyAdmin">
    DirectoryIndex index.html index.php
    AllowOverride All
    Options FollowSymlinks
    Require all granted
</Directory>

Vous pouvez sauvegarder et fermer ce fichier. Il faut maintenant éditer la configuration d’Apache pour inclure celle de PHPMyAdmin :

shell
Copié !
sudo nano /etc/httpd/conf/httpd.conf

À la fin du fichier, nous ajoutons :

/etc/httpd/conf/httpd.conf
Copié !


# PHPMyAdmin configuration
Include conf/extra/httpd-phpmyadmin.conf

Vous pouvez sauvegarder et fermer ce fichier. Maintenant, nous devons configurer PHPMyAdmin lui-même. Pour pouvoir s’authentifier en utilisant des cookies, nous devons renseigner une clé pour blowfish_secret.

Pour générer cette phrase de passe, vous pouvez utiliser openssl par exemple :

shell
Copié !
openssl rand -base64 22

Notez la sortie de la commande et poursuivons en éditant le fichier de configuration de PHPMyAdmin :

shell
Copié !
sudo nano /usr/share/webapps/phpMyAdmin/config.inc.php

Nous allons utiliser notre phrase de passe dans la section suivante :

/usr/share/webapps/phpMyAdmin/config.inc.php
Copié !
/**
 * This is needed for cookie based authentication to encrypt the cookie.
 * Needs to be a 32-bytes long string of random bytes. See FAQ 2.10.
 */
$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
$cfg['blowfish_secret'] = 'votre-phrase-de-passe'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

Il faut maintenant définir un dossier temporaire pour PHPMyAdmin :

/usr/share/webapps/phpMyAdmin/config.inc.php
Copié !
/**
 * You can find more configuration options in the documentation
 * in the doc/ folder or at <https://docs.phpmyadmin.net/>.
 */

$cfg['TempDir'] = '/tmp/phpmyadmin';

Vous pouvez sauvegarder et fermer ce fichier. Puisque nous avons précédemment modifier la configuration d’Apache, nous devons redémarrer le service :

shell
Copié !
sudo systemctl restart httpd

PHPMyAdmin est maintenant disponible à l’URL http://localhost/phpmyadmin. Dans votre navigateur, vous devriez voir la page suivante :

Capture d’écran de la page d’accueil de PHPMyAdmin avec son formulaire de connexion
Le formulaire de connexion de PHPMyAdmin

Pour vous connecter en tant que « root », il faut que vous réutilisiez le mot de passe défini lors de la configuration de MariaDB. Il ne vous restera plus qu’à configurer les utilisateurs et bases de données suivant vos besoins.

Si vous êtes allé trop vite ou si vous avez décidé de ne pas définir de mot de passe pour l’utilisateur « root », vous ne pouvez pas vous connecter. Vous devez suivre les étapes suivantes pour ajouter ou modifier le mot de passe.

Premièrement il faut se connecter au serveur MySQL :

shell
Copié !
sudo mysql -u root -p

Ensuite, nous définissons un mot de passe pour l’utilisateur « root » :

sql
Copié !
ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD("votre-mot-de-passe");

Puis, nous nous déconnectons du serveur MySQL :

sql
Copié !
exit

Finalement, il ne reste plus qu’à redémarrer le service mysqld :

shell
Copié !
sudo systemctl restart mysqld

Étape 3 : Création d’un espace de travail dédié

Rappelez-vous, nous souhaitons qu’Apache lise les fichiers dans /srv/http. Le problème, pour nous, c’est que ce chemin nécessite les droits d’administrateur pour créer ou modifier des fichiers. Pour contourner ce problème, le plus simple est de se créer un espace de travail dans notre répertoire « home ».

Créer un dossier de travail dans sa « home »

Commençons par créer un dossier qui contiendra nos différents projets :

shell
Copié !
mkdir /home/votreNom/votreDossierDeTravail

Pour qu’Apache puisse accéder à ce dossier, il faut ajouter les droits de lecture et d’exécution à notre dossier « home » pour l’utilisateur « http ». Nous utiliserons les ACL :

shell
Copié !
sudo setfacl -m "u:http:r-x" /home/votreNom

Puis, nous répétons l’opération sur notre dossier de travail pour donner à Apache tous les droits, de manière récursive :

shell
Copié !
sudo setfacl -R -m "u:http:rwx" /home/votreNom/votreDossierDeTravail

Nous répétons la même opération que ci-dessus mais avec une option en plus pour définir ces droits comme droits par défaut pour tout nouveau fichier ou dossier :

shell
Copié !
sudo setfacl -d -R -m "u:http:rwx" /home/votreNom/votreDossierDeTravail

Vous pouvez vérifier les nouvelles permissions avec :

shell
Copié !
getfacl -p /home/votreNom/votreDossierDeTravail

La commande devrait produire la sortie suivante :

console
Copié !
# file: /home/votreNom/votreDossierDeTravail
# owner: votreNom
# group: votreNom
user::rwx
user:http:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:http:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

Mettre à jour le dossier racine de localhost

Commençons par créer le dossier qui servira de racine à localhost :

shell
Copié !
mkdir ~/votreDossierDeTravail/localhost

Nous avons également besoin d’un sous-dossier pour contenir les fichiers accessibles depuis le navigateur (ici, je le nomme htdocs mais vous pouvez utiliser un autre nom comme www) :

shell
Copié !
mkdir ~/votreDossierDeTravail/localhost/htdocs

Puis, créons un lien symbolique allant de notre dossier localhost vers /srv/http/default :

shell
Copié !
sudo ln -s /srv/http/default

Ensuite, éditons le fichier de configuration d’Apache :

shell
Copié !
sudo nano /etc/httpd/conf/httpd.conf

Nous devons remplacer la configuration par défaut avec le chemin vers notre nouvelle racine :

/etc/httpd/conf/httpd.conf
Copié !
#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/srv/http"
DocumentRoot "/srv/http/default/htdocs"
<Directory "/srv/http">
<Directory "/srv/http/default/htdocs">

Vous pouvez sauvegarder et fermer ce fichier.

Vous pouvez vérifier qu’Apache à bien accès à votre dossier htdocs avec la commande suivante :

shell
Copié !
getfacl -p /home/votreNom/votreDossierDeTravail/localhost/htdocs

La commande devrait produire la sortie suivante :

console
Copié !
# file: /home/votreNom/votreDossierDeTravail/localhost/htdocs
# owner: votreNom
# group: votreNom
user::rwx
user:http:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:http:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

Si ce n’est pas le cas, vous avez sans doute oublié la dernière commande (celle ajoutant les droits par défaut) à l’étape précédente.

Désactiver le dossier public

Par défaut, Apache est configuré pour permettre l’accès au répertoire $HOME/public_html depuis l’URL http://localhost/~user/. Puisque nous avons un espace de travail dédié, nous n’avons pas besoin de ce dossier public ; désactivons-le.

shell
Copié !
sudo nano /etc/httpd/conf/httpd.conf

Pour désactiver ce dossier, nous procédons à la modification suivante :

/etc/httpd/conf/httpd.conf
Copié !
# User home directories
Include conf/extra/httpd-userdir.conf
#Include conf/extra/httpd-userdir.conf

Vous pouvez sauvegarder et fermer ce fichier.

Étape 4 : Configuration de SSL

Installer et préparer mkcert

Pour utiliser SSL, il nous faut des certificats valides pour ne pas être bloqué par le navigateur. Nous allons utiliser mkcert. Il s’agit d’un outil pour créer des certificats approuvés localement.

shell
Copié !
sudo pacman -S mkcert

Lors de la rédaction du guide, la version utilisée était la suivante : mkcert-1.4.4-2.

Une fois le paquet installé, il faut installer le certificat racine (rootCA) en utilisant la commande suivante :

shell
Copié !
mkcert -install

Vous devriez voir la sortie suivante :

console
Copié !
Created a new local CA 💥
The local CA is now installed in the system trust store! ⚡️
The local CA is now installed in the Firefox and/or Chrome/Chromium trust store (requires browser restart)! 🦊

Vous pouvez vérifier le dossier d’installation avec la commande suivante :

shell
Copié !
mkcert -CAROOT

Créer un certificat pour localhost

Nous allons créer un dossier contenant le certificat et sa clé pour localhost :

shell
Copié !
mkdir ~/votreDossierDeTravail/localhost/certs

Puis, nous créons un certificat pour localhost (et 127.0.0.1). Soit vous vous déplacez dans le dossier et utilisez mkcert sans option :

shell
Copié !
cd ~/votreDossierDeTravail/localhost/certs
mkcert localhost 127.0.0.1

Soit, vous utilisez la commande suivante pour vous éviter un déplacement :

shell
Copié !
mkcert -key-file ~/votreDossierDeTravail/localhost/certs/localhost+1-key.pem -cert-file ~/votreDossierDeTravail/localhost/certs/localhost+1.pem localhost 127.0.0.1

La commande devrait retourner les informations suivantes :

console
Copié !
Created a new certificate valid for the following names 📜
 - "localhost"
 - "127.0.0.1"

The certificate is at "/home/votreNom/votreDossierDeTravail/localhost/certs/localhost+1.pem" and the key at "/home/votreNom/votreDossierDeTravail/localhost/certs/localhost+1-key.pem" ✅

It will expire on 13 November 2026 🗓

Activer SSL

Nous commençons par éditer le fichier de configuration de SSL :

shell
Copié !
sudo nano /etc/httpd/conf/extra/httpd-ssl.conf

Dans ce fichier, nous allons remplacer le nom du serveur et la racine de localhost :

/etc/httpd/conf/extra/httpd-ssl.conf
Copié !
#   General setup for the virtual host
DocumentRoot "/srv/http"
DocumentRoot "/srv/http/default/htdocs"
ServerName www.example.com:443
ServerName localhost:443
ServerAdmin you@example.com

Si vous avez un serveur mail fonctionnel, vous pouvez également modifier l’adresse email.

Nous allons ensuite ajouter le certificat précédemment généré pour localhost. Souvenez-vous, nous avons créé un lien symbolique donc nous n’avons pas besoin d’utiliser un chemin vers notre « home » :

/etc/httpd/conf/extra/httpd-ssl.conf
Copié !
SSLCertificateFile "/etc/httpd/conf/server.crt"
#SSLCertificateFile "/etc/httpd/conf/server.crt"
#SSLCertificateFile "/etc/httpd/conf/server-dsa.crt"
#SSLCertificateFile "/etc/httpd/conf/server-ecc.crt"
SSLCertificateFile "/srv/http/default/certs/localhost+1.pem"

Puis, nous modifions également le chemin vers la clé privée :

/etc/httpd/conf/extra/httpd-ssl.conf
Copié !
SSLCertificateKeyFile "/etc/httpd/conf/server.key"
#SSLCertificateKeyFile "/etc/httpd/conf/server.key"
#SSLCertificateKeyFile "/etc/httpd/conf/server-dsa.key"
#SSLCertificateKeyFile "/etc/httpd/conf/server-ecc.key"
SSLCertificateKeyFile "/srv/http/default/certs/localhost+1-key.pem"

Vous pouvez sauvegarder et fermer le fichier. Maintenant, nous avons également quelques modifications à apporter au fichier de configuration d’Apache :

shell
Copié !
sudo nano /etc/httpd/conf/httpd.conf

Nous activons le module fournissant un cache d’objets partagés nécessaire pour certaines directives comme SSLSessionCache :

/etc/httpd/conf/httpd.conf
Copié !
#LoadModule cache_socache_module modules/mod_cache_socache.so
#LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
#LoadModule socache_dbm_module modules/mod_socache_dbm.so

Puis nous activons le module SSL lui-même :

/etc/httpd/conf/httpd.conf
Copié !
#LoadModule slotmem_plain_module modules/mod_slotmem_plain.so
#LoadModule ssl_module modules/mod_ssl.so
LoadModule ssl_module modules/mod_ssl.so
#LoadModule dialup_module modules/mod_dialup.so

Finalement, nous devons indiquer le chemin du fichier de configuration de SSL :

/etc/httpd/conf/httpd.conf
Copié !
# Secure (SSL/TLS) connections
#Include conf/extra/httpd-ssl.conf
Include conf/extra/httpd-ssl.conf
#

Vous pouvez sauvegarder et fermer ce fichier. Nous avons terminé la configuration de SSL.

Nous allons redémarrer le serveur pour vérifier la configuration :

shell
Copié !
sudo systemctl restart httpd

Si vous essayez d’accéder à l’adresse https://localhost/ (notez le https) depuis votre navigateur, vous devriez obtenir la même page que précédemment.

Capture d’écran de localhost affiché dans le navigateur en utilisant HTTPS
Le serveur retourne la racine de localhost

Vous pouvez cliquez sur le cadenas à côté de l’URL pour vérifier que le certificat est bien fourni par mkcert.

Capture d’écran des informations affichées par Firefox à propos du certificat
Firefox montre le certificat vérifié par mkcert

Étape 5 : Utiliser des hôtes virtuels

Création d’un nouvel hôte virtuel

Pour cet exemple de création d’hôte virtuel, nous utiliserons le nom de domaine projet.test. Il sera accessible en HTTPS avec ou sans www.. Pensez à adapter les étapes suivantes en fonction de vos besoins.

Nous devons utiliser un domaine de premier niveau (ou TLD) réservé. Ici, je choisis le .test parce que c’est le plus court et je trouve qu’il correspond bien à ce que nous faisons.

Commençons par créer un dossier dédié dans notre espace de travail créé à l’étape 3. Nous aurons également besoin de créer trois dossiers :

  • htdocs (ou utilisez le nom de votre choix), qui servira de racine pour les fichiers accessibles depuis le navigateur,
  • logs pour stocker les logs spécifiques à ce domaine,
  • certs pour stocker le certificat et sa clé spécifiques à ce domaine.
shell
Copié !
mkdir -p /home/votreNom/votreDossierDeTravail/projet.test/htdocs

L’option -p de mkdir permet de créer les dossiers parents s’ils n’existent pas. Ici, projet.test sera créé en même temps que htdocs.

Ensuite, nous créons le sous-dossier logs :

shell
Copié !
mkdir /home/votreNom/votreDossierDeTravail/projet.test/logs

Puis, le sous-dossier certs :

shell
Copié !
mkdir /home/votreNom/votreDossierDeTravail/projet.test/certs

Si votre shell le supporte, vous pouvez combiner ces trois commandes en une seule :

shell
Copié !
mkdir -p /home/votreNom/votreDossierDeTravail/projet.test/{htdocs,logs,certs}

Maintenant, générons un certificat valide pour notre nom de domaine :

shell
Copié !
mkcert -cert-file ~/votreDossierDeTravail/projet.test/certs/projet.test.pem -key-file ~/votreDossierDeTravail/projet.test/certs/projet.test-key.pem projet.test "*.projet.test"

Dans le fichier de configuration de notre hôte virtuel, nous ne voulons pas utiliser le chemin vers notre « home » mais /srv/http. Nous créons donc un lien symbolique :

shell
Copié !
sudo ln -s /home/votreNom/votreDossierDeTravail/projet.test /srv/http

Ensuite, nous allons créer un dossier pour stocker les configurations de nos différents hôtes virtuels :

shell
Copié !
sudo mkdir /etc/httpd/conf/vhosts

Puis, nous créons un fichier de configuration pour notre nom de domaine :

shell
Copié !
sudo nano /etc/httpd/conf/vhosts/projet.test

Dans ce fichier, nous allons ajouter les lignes suivantes :

apache
Copié !
<VirtualHost *:80>
    ServerAdmin webmaster@projet.test
    DocumentRoot "/srv/http/projet.test/htdocs/"
    ServerName www.projet.test
    ServerAlias *.projet.test
    ErrorLog "/srv/http/projet.test/logs/error.log"
    CustomLog "/srv/http/projet.test/logs/access.log" combined
    <Directory /srv/http/projet.test/htdocs/>
        Options -Indexes +FollowSymLinks +MultiViews
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:443>
    ServerAdmin webmaster@projet.test
    DocumentRoot "/srv/http/projet.test/htdocs/"
    ServerName www.projet.test:443
    ServerAlias *.projet.test:443
    SSLEngine on
    SSLCertificateFile "/srv/http/projet.test/certs/projet.test.pem"
    SSLCertificateKeyFile "/srv/http/projet.test/certs/projet.test-key.pem"
    ErrorLog "/srv/http/projet.test/logs/error.log"
    CustomLog "/srv/http/projet.test/logs/access.log" combined
    <Directory /srv/http/projet.test/htdocs/>
        Options -Indexes +FollowSymLinks +MultiViews
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Vous pouvez sauvegarder et fermer ce fichier. Nous éditons ensuite le fichier de configuration d’Apache pour qu’il charge la configuration de notre hôte virtuel :

shell
Copié !
sudo nano /etc/httpd/conf/httpd.conf

Dans ce fichier, nous allons ajouter les lignes suivantes :

/etc/httpd/conf/httpd.conf
Copié !
# Virtual hosts
#Include conf/extra/httpd-vhosts.conf
Include conf/vhosts/projet.test

Pensez à sauvegarder et fermer ce fichier, puis modifions le fichier hosts pour que notre nom de domaine soit reconnu :

shell
Copié !
sudo nano /etc/hosts

Finalement, dans ce fichier, nous ajoutons :

/etc/hosts
Copié !
# This host address
127.0.1.1  computer-name
# Virtual hosts
127.0.0.1  projet.test
127.0.0.1  www.projet.test

Vous pouvez sauvegarder et fermer le fichier. Nous avons terminé la configuration de notre serveur LAMP mais un test s’impose pour vérifier son bon fonctionnement.

Test de notre hôte virtuel

Avant toute chose, il est nécessaire de redémarrer le serveur pour être sûr que nos précédentes modifications soient bien appliquées :

shell
Copié !
sudo systemctl restart httpd

Vous devriez maintenant avoir accès à projet.test ou www.projet.test dans votre navigateur. Pour tester le bon fonctionnement, créons un fichier PHP  :

shell
Copié !
nano ~/votreDossierDeTravail/projet.test/htdocs/index.php

Puis, dans ce fichier, ajoutons :

~/votreDossierDeTravail/projet.test/htdocs/index.php
Copié !
<?php
phpinfo();

Vous pouvez maintenant sauvegarder et fermer ce fichier. Maintenant, en vous rendant à l’adresse https://www.projet.test, vous devriez obtenir une page contenant le résultat de phpinfo et commençant par « PHP Version ».

Capture d’écran de la page index.php contenant le résultat de phpinfo
Informations à propos de notre configuration PHP

Si tout c’est bien passé, vous pouvez supprimer le fichier précédemment créé ; il n’est plus utile.

shell
Copié !
rm ~/votreDossierDeTravail/projet.test/htdocs/index.php

Voilà, vous avez un serveur LAMP fonctionnel et un espace de travail dédié dans votre « home » qui ne nécessite pas les droits d’administrateurs. Avant de partir, pensez à retenir quelques commandes utiles pour utiliser votre serveur de développement.

Ce qu’il faut retenir

Pour gérer le serveur

Pour démarrer Apache et MySQL, vous utiliserez les commandes suivantes :

shell
Copié !
sudo systemctl start httpd
sudo systemctl start mysqld

Vous pouvez également décider de démarrer automatiquement Apache et MySQL au démarrage du système. Pour cela, il faut utiliser :

shell
Copié !
sudo systemctl enable httpd
sudo systemctl enable mysqld

Si vous faites des modifications dans la configuration d’Apache, il faudra redémarrer le service :

shell
Copié !
sudo systemctl restart httpd

Finalement, si vous souhaitez arrêter Apache et MySQL, il faudra utiliser les commandes suivantes :

shell
Copié !
sudo systemctl stop httpd
sudo systemctl stop mysqld

Pour gérer ses hôtes virtuels

  1. Vous devez créer un dossier dans votre espace de travail dédié à votre projet (et des sous-dossiers pour séparer les fichiers publics des logs),
  2. Vous devez créer un lien symbolique dans /srv/http pointant vers le dossier créé,
  3. Vous devez générer un nouveau certificat, en utilisant mkcert, pour votre nouveau nom de domaine,
  4. Vous devez ajouter un fichier de configuration pour votre hôte virtuel dans le dossier d’Apache,
  5. Vous devez modifier le fichier /etc/hosts pour pouvoir accéder au nom de domaine depuis votre navigateur,
  6. Vous devez redémarrer Apache pour prendre en compte les modifications.

Sources et ressources