WSL ajouter LAMP

Configurer un serveur web de développement de sites php sous WSL

Cet article a été réactualisé il y a 2 ans jours. Il n'est pas nécessairement obsolète, mais gardez son ancienneté en tête lors de sa lecture.

L’objectif ici est de tester la création d’un serveur Web pour le développement de sites en PHP et en particulier pour développer des sites sous WordPress en utilisant le Subsystem Linux pour Windows10 (WSL).

Pourquoi ce mémo ?

Si dans son Windows on a déjà un Wamp ou Xampp, il est évident que ça fera double emploi. On verra même en conclusion que ce n’est pas forcément une si bonne idée d’utiliser cette installation d’un serveur de dev web dans wsl.

L’intérêt de ce mémo est à visée personnelle d’expérimentation, afin de tester l’installation manuelle de modules dans un linux (ici une distribution Ubuntu) et de faire une première découverte du comment ils s’articulent quand il s’agit d’ajouter la pile Apache, MySQL PHP. Il s’agit donc en fait de mettre en place soi même un LAMP mais sous Windows et utiliser les lignes de commandes dans la console Bash.
Ce mémo a été réalisé en compulsant divers tutoriels, mes cours réseaux du CNAM. Chaque source apportant des données utilisables pour mon besoin mais de façon éparse par la force des choses. J’explique donc ici comment je m’y suis prise.
Si vous suivez le déroulement indiqué, ça devrait fonctionner aussi pour vous.

Maintenant, je tiens à préciser que ce n’est qu’une ébauche pour tester, comprendre, apprendre. Et puis ce qu’il y a de pratique avec un linux sous windows, c’est que c’est installé en tant qu’application, donc si on casse des choses dans son sous système linux, on peut le supprimer très simplement avec un clic droit ! CQFD On peut tester sans crainte !

Vous pouvez voir que je suis en phase de test de différentes distributions, dans l’image ci dessous j’essayais Debian.

Desinstaller un WSL

Prérequis

Vérifier sa version de système Ubuntu

Si vous souhaitez voir comment installer Le SubSystem Linux pour Windows (abrégé WSL) vous pouvez suivre cet autre mémo : Activer le sous-système Windows pour Linux

Windows 10 avec WSL activé, voir sa version de système en tapant cette commande dans la console Bash:

lsb_release -a

Version Ubuntu WSL

Je suis sur l’utilisation d’un Ubuntu Bionic version 18.04 en tant que subsystem pour Windows 10. Cette information est importante surtout par rapport à l’utilisation ultérieure de MySQL.

Se familiariser avec les éditeurs disponibles en CLI

On peut utiliser Nano, ou Vi ou Vim. Les liens ajoutés sont ceux des cours de M. Nebra sur Openclassroom.

Pense bête des commandes principales des outils APT

Pour installer des paquets, nous utiliserons apt conseillé sur une installation récente d’Ubuntu Bionic 18.04. Les commandes apt permettent de faire pas mal de choses.

  • apt update : Mettre à jour la liste des paquets disponibles sur les serveurs déclarés dans le fichier « /etc/apt/sources.list »
  • apt upgrade : Mise à jour des logiciels installés sur le système
  • apt full-upgrade : Mise à jour du système
  • apt search <expression rationnelle> : Rechercher un logiciel
  • apt show <Logiciel> : Afficher des informations détaillées concernant le paquet <Logiciel>
  • apt policy <Logiciel> : Afficher les versions disponibles d’un logiciel
  • apt install <Logiciel> : Installation d’un Logiciel disponible sur les serveurs
  • apt install <paquet .deb> : Installation d’un Logiciel absent des serveurs, et préalablement téléchargé, au format .deb
  • apt remove <Logiciel> : Désinstallation d’un logiciel
  • apt purge <Logiciel> : Désinstallation d’un logiciel avec les fichiers de configurations
  • apt autoremove : Supprimer les paquets installés automatiquement lorsqu’ils ne sont plus nécessaires
  • apt clean : Nettoyer complètement le dépôt local des fichiers de paquets récupérés
  • apt autoclean : Nettoyer le dépôt local des fichiers des paquets périmés

Voir plus sur : Debian Facile « Gestion des paquets avec les outils APT »

Installation manuelle de la pile Apache / MySQL / PHP

