GNU/Linux >> Tutoriels Linux >  >> Debian

Ubuntu 20.04, WSL2, VSCode et Drupal 8 - Correction des "gotchas"

Microsoft a enfin livré une solution fantastique pour développer des applications Linux sur Windows. Le sous-système Windows pour Linux, WSL2, est relativement facile à installer et à configurer, surtout si vous êtes déjà familiarisé avec Linux. Même si ce n'est pas le cas, il existe de très bons articles sur la façon de faire fonctionner une installation de base.

Développer des applications Linux PHP avec VSCode sur Windows 10 est à peu près aussi stable et transparent que possible. Pourtant, aucun des articles que j'ai trouvés sur la configuration de LAMP sur Ubuntu et WSL2 n'a décrit plusieurs "impacts" que j'ai rencontrés.

J'avais une expérience limitée de Linux et dépendais fortement des articles écrits par ceux qui m'ont précédé. Bien qu'ils m'aient conduit la plupart du temps là-bas, j'ai rencontré plusieurs problèmes pour que Drupal 8 fonctionne sans erreur et débogue dans VSCode. Les solutions ont été trouvées dans les commentaires aux questions posées sur Internet. Cela a pris de nombreuses heures de recherche et j'espère sauver des gens en présentant les solutions que j'ai trouvées dans cet article.

Mon environnement est Windows 10 20H2, Ubuntu 20.04, PHP 7.3, MariaDB 10.4.17, Drupal 8.9.13, Xdebug 3.02, Windows Terminal, VSCode avec les packages Remote - WSL et PHP Debug Felix Becker. J'exécute WSL à partir de Powershell dans Windows Terminal.

Avant de commencer, voici quelques recommandations qui peuvent vous faire gagner du temps.

L'installation et l'utilisation d'apt-fast au lieu d'apt peuvent vraiment accélérer les installations et les mises à jour. Là où j'habite, Internet a une faible bande passante et est lent, et apt-fast est beaucoup plus rapide qu'apt.

Vous pouvez "sauvegarder et restaurer" votre distribution Linux avec l'exportation et l'importation WSL. Comme pour tout système, il est conseillé de toujours conserver une sauvegarde à jour.

Mariadb s'installe correctement mais ne peut pas redémarrer ou obtenir le statut

L'installation de Mariadb s'est bien passée. Aucune erreur ou avertissement. Lorsque j'ai essayé de vérifier l'état, j'ai reçu une erreur concernant le système.

$>systemctl-status mysql

Le système n'a pas été démarré avec systemd comme init-system (PID 1). peut ne pas fonctionner.

La raison de cette erreur est que Microsoft ne prend pas en charge systemd dans WSL. Heureusement, Arkane Systems a créé un package appelé System Genius pour activer systemd. Je suggère de lire attentivement leur page Web avant d'essayer les instructions ci-dessous, extraites de cette page. Les instructions pour les distributions non-Ubuntu sont légèrement différentes.

Vous devez d'abord installer le runtime .Net 5.0

$>sudo apt-mise à jour rapide

$>sudo sudo apt-installation rapide -et apt-transport-https

$>sudo apt-mise à jour rapide

$>sudo apt-installation rapide -et dotnet-sdk-5.0

Ensuite, nous devons configurer le référentiel wsl-transdebian

$>sudo apt-quick Installer apt-transport-https

$>wget -Ö /etc/suitable/Trusted.gpg.d/wsl-transdebian.gpg https://arkane-systems.github.io/wsl-transdebian/suitable/wsl-transdebian.gpg

$>chmod a+r /etc/suitable/Trusted.gpg.d/wsl-transdebian.gpg

$>Chat << EOF> /etc/suitable/Quellen.liste.d/wsl-transdebian.list

$>deb-https://arkane-systems.github.io/wsl-transdebian/suitable/ bullseye main

$>deb-src https://arkane-systems.github.io/wsl-transdebian/suitable/bullseye main

$>mise à jour apt-rapide

Nous pouvons maintenant installer le package System Genius.

sudo apt-installation rapide et systemd-genius

Quittez votre shell Linux, puis arrêtez WSL à l'aide du shell d'alimentation

PS C:UsersUsername>wsl - désactiver

Redémarrez WSL à l'aide d'un génie à partir de l'invite PowerShell.

PS C :Nom d'utilisateur des utilisateurs>wsl-genie –p

Vous verrez "En attente de systemd....!!!!!!!!!!!!!!!!". Il faut 180 secondes pour se recharger complètement. Attendez juste qu'il se termine. Une fois terminé, votre nouvelle fenêtre shell devrait ressembler à ceci :

En attendant le systemd....!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!! !!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Délai expiré pour que systemd passe à l'état d'exécution.

Cela peut indiquer une erreur de configuration systemd.

Essayez de continuer.

Confirmez que le génie est installé et que systemd fonctionne :

systemctl-statut mariadb

