Installation de WSL 2 et de la pile logicielle LAMP

Boris DEBOT
12 min readApr 26, 2022

--

Vous êtes développeur Web et vous avez besoin d’un environnement de développement local sous Windows ? Des solutions comme Laragon, Xampp, Mamp ou Wamp ne vous conviennent pas ?

Dans cet article — ma première publication sur Medium ! — je vous explique comment installer une Debian dans WSL2, faire l’upgrade de la version 9 installée par défaut à la version 11 actuelle, puis installer et configurer Apache, MariaDB, PHP et Adminer pour développer dans des conditions optimales.

Installation de Debian « Bullseye » dans WSL 2

Windows 10

⚠️ Il n’y a pas de grosses différences dans Windows 11, vous ne devriez pas avoir de mal à adapter le début de ce tuto. Une fois le terminal Linux lancé, il n’y a plus aucune différence et tout ce qui est dit vaut également pour Windows 10 et Windows 11.

Vérifiez le numéro de build et la version de Windows en maintenant touche de logo Windows+R pour ouvrir la commande « Exécuter ». Tapez winver. Vous devez utiliser une version ultérieure à Windows 10 version 2004 et au build 19041 :

Run winver
Run winver

Ma version actuelle de Windows 10 :

Windows 10 Version
Windows 10 Version

Dans le menu Démarrer de Windows 10, tapez « Powershell » et faites un clic droit sur le résultat de la recherche pour lancer une session administrateur de PowerShell.

Run Powershell as Administrator

Si Windows vous demande de confirmer, dites « oui » :

Confirmation

Pour connaître la liste des Distributions disponibles pour installation, vous pouvez taper :

wsl --list --online
List of valid distributions
List of valid distributions

Nous allons installer une Debian, donc dans Powershell, tapez :

wsl --install -d Debian

Si c'est votre première installation d'une distribution avec WSL 2, il faudra redémarrer le PC pour que les changements soient pris en compte :

Debian Installation
Debian Installation

À tout moment, vous pouvez désinstaller votre distribution et recommencer l’installation en passant par Paramètres > Applications > Applications & fonctionnalités : la distribution apparaît dans la liste, désinstallez-la.

Uninstall Debian in Windows Apps

Puis pour faire les choses proprement, tapez dans Powershell en tant qu’administrateur :

wsl --unregister Debian
Uninstall Debian in Powershell
Uninstall Debian in Powershell

Après le redémarrage de votre système d’exploitation, le terminal Debian se lance.

⚠️ Si le terminal Debian ne se lance pas après redémarrage, pas de panique ! Lancer Powershell en tant qu’administrateur, appuyez sur la touche flèche du haut de votre clavier pour retrouver la dernière ligne tapée wsl --install -d Debian, appuyez sur Entrée, puis reprenez le cours normal de ce tuto. 🙂

Il faut attendre quelques secondes (minutes ?) avant d’avoir la main, puis vous serez invité à choisir un nom d’utilisateur et un mot de passe :

Set Username & Password
Set Username & Password

⚠️ Si rien ne se passe au bout de quelques minutes, n’hésitez pas à faire un CTRL + C (pour close, ce qui a pour effet de terminer le processus). Relancez. Si ça ne marche pas, désinstallez et réinstallez. Je sais, ce n’est pas très agréable mais sur certaines machines, j’ai remarqué que c’était un peu long la première fois. Mais une fois que ça aura fonctionné, vous n’aurez plus ce genre de problème si vous réinstallez votre distribution, ou si vous décidez d’en tester une autre…

Linux dans l’interface graphique de Windows 10

Avant de taper la moindre ligne de commande, on va faire un petit truc pratique. Ouvrez une nouvelle fenêtre de l’explorateur de fichiers Windows. En bas de la sidebar, faites un clic droit sur « Réseau » et choisissez dans le menu contextuel « Connecter un lecteur réseau…» :

Add network drive
Add network drive

Choisissez un lecteur dans la liste, renseignez le champs « Dossier » en tapant :

\\wsl$\Debian\

et cochez la checkbox « Se reconnecter lors de la connexion ».

Map network drive
Map network drive

Voilà, vous aurez à présent accès à vos fichiers Linux dans votre explorateur Windows :

Windows 10 Files explorer
Windows 10 Files explorer

Le terminal Linux

⚠️ À partir de là, tout ce qui est dit vaut également pour Windows 11.

Revenons dans Debian, vous pouvez taper :

cat /etc/debian_version

pour connaître le numéro de version de votre distribution. Par défaut, c'est la 9.5 que WSL 2 installe. On va faire l'upgrade vers la version 11.

Debian Version: 9.5
Debian Version: 9.5

Tout d’abord, il faut mettre à jour la version actuelle. Tapez :

sudo apt update && sudo apt upgrade -y

La mise-à-jour se lance : patientez.

⚠️ J’ai pu constater que sur certaines machines, la mise-à-jour ne se lance pas, on se retrouve avec une indication comme quoi les serveurs Debian ne peuvent pas être contacté… la solution : redémarrez votre PC !

Utilisez ensuite l’éditeur nano avec les droits du super utilisateur ( commande sudo) pour modifier les sources des packages :