Pour développer des sites WordPress en local, j’ai besoin de quoi ?

  • un serveur Web : Apache. Il permet de communiquer avec le navigateur en utilisant le protocole HTTP(S), nous en avons besoin pour exécuter des applications web PHP dans Ubuntu.
  • un serveur de Base de Données : MySQL couplé à un gestionnaire de BDD : Adminer. Il y a aussi phpMyAdmin, mais pour mon installation locale je préfère utiliser Adminer réputé plus léger.
  • et le module PHP qui permettra d’interpréter le langage PHP sur le serveur.

La plupart des hébergements mutualisés utilisent ces outils.

Mettre à jour la liste des dépôts et packages d’Ubuntu

Avant d’installer quoique ce soit sur le sous system Ubuntu il faut toujours au préalable mettre à jour la liste des dépôts et packages de son système.

sudo apt update

apt update : Mise à jour de la liste des paquets disponibles. N’installe pas de nouvelle version de logiciels mais re-synchronise l’index des fichiers présents sur son système avec ceux disponibles dans les dépôts auxquels on a accès. Les index des paquets disponibles sont récupérés à partir des emplacements spécifiés dans /etc/apt/sources.list. Une mise à jour de cette liste doit toujours être effectuée avant une mise à jour des paquets. Voir : https://doc.ubuntu-fr.org/sources.list

sudo apt upgrade

apt upgrade : Mise à jour du système en installant/mettant à jour les paquets. Cette commande récupérera les dernières versions des paquets existant sur la machine à partir des sources énumérées dans /etc/apt/sources.list Cette commande doit donc toujours être précédée d’un apt update.

Ces commandes peuvent être combinées en une seule :

sudo apt update && apt upgrade

On peut aussi ajouter le drapeau –y qui permet de faire en sorte de répondre YES de façon automatique pendant la mise à jour des paquets.

sudo apt update && apt upgrade -y

On peut aussi voir dans des tutos l’ancienne syntaxe pour ces commandes :

sudo apt-get update && apt-get upgrade -y

Installation de la pile logicielle

Ensuite on installe notre pile Apache, Mysql, PHP :

sudo apt install apache2 php libapache2-mod-php mysql-server php-mysql

En ne précisant pas la version de php on aura la dernière (à ce jour 7.2, si on veut 7.1 il faut le préciser)

sudo apt install apache2 php7.1 libapache2-mod-php7.1 mysql-server php7.1-mysql

Ajouter les modules PHP les plus courants

sudo apt install php-curl php-gd php-intl php-json php-mbstring php-xml php-zip php-mcrypt

L’installation des packages

Bon, on a demandé des packages en les nommant mais le fait est qu’avec le système des dépendances de paquets entre eux, on va en réalité en installer beaucoup plus. Pendant l’installation des packages, avant la confirmation avec Y si on n’a pas passé le paramètre -y dans la commande apt install, on peut voir les différents paquets installés en plus et ceux suggérés, c’est une info utile aussi.

Si on a vu dans un tuto des packages conseillés, vérifier d’abord s’ils ne sont pas déjà présents dans son installation. Pour faire la liste des packages présents sur son système, taper dpkg --list ça renvoie en plus du nom des packages, leur version et une brève description.

Pour rechercher un package plus précisément, comme ce qui serait relatif a du MySQL par exemple, ajouter la commande grep pour ne pas tout ressortir.

dpkg --list | grep mysql

Un outil bien utile quand on débute avec les commandes bash pour avoir des explications : Explainshell

Spécificité de cette installation sous WSL

Sous WSL, les services Apache, MySQL ne se lancent pas de façon automatique quand on allume son ordinateur sous Win10. Il faut le faire soi-même en ligne de commandes dans la console Bash.

De plus, si la console Bash est fermée les services seront automatiquement stoppés.

Ceci est dû au fait que pour lancer les services, cela nécessite d’être root sur le sous-système Ubuntu, donc indiquer son mot de passe d’utilisateur de la machine Ubuntu. (sudo)

J’en parle ici parce que dans le cas d’une installation d’un serveur web dans un ordinateur sous Ubuntu, les services LAMP démarrent automatiquement et donc si ce n’est pas ce que l’on souhaite (cas d’un serveur de dev) , cela nécessite une configuration pour empêcher cela.
Vous pourrez donc voir dans des tutoriels des commandes à lancer telles que celles-ci pour empêcher le démarrage automatique des services :

sudo systemctl disable apache2 et sudo systemctl disable mysql

Et ensuite des lancements manuels tels que ceux-ci :

sudo systemctl start apache2 et sudo systemctl start mysql

J’insiste donc, dans WSL on n’a pas à utiliser ce type de commandes pour démarrer les services.

Utiliser Apache

Voir sa version installée

