Installation de WSL 2 et de la pile logicielle LAMP
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 :
Ma version actuelle de Windows 10 :
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.
Si Windows vous demande de confirmer, dites « oui » :
Pour connaître la liste des Distributions disponibles pour installation, vous pouvez taper :
wsl --list --online
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 :
À 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.
Puis pour faire les choses proprement, tapez dans Powershell en tant qu’administrateur :
wsl --unregister Debian
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 :
⚠️ 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…» :
Choisissez un lecteur dans la liste, renseignez le champs « Dossier » en tapant :
\\wsl$\Debian\
et cochez la checkbox « Se reconnecter lors de la connexion ».
Voilà, vous aurez à présent accès à vos fichiers Linux dans votre explorateur Windows :
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.
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
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 » :
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
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
Installez ensuite le paquet MariaDB :
sudo apt install -y mariadb-server
Vous pouvez vérifier la version installée en tapant :
mysql --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 avecsudo service mariadb stop
, recharger avecsudo service mariadb reload
, et relancer avecsudo 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 avecsudo service apache2 stop
, recharger avecsudo service apache2 reload
, et relancer avecsudo 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
:
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 niveauE_NOTICE
,E_STRICT
etE_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 deerror_reporting
parE_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 trouverezdisplay_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 :
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
:
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
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
:
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
Affichez-là et copiez-là :
cat ~/.ssh/id_rsa.pub
Puis collez-là dans GitHub :
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é.