Vous devriez obtenir une sortie d'état pour mariadb. Notez que systemctl status mysql fonctionne également.

Arkane Systems recommande de terminer votre session WSL Genie avec wsl --shutdown. Cela libère toute la mémoire utilisée par WSL dans Windows.

Drupal installé mais pas de chargement CSS

Après l'installation de base de Drupal 8, les pages n'avaient aucun formatage. L'affichage de la source de la page a montré qu'aucun fichier CSS n'avait été chargé. Il m'a fallu deux jours pour comprendre cela, mais la petite histoire est que Drupal suppose qu'Apache2 utilise le répertoire /tmp, mais ce n'est pas le cas. Par défaut, Apache2 est configuré pour utiliser un répertoire tmp privé. Étrangement, l'appel de PHP à sys_get_temp_dir() renvoie /tmp, mais ce n'est pas ce qu'Apache2 utilise. Lorsque Drupal crée ses fichiers css et js optimisés, il essaie d'abord de les écrire dans le dossier /tmp, puis de les déplacer vers le dossier de destination, généralement sites/default/files/css et /js. Mais apache2 n'utilise pas /tmp donc cette opération échoue et aucun des fichiers css ou js. La désactivation des fichiers CSS et Javascript agrégés permettra de contourner ce problème, mais tous les fichiers CSS et js individuels seront chargés, ce n'est donc pas une solution.

Vous pouvez confirmer ce problème avec le simple fichier PHP suivant indiquant que /tmp n'est pas accessible. Il crée un fichier tmp et affiche le nom du fichier. Initialement, le nom de fichier est vide car l'appel de tmpfile() renvoie NULL. J'ai mis le code suivant dans test.php et l'ai appelé depuis mon site, localhost/mysite/test.php

Écho "n" ;

Écho "n" ;

Echo "Mon deuxième exemple PHP n";

Écho "n" ;

Écho "n" ;

Écho "

Si vous affichez la source de la page Rn Vous trouverez une nouvelle ligne dans cette chaîne.";

Écho "

Tester

";

$tmpDir =sys_get_temp_dir( );

Écho "

Répertoire TMP ='$tmpDir'

";

$file =tmpfile();

$path =stream_get_meta_data($file)['uri'];

Écho "

Chemin du fichier tmp="$path"

";

Écho "n" ;

Écho "n" ;

?>

Cela a abouti à "Chemin du fichier tmp ="

J'ai trouvé une solution à cela dans les commentaires de la question Stackoverflow de l'utilisateur One In a Million Apps. Cette solution modifie la configuration Apache2 de PrivateTmp=true à PrivateTmp=false. Notez que le changement d'Apache2 pour utiliser un répertoire tmp privé a été fait pour des raisons de sécurité et la plupart des applications peuvent être configurées pour utiliser un dossier tmp différent. J'ai essayé avec Drupal mais je n'ai pas réussi à le faire fonctionner. C'est ma première tentative d'exécution de Drupal sur Linux, et je voulais que les choses "fonctionnent simplement" sur mon ordinateur portable sans me soucier de la sécurité.

Cherchez d'abord le fichier contenant PrivateTmp dans le répertoire /lib :

%>sudo find/mount -type F -exec grep -e "PrivateTmp" '{}' ';' -print

Cela m'a donné une longue liste de matchs. Localisez le fichier qui contient le fichier apache2.service. Dans mon cas, il a été trouvé dans /usr/lib/systemd/system/apache2.service. copier ce fichier dans /etc. Annuaire. Modifiez /etc/apache2.services et remplacez PrivateTmp=true par PrivateTmp=false, enregistrez et redémarrez le service Apache2.

systemctl redémarre apache2

Exécutez à nouveau la page test.php et vous devriez voir le fichier tmp nommé confirmant l'accès au dossier /tmp.

Effacez tous les caches Drupal et rechargez les pages. Ils devraient maintenant s'afficher correctement. Je ne sais pas pourquoi, mais la fonctionnalité Drupal Clear Cache ne fonctionne pas toujours pour moi. La suppression manuelle de tous les fichiers dans sites/default/files/css js, puis l'effacement des tables de cache avec PhpMyAdmin fonctionnent toujours.

Configurer le débogage de VSCode

Configurer Xdebug

Installez d'abord les packages Remote - WSL et PHP Debug par Felix Becker dans VSCode.

J'ai ensuite installé Xdebug

sudo apt-rapide php7.3-xdebug

Ceci a installé la version 3.02 de Xdebug.

J'ai essayé de le configurer en suivant les nombreux exemples sur internet. Rien n'a fonctionné. Il s'est avéré que la plupart des exemples sont pour Xdebug 2.x, et ces paramètres de configuration ne fonctionnent plus avec 3.x

J'ai finalement réussi à le faire fonctionner avec les paramètres php.ini suivants.