sudo apache2ctl -v

Lancer les services Apache

sudo service apache2 start

Aller vérifier qu’Apache est bien lancé en ouvrant dans son navigateur l’url : localhost ou 127.0.0.1, une page « Apache2 Ubuntu Default Page » s’affiche. Elle donne quelques informations sur la configuration d’Apache dans le system Ubuntu.

Le code de cette page est présent dans /var/www/html/index.html, vous pouvez vous y rendre pour vérifier.

Default Page Apache

Les autres commandes service Apache

Pour voir les commandes service Apache possibles sur son système :

service apache2 ?

Affiche

Usage: apache2 {start|stop|graceful-stop|restart|reload|force-reload}

  • Arrêter les services : sudo service apache2 stop
  • Redémarrer immédiatement les services d’Apache : sudo service apache2 restart. S’utilise quand on a effectué des modifications dans la configuration d’Apache afin qu’elles soient prises en compte. Equivalent à stop puis start.
  • Maintenir les services d’Apache mais relire les configurations : sudo service apache2 reload

Pour les autres référez vous à la documentation Apache.

Utiliser MySQL

Voir sa version installée

mysql --version

Lancer le serveur MySQL

sudo service mysql start

Les autres commandes service MySQL

service mysql ?

affiche

Usage: /etc/init.d/mysql start|stop|restart|reload|force-reload|status

Ecrire des requêtes SQL

Dans une installation Ubuntu 18.04, comme c’est le cas pour moi ici, le package mysql s’installe sans demander de faire de configuration de mot de passe. À partir de cette version l’utilisateur root de MySQL est authentifié par son compte système (plugin auth_socket) et non plus par un mot de passe (plugin mysql_native_password). Donc pour pouvoir écrire une requête SQL il suffit de taper : sudo mysql et c’est tout. (le mot de passe sudo est demandé par contre bien entendu).

Voici ce qu’on obtient :

vblk@DELL-3420:/ $ sudo mysql
[sudo] password for vblk:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.7.23-0ubuntu0.18.04.1 (Ubuntu)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Les commandes SQL s’écrivent alors après la ligne commençant par mysql>

Pour ajouter une base de donnée par exemple, taper sa requête SQL

mysql> DATABASE nom_de_la_base;

Pour quitter la console sql taper exit; ou quit;

Le fait est que c’est plus simple de passer par une interface graphique comme phpMyAdmin ou Adminer, surtout si on n’est pas très à l’aise avec les requêtes SQL.

Installer une interface graphique pour gérer ses bases de données

Installer Adminer

On remet à jour la liste de ses paquets avant d’en installer un autre !

sudo apt update

On installe adminer

Si on utilise l’installation via les paquets disponibles sous Ubuntu avec sudo apt install adminer cela installera une version d’Adminer qui ne sera pas forcément la plus récente.
On peut lui préférer une installation de la dernière version en récupérant le fichier latest.php de Adminer sur le site officiel : https://www.adminer.org/ . On en est à l’heure où j’écris ces lignes à la version 4.6.3

  1. On se crée un dossier pour accueillir adminer, dans /usr, c’est la qu’on installe la plupart des programmes pour les utilisateurs :
    sudo mkdir /usr/share/adminer
  2. On récupère le fichier php d’Adminer dans le dossier qu’on vient de créer :
    sudo wget "http://www.adminer.org/latest.php" -O /usr/share/adminer/latest.php
  3. On crée un lien symbolique dans le dossier pour atteindre latest.php avec adminer.php. On pourra alors toujours remettre à jour latest.php en le remplaçant manuellement.
    sudo ln -s /usr/share/adminer/latest.php /usr/share/adminer/adminer.php
  4. On ajoute adminer dans les configuration disponibles d’Apache.
    echo "Alias /adminer.php /usr/share/adminer/adminer.php" | sudo tee /etc/apache2/conf-available/adminer.conf
  5. On demande à Apache de nous faire un lien symbolique vers cette nouvelle configuration qu’on a mise à disposition.
    sudo a2enconf adminer.conf

Sans les commentaires ça donne au total :

sudo mkdir /usr/share/adminer
sudo wget "http://www.adminer.org/latest.php" -O /usr/share/adminer/latest.php
sudo ln -s /usr/share/adminer/latest.php /usr/share/adminer/adminer.php
echo "Alias /adminer.php /usr/share/adminer/adminer.php" | sudo tee /etc/apache2/conf-available/adminer.conf
sudo a2enconf adminer.conf

Une fois fait relancer Apache