sudo nano /etc/apt/sources.list
nano edit sources.list
nano edit sources.list

Remplacez toutes les instances de stretch par bullseye. Sur la dernière ligne, concernant la sécurité, remplacez stretch/updates par bullseye-security :

deb http://deb.debian.org/debian bullseye main
deb http://deb.debian.org/debian bullseye-updates main
deb http://security.debian.org/debian-security/ bullseye-security main

Faites simplement un copier/coller des lignes ci-dessus, puis dans nano, supprimer tout le contenu du fichier et faites simplement un clic droit pour coller. Maintenez la touche CTRL+O (overwrite), appuyez sur la touche Entrée pour valider l'écrasement du fichier, puis CTRL+X pour quitter nano.

Faites l’update de l’index des paquets avec les nouvelles sources et préparez le système d’exploitation pour l’upgrade :

sudo apt update && sudo apt upgrade -y

Si des confirmations vous sont demandées, dites « yes » :

Confirmations
Confirmations

Puis passez de Debian 9.5 à Debian 11 avec la commande suivante :

sudo apt full-upgrade -y

Personnellement je termine (pour nettoyer) par un petit :

sudo apt autoremove -y

Vous pouvez vous assurer que tout s’est bien passé en tapant :

cat /etc/debian_version
Debian Version: 11.3 bullseye
Debian Version: 11.3 bullseye

Installation d‘Apache, MariaDB et Adminer

Avant de commencer

Installons quelques outils qui nous seront utiles :

sudo apt install -y software-properties-common curl wget openssh-server

[Optionnel] NOPASSWD

Vous trouvez fastidieux de re-taper votre mot de passe à chaque commande ?

sudo nano /etc/sudoers

Descendez tout en bas du fichier et collez ceci :

# NO PASSWORD
%sudo ALL=(ALL:ALL) NOPASSWD:ALL

CTRL+O pour enregistrer, appuyez sur la touche Entrée pour confirmer, puis CTRL+X pour sortir de nano.

Installation de MariaDB

Pour avoir des informations sur le paquet, vous pouvez taper :

apt show mariadb-server
Package MariaDB
Package MariaDB

Installez ensuite le paquet MariaDB :

sudo apt install -y mariadb-server

Vous pouvez vérifier la version installée en tapant :

mysql --version
MariaDB Version
MariaDB Version

Lancez le serveur avec la commande :

sudo service mariadb start
  • Assurez-vous que ça tourne avec sudo service mariadb status, vous pouvez aussi arrêter le serveur avec sudo service mariadb stop, recharger avec sudo service mariadb reload, et relancer avec sudo service mariadb restart.

Pour finaliser la configuration, tapez :

sudo mysql_secure_installation

