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.