sudo service apache2 reload

Utiliser Adminer

Pour atteindre Adminer taper dans le navigateur : 127.0.0.1/adminer.php ou localhost/adminer.php

Là, il va falloir rentrer login et mot de passe sauf que, comme je le disais précédemment, depuis Ubuntu Bionic 18.04 l’authentification de l’utilisateur ROOT de MySQL se fait au moyen du plugin auth_socket, donc avec sudo. Cette méthode ne permet pas de se connecter avec phpMyAdmin ou Adminer, pour autant il est vivement déconseillé de modifier ce comportement.

Comme on a besoin d’un accès global à ses bases de données depuis Adminer, la solution conseillée est donc de créer un nouvel utilisateur et de lui attribuer tous les privilèges.

Dans la console Bash, passer en mode requête SQL :

sudo mysql

et taper la requête suivante qui va permettre de créer le nouvel utilisateur qui sera super administrateur :

mysql> GRANT ALL ON *.* TO 'nom_utilisateur_choisi'@'localhost' IDENTIFIED BY 'mot_de_passe' WITH GRANT OPTION;

Remplacer ‘nom_utilisateur_choisi’ et ‘mot_de_passe’ par ce qui vous convient comme login et mot de passe.

Ensuite mettre à jour les privilèges :

mysql> FLUSH PRIVILEGES;

Et quitter

mysql> QUIT; ou mysql> EXIT;

Maintenant vous aurez ce qu’il faut pour consulter vos bases de données via Adminer.

Utiliser PHP

PHP en mode Développement

On rentre dans le vif du sujet ! On veut utiliser php ici avec Apache en mode développement, du coup on va avoir besoin d’aller vérifier ce que contient le fichier php.ini.

Il est présent dans  /etc/php/7.2/apache2 (adapter à votre numéro de version). L’éditer avec vi ou nano, ne pas oublier de l’ouvrir en sudo sinon vous serez en mode readonly.

Naviguer avec les flèches clavier, et vérifier que la configuration correspond à du développement. Le fichier est fournit en explications, et met à disposition un « Quick Reference » pour voir ce qui est en place. Il suffit quelques lignes plus loin d’adopter les préconisations « Development Value ». Le principal étant l’affichage des erreurs : display_errors = On, display_startup_errors = On, error_reporting = E_ALL

Créer un fichier PHP de test : phpinfo.php

Pour le moment on va se contenter de voir si tout fonctionne correctement.

Aller dans le dossier /var/www/html, dossier où est stockée la page html par défaut d’Apache.

cd /var/www/html

Créer un nouveau fichier nommé phpinfo.php faite le avec l’éditeur de votre choix, ici je choisi vim, mais ça peut être vi ou nano.

sudo vim phpinfo.php

Dans l’éditeur vim utiliser la lettre  » i  » pour insérer son code, esc pour quitter le mode insertion, puis :wq pour sauvegarder et quitter. Inscrire ceci :

<?php phpinfo(); ?>

Se rendre ensuite sur localhost/phpinfo.php. On accède à toute la configuration qu’on a en place.

Ok, tout fonctionne bien !

Créer des sites PHP sous windows et les afficher grâce au serveur web dans WSL

Créer un dossier dans Windows où vous irez ranger vos projets PHP. Un peu comme quand on utilise Wamp, où on utilise le dossier C:/wamp64/www pour y mettre tous ses projets en Php. Là aussi vous rangez vos projets dans un dossier dédié.

Pour ma part j’ai un disque supplémentaire pour mes données nommé F en plus du disque C. Je range mes projets dans F:/Mes-sites/mesSitesPHP

Créer un dossier de projet nommé Hello contenant pour test juste un fichier index.php avec un Hello world affiché via echo.

un dossier de sites en php

On met ça de côté pour après.

Que sert Apache pour le moment ?

Pour le moment Apache nous sert la page index.html par défaut qui est dans /var/www/html et qu’on peut afficher dans le navigateur via localhost ou 127.0.0.1

Nous lui avons aussi ajouté un fichier phpinfo.php atteignable via localhost/phpinfo.php

Cet affichage est rendu possible via la configuration d’un Virtual Host (vhost) par défaut déjà présent nommé 000-default.conf.

Où se situe la configuration du Virtual host par défaut ?

Le répertoire pour installer les virtuals hosts est présent dans : /etc/apache2/sites-available/ . Il contient les configurations de sites disponibles sur le serveur.

Pour pouvoir afficher ces sites dans un navigateur, il faut passer un site disponible en site activé via la création d’un lien symbolique dans : /etc/apache2/sites-enabled/

