Installer LAMP sur Manjaro : Virtual Host & SSL

Je vous ai expliqué précédemment les premières étapes pour installer LAMP sur Manjaro. Il nous restait à configurer SSL, mettre en place un espace de travail dans notre home et créer un serveur virtuel. Assurez-vous d’avoir suivi les précédentes étapes avant de poursuivre cet article.

Configurer SSL pour accéder aux sites locaux en HTTPS

Pour générer un certificat SSL valide, nous allons installer et utiliser mkcert. Il s’agit d’un outil simple d’utilisation qui permet de créer des certificats approuvés localement.

// Installons mkcert
sudo pacman -S mkcert

Par défaut, le fichier de configuration SSL cherche un certificat nommé « server.crt » dans « /etc/httpd/conf/ ». Plutôt que de modifier ce chemin, nous allons créer le fichier demandé. Il s’appliquera à « localhost ».

mkcert -install
sudo mkcert -cert-file /etc/httpd/conf/server.crt -key-file /etc/httpd/conf/server.key localhost

Nous allons modifier la configuration d’Apache pour activer SSL en dé-commentant trois lignes.

sudo nano /etc/httpd/conf/httpd.conf

// À titre indicatif, à la ligne 93 lors de mon installation.
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

// À titre indicatif, à la ligne 155 lors de mon installation.
LoadModule ssl_module modules/mod_ssl.so

// À titre indicatif, à la ligne 535 lors de mon installation.
Include conf/extra/httpd-ssl.conf

Maintenant, nous allons modifier le fichier de configuration de SSL :

sudo nano /etc/httpd/conf/extra/httpd-ssl.conf

// À titre indicatif, vers la ligne 125 lors de mon installation.
// Remplacer :
« ServerName www.example.com:443 »

// Par :
« ServerName localhost:443 »

Modifier la destination de localhost

Par défaut, localhost pointe vers « /srv/http ». Je souhaite le rediriger vers un dossier « /srv/http/default ».

// Je crée le dossier :
sudo mkdir /srv/http/default

// J’édite le fichier de configuration des serveurs virtuels
sudo nano /etc/httpd/conf/extra/httpd-vhosts.conf

// Je remplace l’exemple par :
<VirtualHost *:80>
    DocumentRoot "/srv/http/default"
    ServerName localhost
    ErrorLog "/var/log/httpd/localhost-error_log"
    CustomLog "/var/log/httpd/localhost-access_log" common
</VirtualHost>

<VirtualHost *:443>
    DocumentRoot "/srv/http/default"
    ServerName localhost
    SSLEngine on
    SSLCertificateFile "/etc/httpd/conf/server.crt"
    SSLCertificateKeyFile "/etc/httpd/conf/server.key"
    ErrorLog "/var/log/httpd/localhost-error_log"
    CustomLog "/var/log/httpd/localhost-access_log" common
</VirtualHost>

Mettre en place un espace de travail dans notre home

Par défaut, le répertoire d’Apache se situe dans « /srv/http/ ». Nous pourrions nous en contenter, mais il faut les droits nécessaires pour y écrire des fichiers et dossiers. Je préfère mettre en place un dossier dans ma home pour travailler.

Pour commencer, nous allons créer ce répertoire et donner les droits à Apache pour le lire.

// Nous créons le dossier
mkdir /home/monDossierDeTravail

// S’assurer que le droit d’exécution est bien présent pour Apache
sudo chmod o+x ~/monDossierDeTravail

Ensuite, nous devons donner à Apache les droits d’accès à notre home. La solution la plus simple serait de faire un chmod sur notre home mais ce n’est pas la meilleure approche en termes de sécurité.

Nous allons utiliser la liste de contrôle d’accès. Elle permet de gérer les droits d’accès de n’importe quel utilisateur ou groupe. Normalement, le paquet est installé puisqu’il s’agit d’une dépendance de systemd, mais mieux vaut vérifier.

// Vérifiez le point de montage de votre système de fichier
// Il faut repérer à quelle lettre+chiffre est associé « / », ex : sdb1
lsblk -f

// Saisissez la commande ci-dessous en remplaçant sdXY par la valeur trouvée précédemment
sudo tune2fs -l /dev/sdXY | grep "Default mount options:"

// Vous devriez lire (si acl est présent) :
Default mount options:    user_xattr acl

// Il faut vérifier que cette option de montage n’est pas remplacée ailleurs. Pendez à changer sdXY.
cat /proc/mounts | grep -i "/dev/sdXY"