Appuyer sur la touche « Entrée » de votre clavier à la première question (après l'installation, le mot de passe de l'utilisateur root de MariaDB est vide par défaut). Répondez « yes » à la seconde question (changer le password de l'utilisateur root et tapez un nouveau mot de passe), puis dites « yes » à toutes les autres questions pour sécuriser votre 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
haven't set the root password yet, you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.
You already have your root account protected, so you can safely answer 'n'.Switch to unix_socket authentication [Y/n] y
Enabled successfully!
Reloading privilege tables..
... Success!
You already have your root account protected, so you can safely answer 'n'.Change the root password? [Y/n] y
New password:
Re-enter new password:
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
... 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
... 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
- 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
... 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!

Connectez-vous à MariaDB avec la commande :

sudo mysql -u root -p

Tapez le mot de passe root que vous venez de configurer.

Créez un nouvel utilisateur (personnalisez username et password) :

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost';
EXIT

Installation d’Apache

Lancez l’installation :

sudo apt install -y apache2

Démarrez le serveur Apache :

sudo service apache2 start
  • Comme pour MariaDB, vous pouvez vérifier que ça tourne avec sudo service apache2 status, arrêter le serveur avec sudo service apache2 stop, recharger avec sudo service apache2 reload, et relancer avec sudo service apache2 restart.

⚠️ En fonction de la façon dont vous avez paramétré le pare-feu Windows, il peut vous demander des autorisations pour Apache :

Procédez maintenant à une petite modification avec nano, pour ne pas travailler dans /var/www/html mais simplement dans /var/www :

sudo nano /etc/apache2/sites-enabled/000-default.conf

Modifiez la ligne DocumentRoot /var/www/html pour DocumentRoot /var/www :

Edit apache2 conf, change DocumentRoot
Edit apache2 conf, change DocumentRoot

Touches CTRL+ O (overwrite), appuyez sur la touche Entrée pour valider, puis CTRL+ X pour quitter nano.

Pour pouvoir travailler dans le dossier « www », changez les permissions :

sudo chgrp $(id -u) -R /var/www
sudo chown www-data -R /var/www
sudo chmod 775 -R /var/www

Installation de PHP

On va installer la version 8.0 de PHP et quelques paquets utiles pour faire du développement web.

sudo apt -y install lsb-release apt-transport-https ca-certificates sudo curl -sSL -o /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpgsudo sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'sudo apt update && sudo apt -y upgrade && sudo apt -y autoremovesudo apt -y install php8.0 libapache2-mod-php8.0 php8.0-{bcmath,bz2,intl,gd,mbstring,mysql,zip,curl,dom}sudo service apache2 restart

Gestion des erreurs en PHP

Pour pouvoir développer en PHP dans de bonnes conditions, il faut faire quelques paramétrages supplémentaires… Tapez :

sudo nano /etc/php/8.0/apache2/php.ini
  • Maintenez les touches CTRL+W pour faire une recherche.
  • La valeur par défaut est E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED sur la version 7.4.3 de PHP, ce qui veut dire que les diagnostics de niveau E_NOTICE, E_STRICT et E_DEPRECATED ne sont pas pas affichés. Vous risquez fort d'en avoir quand même besoin, ça aide à débugger. Donc remplacez la valeur de error_reporting par E_ALL (vous pouvez consulter le manuel de PHP sur cette question) :
error_reporting = E_ALL
  • Quelques lignes plus bas (la prochaine ligne décommentée en fait, donc qui ne commence pas par ;), vous trouverez display_errors qui détermine si les erreurs doivent être affichées à l'écran, et qui a une valeur par défaut à Off. Évidemment, nous aurons besoin de voir les erreurs, donc passz là à On :
display_errors = On

⚠️ Attention, nous configurons un environnement de développement local ! Sur un serveur de production, ne passez jamais display_errors à On.

Le résultat doit ressembler à quelque chose comme ceci :

php.ini
php.ini

Touches CTRL+ O (overwrite), appuyez sur la touche Entrée pour valider, puis CTRL+ X pour quitter nano.

Pour consulter les logs d’erreurs du serveur Apache quand vous chargez une page en PHP, vous pouvez taper :

cat /var/log/apache2/error.log

L’envoie de mail en PHP

Commençons par installer Postfix :

sudo apt install -y postfix

On va éditer le fichier de configuration :

sudo nano /etc/postfix/main.cf

Cherchez la ligne relayhost et donnez lui comme valeur 127.0.0.1:1025 :

postfix
postfix

Puis installez MailDev. C’est un outil très pratique qui catch les mails envoyés par php pendant la phase de développement. Problème : il faut Node.js 😊

Installation de Node.js puis de MailDev

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash

Pour vérifiez l’installation, entrez command -v nvm et normalement, ça devrait retourner nvm. Pour moi ça ne marche jamais du premier coup, je suis obligé de fermer le terminal et de le relancer, puis de re-taper command -v nvm. Cette fois ça me retourne nvm. Je tape ensuite :

nvm install --ltsnvm install node

Reste à installer MailDev :

npm install -g maildev

Dans la barre d’URL de votre navigateur, tapez :

http://127.0.0.1:1080
MailDev

Lorsque vous enverrez un mail en PHP, MailDev l’intercepte et vous montre comment il se serait présenté à son destinataire.

Configuration de l’environnement de développement : Visual Studio Code

Installer VS Code

Téléchargez et installez VS Code : Download Visual Studio Code

L’extension Remote — WSL

Installez Remote — WSL

Lancez votre terminal Debian et tapez : code /var/www

Initialisation des serveurs Apache, MariaDB & Postfix au lancement du terminal Debian + VSCode + MailDev

sudo nano ~/.bashrc

Descendez tout en bas du fichier et collez ceci :

# Start apache2, mariadb & postfix + VSCode (Remote WSL) + MailDev
sudo service apache2 start && sudo service mariadb start && sudo service postfix start
code /var/www
maildev --ip 127.0.0.1

CTRL+O pour enregistrer, appuyez sur la touche Entrée pour confirmer, puis CTRL+X pour sortir de Nano.

Installation de Adminer

Installons maintenant une interface graphique pour gérer nos bases de données. Beaucoup travaillent avec phpMyAdmin, personnellement je préfère Adminer :

sudo apt install adminer -y

Il vous reste à activer la configuration pour Apache :

sudo a2enconf adminer

Et voilà ! Redémarrez Apache :

sudo service apache2 reload 
sudo service apache2 restart

Puis connectez-vous dans un navigateur à localhost/adminer :

Adminer
Adminer

Installation de GIT

Pour vos développement futurs, vous aurez bien évidemment besoin de GIT :

sudo apt install git -y

Configurez-le :

git config --global user.name your-username
git config --global user.email your-mail@example.com

Vous pouvez modifier ces informations à tout moment :

sudo nano ~/.gitconfig

S’authentifier avec une clé SSH sur GitHub

Générez maintenant votre clé SSH :

ssh-keygen -t rsa -b 2048
ssh-keygen
ssh-keygen

Affichez-là et copiez-là :

cat ~/.ssh/id_rsa.pub
Public Key
Public Key

Puis collez-là dans GitHub :

GitHub: Add SSH Key
GitHub: Add SSH Key

Conclusion

Voilà, normalement, si vous avez suivi à la lettre cette feuille de route, que vous n’avez manqué aucune étape… ça devrait fonctionner nickel. N’hésitez pas à me solliciter si vous rencontrez la moindre difficulté.

Sources :

--

--