Pour voir la configuration du virtual host par défaut taper les commandes suivantes :

Aller dans le dossier

vblk@DELL-3420:~ $ cd /etc/apache2/sites-available

Lister son contenu

vblk@DELL-3420:/etc/apache2/sites-available $ ls
000-default.conf default-ssl.conf

Visualiser ce que contient 000-default.conf (j’ai juste enlevé les commentaires pour rendre le contenu plus lisible)

vblk@DELL-3420:/etc/apache2/sites-available $ cat 000-default.conf
<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Détaillons un peu

  • <VirtualHost*:80> : On accepte les connections sur n’importe quelle IP du serveur (*) sur le port 80. En l’occurrence pour le moment la seule IP configurée est celle par défaut de la machine 127.0.0.1
  • ServerAdmin webmaster@localhost : Pas très utile ici pour nous, c’est le mail de celui qui gère le serveur.
  • DocumentRoot /var/www/html : Répertoire contenant les fichiers du site
  • ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined : Permet de récupérer les erreurs de connexion au site, rangé par défaut dans /var/log/apache2

Ce fichier 000-default.conf va pouvoir nous servir de modèle pour créer nos propres virtual hosts plus tard.
C’est grâce à ce fichier de configuration du serveur que nous pouvons afficher nos pages présentes dans /var/www/html en inscrivant localhost dans le navigateur.

Sauf que nous là, ce qu’on souhaiterait c’est qu’il nous affiche les sites que nous développons en local sous Windows. Ces fichiers sont atteignables sous Ubuntu, en effet, les disques Windows sont montés dans Ubuntu au niveau du dossier /mnt/

Pour voir les disques montés taper juste la commande mount vous verrez alors vos disques.

Pour ma part le chemin vers mon répertoire sera /mnt/f/Mes-sites/mesSitesPHP

Pour utiliser ce chemin dans /var/www, nous allons créer un lien symbolique vers notre dossier contenant nos sites.

vblk@DELL-3420:/var/www $ sudo ln -s /mnt/f/Mes-sites/mesSitesPHP /var/www/mesSitesPHP

Visuel lien symbolique en console

Maintenant nous pouvons aller modifier le fichier 000-default.conf

vblk@DELL-3420:/etc/apache2/sites-available $ vim 000-default.conf

pour changer DocumentRoot

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/mesSitesPHP

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

En retournant dans le navigateur, et tapant localhost, vous devrez voir alors l’index affichant vos sites. Ici on n’a pour le moment uniquement notre projet Hello.

C’est ok, ça fonctionne.

Le site est déjà rendu disponible avec la configuration de base Apache. Un lien symbolique de 000-default.conf dans /etc/apache2/sites-available est déjà présent au niveau de /etc/apache2/sites-enabled

Nous aurons besoin de le faire nous même tout à l’heure en utilisant la commande a2ensite.

Utiliser une URL de type « monsite.local » dans le navigateur

Pour le moment l’url pour atteindre un projet sera localhost/monsite comme pour localhost/Hello précédemment.

On va faire en sorte de pouvoir atteindre nos sites plutôt avec une url de type monsite.local. Cela va passer par la création d’un Virtual Host (Vhost) pour chacun des sites que l’on développe et la mise en place d’une résolution de nom via le fichier HOSTS.

Créer un nouveau projet pour tester ça

Créer un projet php nommé « coolsite » par exemple.

Mettez y un fichier index.php avec quelquechose de basique et un autre fichier pour test comme un apropos.php

Créer un lien symbolique entre le chemin du projet et /var/www

vblk@DELL-3420:~ $ cd /var/www
vblk@DELL-3420:/var/www $ sudo ln -s /mnt/f/Mes-sites/mesSitesPHP/coolsite /var/www/coolsite
vblk@DELL-3420:/var/www $ ls
coolsite  html  mesSitesPHP

Création du virtual host

Maintenant créer son virtual host dans  /etc/apache2/sites-available

vblk@DELL-3420:~ $ cd /etc/apache2/sites-available
vblk@DELL-3420:/etc/apache2/sites-available $ cp 000-default.conf coolsite.conf

On se sert de notre virtual host par défaut en le copiant pour avoir une base.

Editer coolsite.conf avec l’éditeur nano cette fois et non plus vim … Sous Vi ou Vim il y a un problème de gestion de la coloration syntaxique qui fait que l’on ne peut pas visualiser le contenu du fichier les caractères sont invisibles ! Je ne sais pas à quoi c’est dû, ni réussi à corriger ça, et si c’est seulement chez moi. Mais avec l’éditeur nano pas de soucis.
On va modifier son contenu pour celui-ci :

