Blog de Philip Doxakis    LinkedIn    GitHub    RSS

ASP.NET MVC sur Linux

Adaptez votre workflow

Dotnet core 1.0

Un nouveau framework open source et multi-plateforme pour le développement de sites web et d’application. Il est maintenant possible de créer et de mettre en production des sites web avec ASP.NET en utilisant le langage C# sans avoir à utiliser Windows et le logiciel Visual Studio.

Développement sous Mac OS X.

Récemment, Microsoft a mis à la disposition des programmeurs un IDE disponible pour Windows, Linux et OS X. Il s’agit de Visual Studio Code. J’aime bien dire qu’il est un “Notepad++++”. Il s’intègre parfaitement avec git, le logiciel de gestion des versions du code source. Il est possible de déboguer son application en plaçant des points d’arrêt.

Il est vraiment très différent de ce que l’on connaît de Visual Studio. Il est beaucoup plus proche d’un éditeur texte et il est très léger. Les extensions permettent de combler un peu le vide. Il y a également de l’autocompletion.

Toutefois, je préfère utiliser Visual Studio Community 2015. C’est beaucoup plus agréable pour développer. Je n’ai pas trouvé de moyen facile d’utiliser des fichiers RESX sur VSCode. Enfin, ce n’est pas bien grave. J’utilise à la place des fichiers JSON pour mes traductions. Il n’y a pas d’autocomplete et de reconnaissance du code c# dans les vues Rasor.

Enfin, si voulez faire comme moi, il faudra réserver une partition pour Windows en utilisant l’assistant Boot Camp et installer VS2015 Community.

Mon setup sur le serveur web

J’utilise Nginx avec un reverse proxy vers le port 5000 (port par défaut) et Let’s Encrypt pour encrypter la communication avec le site web. Cela permet d’avoir le “HTTPS”.

J’utilise l’application supervisor sur Ubuntu pour garder le processus dotnet en cours d’exécution.

L’application donnée en exemple s’intitule BonCommande.

Je me suis basé sur les articles suivants:

Voici ci-dessous ma configuration pour supervisor:

# /etc/supervisor/conf.d/dotnetboncommande.conf
[program:dotnetboncommande]
command=/usr/bin/dotnet /var/webapp/boncommande/publish/BonCommande.dll
directory=/var/webapp/boncommande/publish/
autostart=true
autorestart=true
stderr_logfile=/var/log/dotnetboncommande.err.log
stdout_logfile=/var/log/dotnetboncommande.out.log
environment=ASPNETCORE_ENVIRONMENT=Production
user=www-data
stopsignal=INT

Lorsque l’application supervisor est arrêtée, je me suis assuré d’afficher une page qui indique que le site web est en maintenance. Ainsi, lorsque je mets à jour le site web, l’utilisateur verra que le site web n’est pas disponible pour l’instant.

Sur Nginx, vous pourriez ajouté :

location = /502.html {
    root  /var/www/fallback/;
}
error_page 502 /502.html;

Je place le code source du site web sur GitHub.

Déploiement sous Ubuntu

Lorsque je veux faire un déploiement, il suffit de me connecter en ligne de commande via le terminal avec la commande ssh et d’exécuter le script ci-dessous.

Ce script est fourni à titre d’exemple. Je vous invite à le modifier selon vos besoins.

#!/bin/sh

# Se déplacer dans le répertoire git
cd ~/projects/boncommande/BonCommande

# Obtenir la dernière version du code source
git pull

# Se placer dans le répertoire de la solution web
cd ~/projects/boncommande/BonCommande/src/BonCommande

# Vider dossier bin
rm -rf ~/projects/boncommande/BonCommande/src/BonCommande/bin/

# Restaurer les packages
dotnet restore

# Compiler la solution
dotnet publish --configuration Release

# Arrêter l'application en production.
sudo service supervisor stop

# Mettre à jour la base de données.
dotnet ef database update

# Déplacer le code de la solution dans le répertoire utilisé par la configuration de supervisor
sudo cp -a ~/projects/boncommande/BonCommande/src/BonCommande/bin/Release/netcoreapp1.0/publish/ /var/webapp/boncommande

# Redémarrer l'application avec la nouvelle version.
sudo service supervisor start

Conclusion

Pour conclure, je suis satisfait du script de déploiement. Il me permet de choisir le moment opportun pour faire le déploiement de l’application web. Le temps de downtime est très court.

Le but de cet article est de décrire ma démarche et d’inciter d’autres personnes à poursuivre la réflexion sur ce sujet.