Dans le précédent post, nous avons créer notre première image Nano Server. Dans ce post nous allons créer une image Nano Server comprenant un serveur web IIS pleinement fonctionnel et y déployer un site ASP.NET 5.
IMPORTANT : ce post a été réalisé avec la CTP 4 de Windows Server 2016. Il sera mis à jour ultérieurement.
IMPORTANT : Le site ASP.NET 5 s’exécute directement sur Nano Server (VM ou physique) mais pas dans un container. Dans un prochain post, nous verrons comment faire tourner un projet web ASP.NET 5 dans un container (déploiement qui sera certainement privilégiée par Microsoft). Attention, la différence de procédure peut-être importance, que vous soyez ou non dans un container.
Voici l’état de la documentation d’aujourd’hui sur http://aspnetmvc.readthedocs.org :
Alors prenez ce guide en attendant que la documentation soit complétée pour déployer et exécuter une application ASP.NET 5 sur Nano Server.
Création de l’image NanoServer avec IIS
Nous avons deux options pour installer IIS sur un Nano Server : hors ligne (Nano Server est éteint) ou en ligne (Nano Server est en cours d’exécution). Dans ce post nous allons utiliser l’installation hors ligne et créer une image directement avec IIS intégré (nous aurions également pu ajouter IIS à une image déjà existante).
1. Reprenez les étapes de création de la partie 1 de cette série, à l’étape 5 exécutez à la place la ligne de commande suivante : New-NanoServerImage -MediaPath D:\ -BasePath .\Base -TargetPath ‘.\NanoImage\NanoVM.vhdx’ -GuestDrivers –EnableRemoteManagementPort –Language en-us –ComputerName NanoServerNode1 –Packages Microsoft-NanoServer-IIS-Package –ReverseForwarders
A propos du package ReverseForwarders : Pour pouvoir exécuter HttpPlatformHandler et Kestrel (c’est à dire libuv.dll) sur Windows Server, vous allez devoir ajouter un package ReverseForwarders. Les appels à kernel32.dll et advapi32.dll (DLLs qui n’existent pas dans Nano Server) seront ainsi redirigés vers les nouvelles de ces APIs qui ont été déplacés dans d’autres composants. Ce package n’est pas installé par défaut dans Nano Server (alors que c’est le cas sur Win10 IoT) puisque l’objectif est de n’avoir que le strict minimum d’embarqué, il vous faut donc le rajouter.
Création de la machine virtuelle Hyper-V Nano Server
Créer une nouvelle machine virtuelle Hyper-V et connectez une machine virtuelle avec ce nouveau VHD. Vous devriez voir la recovery console.
Exemple de script PowerShell de création de VM :
New-VM -VHDPath ‘.\NanoImage\NanoVM.vhdx’ -MemoryStartupBytes 512MB -Name NanoServerNode1 -Generation 2
Set-VMMemory -VMName NanoServerNode1 -DynamicMemoryEnabled $True -MaximumBytes 512MB -MinimumBytes 256MB
Set-VMProcessor -Count 2 -VMName NanoServerNode1
Note : N’oubliez pas mettre le bon switch virtuel pour avoir du réseau et vous connecter à la VM (cf étape suivante pour le vérifier).
Vérifier le fonctionnement de IIS
1. La première chose à faire est de récupérer l’adrese IP de la machine, pour cela, deux options :
– Récupérer l’IP depuis la console de restauration (recovery console) en vous connectant sur la machine et en vous authentifiant
– Récupérer l’IP depuis Hyper-V avec la ligne de commande suivante : Get-VM –name <Nom de votre VM>| Select -ExpandProperty networkadapters | Select IPAddresses
2. Connectez vous avec un navigateur web sur cet IP, vous devriez observer une page de bienvenue IIS :
Vous voilà avec un serveur IIS fonctionnel.
Se connecter à Nano Server
Bien qu’il existe plusieurs façons de pouvoir se connecter à distance avec Nano Server, nous allons utiliser le module de gestion IIS PowerShell pour gérer notre serveur IIS. Tout d’abord
1. Pour pouvoir vous connecter au Nano Server avec une session PS, vous devez d’abord l’ajouter dans la liste des hôtes de confiance. Exécuter la commande PowerShell (toujours dans une console en tant qu’administrateur) : Set-Item WSMan:\localhost\Client\TrustedHosts « <IP de votre serveur> »
2. Exécutez la ligne de commande suivante dans PowerShell :
$session = New-PSSession –ComputerName <IP de votre serveur> –Credential Administrator
Enter-PSSession $session
Un prompt vous demandera le mot de passe de l’administrateur.
3. (facultatif )Dans la session distante, importez le module de gestion IIS puis récupérer les sites IIS avec les commandes :
Import-Module IISAdministration
Get-IISSite
Vous êtes connectez à Nano Server, nous allons pouvoir créer le projet ASP.NET 5 et le déployer.
Création du projet ASP.NET 5
Nano Server ne contient pas de Framework .NET justement parce que celui-ci possède trop de dépendance avec Windows et qu’il fallait couper sévèrement dans les composants. Néanmoins, pour faire fonctionner Powershell, Nano Server utilise une partie de .NET Core (la version open source et portable du framework .NET) mais qui ne suffira pour exécuter votre application.
Note : vous pouvez aussi récupérer le projet ASPNET5WebHello.
Installer la dernière version de .NET Core
Avant de créer votre projet ASP.NET 5 sur votre machine de développement, assurez vous que vous avez bien la dernière version de .NET Core (surtout en ces temps de Beta et RC) avec la commande : dnvm list
Si vous n’avez pas la dernière version (ou disons la version que vous souhaitez déployer) de la Core CLR (et en version x64, Nano Server ne s’exécutant qu’en 64 bits), exécuter le commande :
dnvm install latest –r coreclr –arch x64 –alias coreclr-latest
Projet ASP.NET 5 avec Visual Studio 2015
Dans Visual Studio 2015 (toutes éditions confondues) :
1. Créez un nouveau projet Visual C# > Web > ASP.NET Web Application :
2. Choisissez ASP.NET 5 Preview Templates :
3. Dans les propriétés du projet, vérifiez que la cible du DNX est bien celle que vous souhaitez :
Dans l’onglet de Debug (pour les tests sur l’environnement de développement) :
4. Lancez l’application (F5), pour voir un magnifique texte “hello world” apparaître dans votre navigateur.
5. Avant de publier votre application, il reste un détail important (sans quoi Nano Server ne servira pas vos pages web) : remplacez l’URL du projet. Dans le fichier project.json, changer la ligne :
« commands »: {
« web »: « Microsoft.AspNet.Server.Kestrel server.urls=http://localhost:5000″
},
par
« commands »: {
« web »: « Microsoft.AspNet.Server.Kestrel server.urls=http://<ip de votre serveur Nano Server>:5000″
},
Enregistrez les modifications du fichier.
6. Nous allons maintenant pouvoir publier l’application web sur notre disque dur avant de copier les fichiers vers Nano Server. Ouvrez une console PowerShell dans le répertoire de votre projet :
Dans la console excutez les commandes suivantes pour restaurer les packages (normalement Visual Studio a dû le faire pour vous mais nous ne sommes jamais trop prudent) et publier l’application avec le runtime dnx-coreclr-win-x64.1.0.0-rc1-update1 :
dnu restore
dnu publish –out <chemin vers répertoire de sortie>–runtime C:\Users\<nom de l’utilisateur>\.dnx\runtimes\dnx-coreclr-win-x64.1.0.0-rc1-update1
Remarque : Publiez votre projet si possible à la racine d’un disque, la technique de copie à suivre ne permettra pas les chemins d’accès de plus de 260 caractères.
6. Vous devriez avoir dans votre répertoire cible, un contenu similaire à celui-ci :
Publication du projet vers Nano Server
A ce stade, la seule option que j’ai trouvé pour publier le site est de faire un copier/coller du répertoire publié vers IIS sur le Nano Server. La possibilité d’utiliser un WebDeploy n’est aujourd’hui pas supporté sur le IIS de Nano Server.
Remarque : pour procéder à la copie vers une session distante, si vous êtes sur Windows 8.1 ou 7, vous devrez installer Windows Management Framework 5.0.
Nous allons donc procéder à une copie entre le système de fichier de la machine de développement et le serveur Nano Server :
– Ouvrez une session avec : $session = New-PSSession –ComputerName <ip de voter serveur> –Credentials Administrator
– Exécutez la commande de copie : Copy-item –ToSession $session –Path <chemin vers votre projet publié> –Destination C:\Users\Administrator\Documents –Recurse
La copie des fichiers devraient prendre un peu de temps. Les fichiers de votre projet sont maintenant publiés sur Nano Server.
Configurer le pare-feu de Nano Server
Nous avons configurer le site sur le port 5000 qui n’est pas encore ouvert (les ports HTTP et HTTPS sont déjà ouverts). Pour ouvrir le port 5000, vous avez deux options : la ligne de commande ou la console de restauration (recovery console) :
netsh advfirewall firewall add rule name= »HTTP (5000) » dir=in action=allow protocol=TCP localport=5000
Démarrer le site web
Le démarrage va être effectuer via le fichier web.cmd qui a été créé lors de la publication du projet. Ce fichier contient les commandes nécessaires pour démarrer votre projet en analysant le fichier project.json.
Naviguez dans le répertoire approot de votre projet et exécuter le fichier web.cmd pour démarrer le serveur :
Ouvrez un navigateur avec l’adresse http://<ip de votre serveur>:5000 , et voilà :
Important : une fois que vous aurez lancé la commande web.cmd, vous devriez observer un écran noir dans votre machine virtuelle. Une fois le serveur arrêté (Ctrl+C), la recovery console réaffichera l’écran en cours. Nous verrons dans un prochain post comment faire éviter cela.
Nano Server est définitivement le futur du serveur IIS pour les applications ASP.NET 5. Bien que cette édition soit pour le moment assez limitée en termes d’interface et d’outil de gestion, Microsoft devrait améliorer cet aspect là dans les prochaines versions de son OS.
A ce stade, le manque de documentation se fait sentir ! La communauté et Microsoft devrait combler cette lacune rapidement au vu de l’engouement pour Nano Server. Tous les contributeurs de docs.asp.net sont les bienvenus sur le projet Github.
La solution présentée dans ce post n’est pas définitive, mais permet de montrer comment exécuter une application web ASP.NET 5 dans Nano Server.
Dans un prochain post nous verrons l’hébergement d’un application web ASP.NET 5 dans un container Nano Server et également comment bénéficier de IIS pour l’exécution en production.
Ressources
En attendant, voici quelques ressources qui m’ont bien aidé (malgré que tout ne fonctionne pas) à faire fonctionner un site ASP.NET 5 sur le IIS de Nano Server :
– Pour plus de détails sur les commandes et fichier de configuration IIS : https://msdn.microsoft.com/en-us/library/mt627783.aspx
– Channel 9 “Nano Server in a container running IIS & ASP.NET 5” : https://channel9.msdn.com/Series/Nano-Server-Team/Demo-Nano-Server-in-a-Container-running-IIS-ASPNET5