<VirtualHost *:80>
        ServerName www.coolsite.local
        ServerAlias coolsite.local
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/mesSitesPHP/coolsite

        <Directory /var/www/>
               Options Indexes FollowSymLinks MultiViews
               AllowOverride all
               Order allow,deny
               Allow from all
        </Directory>

        ErrorLog /var/log/apache2/error.coolsite.local.log
        CustomLog /var/log/apache2/error.coolsite.local.log combined
</VirtualHost>

Détaillons un peu :

  • <VirtualHost *:80> : Ouverture du virtualhost, on écoute sur toutes les adresses IP (si il y en a plusieurs) sur le port 80.
  • ServerName www.coolsite.local : pas présent dans le vhost par défaut, ici cette directive est obligatoire pour créer un nouveau vhost, c’est le nom de domaine que l’on souhaite donner à notre site, on pourra ensuite effectuer une résolution DNS.
  • ServerAlias coolsite.local : On peut ajouter un alias pour le DNS on pourra alors atteindre le site aussi bien avec l’une ou l’autre url, avec ou sans www.
  • DocumentRoot /var/www/mesSitesPHP/coolsite : On ajoute le chemin vers notre répertoire contenant le site (on a utilisé ici le lien symbolique que l’on a créé pour atteindre /mnt/f/mesSitesPHP/coolsite )
  • <Directory /var/www/> : Indiquer des directives concernant le dossier qui contient les sites. On peut avoir plusieurs Directory dans un vhost si on a besoin de spécifier des directives différentes selon le répertoire concerné. Ces directives peuvent éventuellement être modifiées ensuite avec un fichier .htaccess que l’on mettra par exemple ici dans /var/www .
  • Options Indexes FollowSymLinks MultiViews : Indexes autorise le listage des répertoires s’il n’existe pas de page index dans le projet, pour interdire le listage il faut passer l’option à -Indexes. FollowSymLinks permet de suivre des liens symboliques présents à la racine du site. MultiViews autorise la recherche de fichiers inconnus, par exemple si vous avez dans votre répertoire img un fichier masuperimage.jpg , alors si vous tapez http://coolsite.local/img/masup dans ce cas le fichier masuperimage.jpg sera affiché. Pour désactiver cette option il faut la passer à -MultiViews.
  • AllowOverride all : permet l’utilisation de fichier .htacess. Pour ignorer des fichiers de configuration .htaccess, on passe la valeur all à none.
  • Order allow,deny : Permet de préciser les hôtes dont les requêtes seront traitées, et ceux dont les requêtes seront rejetés.
  • Allow from all : En rapport avec Order allow,deny, liste les domaines, adresses IP, ect.. à autoriser. Ici on autorise tout.
  • ErrorLog /var/log/apache2/error.coolsite.local.log et CustomLog /var/log/apache2/error.coolsite.local.log combined : Si on souhaite avoir un fichier log contenant les erreurs en rapport avec le site (erreurs 403 ou 404 par exemple) il faut ajouter cette directive. On précise ici un fichier bien à part pour les error log du site en les nommant avec le nom du site. Permet de s’y retrouver ensuite si l’on a plusieurs projets en cours. combined est le nom donné au format de log. Si vous souhaitez en savoir plus, consultez la documentation Apache sur les logs http://httpd.apache.org/docs/2.4/mod/mod_log_config.html

Permettre la résolution de nom

Pour obtenir le site en tapant l’url coolsite.local ou www.coolsite.local dans le navigateur, il va falloir l’ajouter au niveau du fichier HOSTS de Windows. Ce fichier n’est éditable qu’en tant qu’administrateur.

Ouvrez alors un bloc note (ou votre éditeur en tant qu’admin) et atteindre le fichier HOSTS C:/Windows/System32/drivers/etc/hosts pour ajouter ceci :

## Perso for WSL - Start ##
::1 www.coolsite.local
127.0.0.1 www.coolsite.local
::1 coolsite.local
127.0.0.1 coolsite.local
## Perso for WSL - Start ##

La notation ::1  c’est en IPv6 la même chose que 127.0.0.1

Sauvegarder le tout.

Passer le site de disponible à actif

Le Vhost de notre coolsite : coolsite.conf est présent dans /etc/apache2/sites-available. Nous devons passer le site de disponible à site actif en créant un lien symbolique de ce répertoire /etc/apache2/sites-enabled