J'avais besoin d'ajouter ce qui suit à la fois à /etc/php/7.3/apache2/php.ini et /etc/php/7.3/cli/php.ini sur mon système

Vous pouvez trouver l'emplacement de votre xdebug.so en allant dans le fichier de répertoire /lib puis en exécutant

trouver -name xdebug.so [xdebug]

zend_extension =./lib/php/20180731/xdebug.so

xdebug.start_with_request=Déclencheur

xdebug.mode =débogage

xdebug.discover_client_host =1

xdebug.log =/tmp/xdebug_remote.log

xdebug.client_port =9003

Configurer VSCode

Le débogage à distance dans VSCode utilise un fichier launch.json stocké à la racine du répertoire de votre projet dans .vscode/launch.json.

Vous pouvez créer le fichier launch.json à l'aide de l'interface utilisateur VSCode, mais je trouve plus facile de le créer manuellement. Accédez à la racine de votre site Web et créez un répertoire .vscode. Créez un fichier launch.json et chargez-le dans VSCode.

$>mkdir .vscode

$>CD .vscode

$>appuyez sur launch.json

$>lancement de code.json

Collez le json suivant dans le fichier et enregistrez.

{

// Utilisez IntelliSense pour en savoir plus sur les attributs possibles.

// Survolez le curseur pour voir les descriptions des attributs existants.

// Pour plus d'informations, visitez :https://go.microsoft.com/fwlink/?Links=830387

"Exécution":"0.2.0",

"Configuration" :[

{

"nom":"Écoutez XDebug",

"type":"php",

"request":"lancer",

"port":9003,

"stopOnEntry":vrai,

"log":vrai,

"pathMappings":

{

"/var/www/html":"${workspaceRoot}"

}

},

{

"name":"Lancer le script actuellement ouvert",

"type":"php",

"request":"lancer",

"programme":"${fichier}",

"cwd":"${fileDirname}",

"port":9003

}

]

}

Notez que sous pathMappings, où j'ai "/var/www/html", vous devez mettre le chemin complet à la racine de votre site Web.

Fermez VSCode. Dans votre invite de commande WSL Linux, revenez à la racine de votre site Web et chargez le projet dans VSCode. En supposant que vous êtes toujours dans le répertoire .vscode,

$>CD ..

$>encoder.

Cela devrait charger le projet dans VSCode et vous devriez voir la structure complète du répertoire de votre projet sur la gauche. Ouvrez votre page d'accueil, par ex. B. index.php et ajoutez un point d'arrêt. Appuyez sur F5 pour démarrer le débogage. Accédez à un navigateur Web et chargez le site. Revenez à VSCode et vous devriez voir qu'il s'est arrêté à votre point d'arrêt.

Le code ne fonctionne pas avec le shell zsh

Par défaut, WSL est configuré pour fonctionner avec le shell bash et voit le chemin d'accès à l'exécutable VSCode dans le PATH. Je suis passé à zsh et VSCode cesserait de fonctionner. La solution était de mettre un alias dans .zshrc . saisir

$>CD ~

$>Code .zshrc

Ajoutez l'alias suivant pointant vers le chemin d'accès complet au dossier de code exécutable tel qu'il apparaît à partir d'Ubuntu dans WSL. Remplacez YourUserName par votre nom d'utilisateur Windows actuel.

alias Code="/mnt/c/Users/YourUserName/AppData/Local/Programs/MicrosoftVSCode/bin/code"

Vous devez maintenant recharger la configuration zsh avec

$>source .zshrc

Le code devrait maintenant se charger à partir du shell zsh.

C'est ça!! Ces étapes ont finalement permis au débogage Drupal et VSCode de fonctionner correctement pour moi. Il m'a fallu deux jours pour comprendre tout cela. je suis un noob ! J'espère que cela fonctionnera pour vous et vous fera gagner du temps.

Juste un rappel de mon environnement. Windows 10 20H2, Ubuntu 20.04, PHP 7.3, MariaDB 10.4.17, Drupal 8.9.13, Xdebug 3.02, Windows Terminal, VSCode avec Remote – WSL et PHP Debug Felix Becker packages.

Bon codage !


Debian
  1. Comment installer les outils de débogage Android sur Debian 10 Buster

  2. Utilisateurs virtuels et domaines avec Postfix, Courier, MySQL et SquirrelMail (Debian Wheezy)

  3. Installer et configurer Apache et PHP avec cgi sur Ubuntu ou Debian

  4. Configurer les paramètres de la souris sur un système Debian

  5. Debian – Pourquoi les clés Fedora Gpg ne sont-elles pas signées ?

Comment installer Budgie Desktop sur Debian 11

Installer/activer et se connecter à SSH sur Fedora Linux 35

Comment installer Winamp sur Ubuntu en utilisant PlayOnLinux

Couleurs dans les pages de manuel ?

Comment installer l'interface graphique de GNOME sur CentOS

Comment dire à Xargs quel argument choisir ??