// Vous devriez lire quelque chose comme :
/dev/sdXY / ext4 rw,noatime,discard 0 0
// Il faut vérifier qu’il n’y ait pas noacl affiché.

// Il est possible de définir l’option de montage par défaut en utilisant cette commande (en replaçant sdXY) :
sudo tune2fs -o acl /dev/sdXY

Maintenant que ces vérifications sont faites, nous pouvons configurer les droits d’accès d’Apache sur notre home. Apache utilise le nom d’utilisateur « http ».

// Remplacez username.
setfacl -m "u:http:--x" /home/username

Vous pouvez vérifier les changements de permission avec :

getfacl /home/username

Si vous avez besoin de donner à Apache les droits d’écriture sur un dossier ou sur un fichier, vous pouvez utiliser la commande :

setfacl -dm "u:http:rwx" /home/username/dossierDeTravail/projet1/leRepertoire

Créer et configurer le serveur virtuel

Pour créer un serveur virtuel (« virtual host »), nous devons modifier la configuration d’Apache.

sudo nano /etc/httpd/conf/httpd.conf

// À titre indicatif, à la ligne 518 lors de mon installation.
// Décommenter :
Include conf/extra/httpd-vhosts.conf

Nous allons maintenant créer le répertoire pour les fichiers de configuration des serveurs virtuels.

sudo mkdir /etc/httpd/conf/vhosts

Maintenant, imaginons que nous travaillons sur un projet se nommant « Projet » (original !). Nous allons créer un certificat pour notre site « projet.test ».

// Nous créons un répertoire qui contiendra tous nos certificats locaux
mkdir /home/username/.local-certificates/

// Nous générons le certificat pour projet.test
mkcert -cert-file ~/.local-certificates/projet.test.pem -key-file ~/.local-certificates/projet.test-key.pem projet.test *.projet.test

Nous allons créer un fichier de configuration se nommant « projet.test » :

sudo nano /etc/httpd/conf/vhosts/projet.test

// Dans ce fichier, nous allons insérer :
<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 "/home/username/.local-certificates/projet.test.pem"
    SSLCertificateKeyFile "/home/username/.local-certificates/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>

Si votre projet ne se nomme pas « Projet », il faudra évidemment changer toutes les occurrences dans le fichier. Vous devez également modifier le chemin vers les fichiers du certificat SSL : « /home/username/.local-certificates/ » en remplaçant « username » et le dossier si vous l’avez nommé différemment.

Vous pouvez également voir dans le fichier, que nous avons défini deux sous-dossiers dans notre projet : « htdocs » et « logs ». Le premier correspond au répertoire public (j’utilise ce nom parce que je suis hébergé par Gandi). Le second contiendra nos fichiers logs.

Nous allons créer ces dossiers ainsi que le dossier de notre projet. Cependant, nous n’allons pas le placé dans « /srv/http/ » mais dans « /home/username/dossierDeTravail/ ». Il s’agit bien évidemment du répertoire que nous avons configuré précédemment.

sudo mkdir -p /home/username/dossierDeTravail/projet.test/htdocs
sudo mkdir -p /home/username/dossierDeTravail/projet.test/logs

Pour que le chemin spécifié dans le fichier de configuration corresponde, nous allons créer un lien virtuel :

ln -s /home/username/dossierDeTravail/projet.test/ /srv/http/

Nous retournons dans le fichier de configuration d’Apache pour activer notre serveur virtuel :

sudo nano /etc/httpd/conf/httpd.conf

// À la fin du fichier, nous ajoutons :
#Enabled Vhosts:
Include conf/vhosts/projet.test

Il faut maintenant modifier le fichier « hosts » :

sudo nano /etc/hosts

// Nous ajoutons à la fin du fichier :
127.0.0.1       www.projet.test

LAMP est maintenant fonctionnel

Si vous avez suivi toutes les étapes, votre serveur LAMP devrait maintenant être entièrement fonctionnel. Il ne vous reste plus qu’à démarrer votre projet localement !

Pour y accéder dans votre navigateur, il suffit de saisir « projet.test » dans la barre d’adresse de votre navigateur.

J’utilise le TLD « .test » parce qu’il s’agit d’un domaine de premier niveau reservé. Il ne risque pas d’y avoir un conflit avec domaine accessible par Internet. De plus, il est plus court que « .example » ou « .localhost » ; je préfère.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.