Cela se fait simplement en utilisant la commande apache a2ensite

vblk@DELL-3420:/etc/apache2/sites-enabled $ ls
000-default.conf
vblk@DELL-3420:/etc/apache2/sites-enabled $ sudo a2ensite coolsite.conf
Enabling site coolsite.
To activate the new configuration, you need to run:
  service apache2 reload
vblk@DELL-3420:/etc/apache2/sites-enabled $ ls
000-default.conf  coolsite.conf

maintenant tester, vous devez pouvoir atteindre le site avec son nom de domaine.

Pour repasser un site de actif à disponible, on utilise simplement la commande apache a2dissite

Installer un site WordPress

Bon on n’a pas encore utilisé de base données pour le moment. On s’y colle en mettant en place un site sous WordPress.

Créer une base de données pour accueillir les données du site.

On peut le faire en ligne de commande.

sudo mysql
....
mysql> CREATE DATABASE monsitewp;
mysql> QUIT

Par contre en passant dans Adminer je peux voir que je ne suis pas utf-8

Adminer utf8

On peut changer l’encodage après coup dans Adminer.

Modifier latin pour utf8

Mais le mieux c’est de faire en sorte que ce soit le choix par défaut.

Editer /etc/mysql/mysql.conf.d/mysqld.cnf   avec nano (avec vi ou vim, toujours pareil, problème de couleur ! on ne voit pas du tout le contenu)

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Dans le fichier ajouter

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

Voici une capture d’écran du mien

Configurer utf-8 pour la création de bdd

Relancer le serveur mysql

sudo service mysql restart

retourner dans la console mysql

sudo mysql

et vérifier le résultat de la commande suivante

SHOW VARIABLES LIKE 'char%';

qui affiche ceci :

Voir l'encodage des variables de bdd

Sinon on peut aussi créer sa nouvelle bdd via Adminer !

Login et mot de passe pour la bdd sont à se mettre sous le coude pour les ajouter au wp-config.php

Ou mettre nos fichiers ?

Comme tout à l’heure, dans notre dossier pour nos sites en PHP

Dossier pour son site WP

Tout se passe comme on a l’habitude de faire pour installer un WP …

Aller modifier le wp-config.php pour modifier les infos de connexion à la bdd

Avant de lancer la mise en place des tables dans la bdd, créer un Vhost pour le site comme tout à l’heure.

Et ajouter le nom de domaine monsitewp.local dans le fichier HOSTS pour la résolution de nom.

Dans le navigateur taper l’url monsitewp.local

La fenêtre de Bienvenue de WP s’affiche, donc c’est tout bon, on peut rentrer ses infos titre site etc … comme d’hab

Et ça roule …

Comme l’url du site est inscrite en dur dans la bdd, il faut prendre soin de créer son vhost avant pour que ce soit bien l’adresse monsitewp.local qui s’enregistre et pas celle avec localhost.

On peut retrouver cette adresse à de multiples endroits en BDD , pour la voir rapidement aller dans la table wp_options, on y voit les options siteurl et home

Si on n’a pas fait cette manip, ce sera l’adresse avec  localhost qui s’enregistrera comme on peut le voir dans l’image suivante.

Url de site wp en dur en bdd

En soi, ce n’est pas un problème, il faut juste savoir quelle adresse on a en bdd quand on souhaite faire une migration vers un hébergement web. Ici, il faudrait remplacer http://localhost/mesSites/PHP/monsitewp par le vrai nom de domaine qui pourrait être https://www.monsite.com. Voir le script Search Replace DB d’interconnect it sur Github

Que peut on installer de plus pour gérer un WordPress ?

WP-CLI

On peut installer WP-CLI dans un site wp, dans ce cas il faudra taper la commande complète pour l’utiliser.

vblk@DELL-3420:/mnt/f/Mes-sites/mesSitesPHP $ cd monsitewp
vblk@DELL-3420:/mnt/f/Mes-sites/mesSitesPHP/monsitewp $ curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 5241k  100 5241k    0     0  1080k      0  0:00:04  0:00:04 --:--:-- 1247k

Vérifier que ça fonctionne

vblk@DELL-3420:/mnt/f/Mes-sites/mesSitesPHP/monsitewp $ php wp-cli.phar --info
OS:     Linux 4.4.0-17134-Microsoft #345-Microsoft Wed Sep 19 17:47:00 PST 2018 x86_64
Shell:  /bin/bash
PHP binary:     /usr/bin/php7.2
PHP version:    7.2.10-0ubuntu0.18.04.1
php.ini used:   /etc/php/7.2/cli/php.ini
WP-CLI root dir:        phar://wp-cli.phar/vendor/wp-cli/wp-cli
WP-CLI vendor dir:      phar://wp-cli.phar/vendor
WP_CLI phar path:       /mnt/f/Mes-sites/mesSitesPHP/monsitewp
WP-CLI packages dir:
WP-CLI global config:
WP-CLI project config:
WP-CLI version: 2.0.1

Par exemple afficher les plugins présents dans ce wp tout neuf !

vblk@DELL-3420:/mnt/f/Mes-sites/mesSitesPHP/monsitewp $ php wp-cli.phar plugin list
+---------+----------+--------+---------+
| name    | status   | update | version |
+---------+----------+--------+---------+
| akismet | inactive | none   | 4.0.8   |
| hello   | inactive | none   | 1.7     |
+---------+----------+--------+---------+

Pour avoir la possibilité de ne taper que wp, donc la commande raccourcie, il faut rendre le fichier exécutable, (bon là il l’est déjà, je me rend compte du coup que je n’ai pas tenu compte des permissions de fichier dans mon installation ! A voir plus tard)

Pour rendre le fichier exécutable : chmod+x wp-cli.phar

Bon, on ne fait que suivre la documentation dédiée WP-CLI. Déplacer le fichier wp-cli.phar dans le PATH d’ubuntu en le renommant wp et c’est bon !

vblk@DELL-3420:/mnt/f/Mes-sites/mesSitesPHP/monsitewp $ sudo mv wp-cli.phar /usr/local/bin/wp
[sudo] password for vblk:
vblk@DELL-3420:/mnt/f/Mes-sites/mesSitesPHP/monsitewp $ cd /usr/local/bin
vblk@DELL-3420:/usr/local/bin $ ls
bundle jekyll listen ri safe_yaml sass-convert wp bundler kramdown rdoc rougify sass scss
vblk@DELL-3420:/usr/local/bin $ cd /mnt/f/Mes-sites/mesSitesPHP/monsitewp
vblk@DELL-3420:/mnt/f/Mes-sites/mesSitesPHP/monsitewp $ wp plugin list
+---------+----------+--------+---------+
| name    | status   | update | version |
+---------+----------+--------+---------+
| akismet | inactive | none   | 4.0.8   |
| hello   | inactive | none   | 1.7     |
+---------+----------+--------+---------+

Comme vous pouvez le voir ci dessus, on peut aussi installer jekyll sur son subsystem Ubuntu en ayant préalablement installer Ruby, mais bon là on n’est plus sur des implémentations pour wordPress

Conclusion

A vous de jouer ou pas !

Comme je le disais au début, ce n’est pas forcément une bonne idée d’installer un serveur web de développement sur son WSL si on utilise déjà Wamp ou Xampp, ou Local by flywheel.

Et puis utiliser le SSH via WSL implique que tous les fichiers présents dans votre Windows sont montés sous linux dans un dossier /mnt/<lettre-du disque> et que toutes les permissions sur les fichiers sont à 777 (rwxrwxrwx) . Et on ne peut pas changer ça. Cela complexifie l’envoi de ses fichiers en SSH sur le serveur d’hébergement à partir de là, vu qu’il ne faut surtout pas oublier de faire un chmod sur les permissions une fois qu’ils ont été envoyés.

Si pour du déploiement, on veut faire de la synchronisation de fichiers avec rsync dans une tâche make ou utiliser WP-Cli, je me suis retrouvée avec des complications au niveau correspondance UID GID entre serveur local et distant …  de quoi avoir envie de laisser tomber Windows pour un Debian … Bref …

Par contre, l’intérêt que j’y ai vu c’est que ça m’a permis d’aborder le fonctionnement de tout ça pour avoir une petite idée de comment ça marche. L’installation que j’ai faite est loin d’être complète. Je n’aborde pas les modules Apache,  etc … Bref … C’est un exercice qui m’a quand même appris des choses, pour ne pas être larguée si un jour je passe sur un VPS !

Je trouve qu’il serait bête de se priver de tester l’utilisation des distributions linux disponibles sur le microsoft store pour win10. C’est vraiment simple à installer, et à désinstaller pour tout recommencer de zéro si besoin (ça se désinstalle en 1 clic droit sur la distribution qu’on a mise en place), jusqu’au jour où on trouve ses marques pour créer une configuration aux petits oignons pour ses besoins.